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
要证明演示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(未知词) 所代替