Bootstrap

关于decoded_newswire = ‘ ‘.join([reverse_word_index.get(i - 3, ‘?‘) for i in train_data[0]])

在keras使用路透社数据集或其他数据集中,往往需要将文字解码。
这就会用到代码:

decoded_newswire = ' '.join([reverse_word_index.get(i - 3, '?') for i in  train_data[0]])

在这里插入图片描述
前面的将word_index的key和value键值对反转的操作很简单,估计都能看懂。
但是这个处理数字到单词映射时候索引减去3很多人不明白。
我们查看帮助:
在这里插入图片描述
在这里插入图片描述
他其实是给出了解释的,就是我们使用reuters.get_word_index()获得的字典中,所有单词都是从1开始的,但是框架下载的train_data等数据,其保存的数字是从包含了前面获取字典中没有的“padding”(填充)、“start of sequence”(序列开始)、“unknown”(未知词)这三个词。也就是说,reuters.get_word_index()获得的字典里面没有padding,start of sequence和unknown这三种情况。而train_data这个实际训练结果,是考虑了这三种情况的,并编了码
就像get_word_index()里面注释的例子那样,get_word_index()的序号为1的是the,但是实际上train_data里面the序号为4(前面还有三种情况),所以我们循环遍历(key,value)获取key之后,还必须-3才能使用,就是这个道理。

# 框架下载的train_data等数据
(train_data,train_labels),(test_data,test_lebels) = reuters.load_data(num_words=10000) #元组类型数据,分为训练数据和对应标签,测试数据与对应标签.参数num_words=10000将数据限定为前10000个最常出现的单词

注意:
使用reuters.get_word_index()获得的字典中key都是从1开始算的
在这里插入图片描述
我们继续对train_data查看,发现也没有0,说明train_data也是从1开始的
在这里插入图片描述
综上,我们明白了,所谓的索引-3不是什么神奇操作,只是因为train_data这个实际数据的key和word_index里面的单词映射差了三个单词编码罢了

;