首页 > 其他分享 >tensorflow.keras.datasets 中关于imdb.load_data的使用说明

tensorflow.keras.datasets 中关于imdb.load_data的使用说明

时间:2023-03-17 10:59:04浏览次数:38  
标签:load datasets 10000 keras 单词 num words 100 data

python深度学习在加载数据时(num_words=10000)所代表的意义
首先写一段深度学习加载数据集的代码:

from keras.datasets import reuters
(train_data, train_labels), (test_data, test_labels) = reuters.load_data(num_words=10000)
#(train_data, train_labels), (test_data, test_labels) = reuters.load_data()

如代码中所示:第二行和第三行的差别在于load_data() 函数中的参数num_words=10000
解释: 参数(num_words=10000)将数据限定为前10000个最常出现的单词,如果数据集中存在大于10000的单词,则令其为2,看不太明白的话接着往下看。
用代码解释: 上面的代码中我用来举例的数据集是路透社数据集(reuters),该数据集中共包含8982条训练数据和其标签以及2246条测试数据和其标签,也就是说:

print(len(train_data))
输出:8982
1
2
要证明演示num_words=10000的作用,我找到了train_data中第1125条数据的第200个单词的单词编号为10003

print(train_data[1225][195:205])
输出1:[190, 2636, 8, 268, 1648, 10003, 3027, 24, 4, 294]
输出2:[190, 2636, 8, 268, 1648, 2, 3027, 24, 4, 294]

其中输出1:是没有设定num_words=10000 的输出结果
  输出2:是设定了参数num_words=10000 的输出结果
很显然:train_data中第1125条数据的第200个单词的单词编号为10003,超出了10000,因此在设置了参数num_words=10000之后,如输出2所示,将10003修改为了2
为什么是2呢(对2的解释)
在这类数据集中,每条数据本应该是单词组成的句子,但是用单词来表示一条样本输入到神经网络中并没有太大的意义,因此,将所有可能的单词按照使用的频繁程度建立一个单词字典。这样,一条样本就可以用一串数字编号表示。
其中0: 是为“padding”(填充)所保留的索引
  1: 是为“start of sequence”(序列开始)所保留的索引
  2: 是为“unknown”(未知词)所保留的索引
因此在设置了参数num_words=10000(数字编号不能超过10000) 之后,所有高于10000的单词编号都被用2(未知词) 所代替

资料来源:https://blog.csdn.net/m0_48692571/article/details/108830260?ops_request_misc=&request_id=&biz_id=102&utm_term=num_words%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-108830260.142^v74^insert_down1,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187

 

 

num_words
整数。定义的是大于该词频的单词会被读取。如果单词的词频小于该整数,会用oov_char定义的数字代替。默认是用2代替。
需要注意的是,词频越高的单词,其在单词表中的位置越靠前,也就是索引越小,所以实际上保留下来的是索引小于此数值的单词。

maxlen
整数。评论单词数小于此数值的会被读入。比如一条评论包含的单词数是120,如果maxlen=100,则该条评论不会被读入。

num_words使用

    • 示例如下:

from tensorflow.keras import datasets

(x,y),(tx,ty) = datasets.imdb.load_data()
print("全部数据:",len(x),' 第一个评论:',len(x[0]))
print('第一个评论内容:',x[0][0:10])
(x100,y100),(tx100,ty100) = datasets.imdb.load_data(num_words=100)
print("前100词频:",len(x100),' 第一个评论【100】:',len(x100[0]))
print('第一个评论内容【100】:',x100[0][0:10])

结果如下:

全部数据: 25000 第一个评论: 218
第一个评论内容: [1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65]
前100词频: 25000 第一个评论【100】: 218

第一个评论内容【100】: [1, 14, 22, 16, 43, 2, 2, 2, 2, 65]

对比可以发现,索引大于100的都被2替代了。

maxlen使用
示例如下:

from tensorflow.keras import datasets
(x,y),(tx,ty) = datasets.imdb.load_data()
print("全部数据:",len(x),' 第一个评论:',len(x[0]))
(x100,y100),(tx100,ty100) = datasets.imdb.load_data(maxlen=100)
print("长度小于100:",len(x100),' 第一个评论【100】:',len(x100[0]))

结果:

全部数据: 25000 第一个评论: 218
长度小于100词频: 5736 第一个评论【100】: 43

可以看出定义了maxlen之后,读入的数据少了。

 

资料来源:https://blog.csdn.net/weixin_42272768/article/details/112093163

 

标签:load,datasets,10000,keras,单词,num,words,100,data
From: https://www.cnblogs.com/ycy1273984518/p/17225777.html

相关文章