根据电影评论的文字内容将其划分为正面或负面。
加载 IMDB 数据集
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000) # 保留训练数据中前10000个经常出现的词
将某条评论迅速解码为英文单词
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000) # 保留训练数据中前10000个经常出现的词
word_index = imdb.get_word_index() # word_index是一个将单词映射为整数索引的字典
reversed_word_index = dict(
[(value, key) for (key, value) in word_index.items()]) # 键值颠倒,将整数索引映射为单词
decoded_review = ' '.join(
[reversed_word_index.get(i - 3, '?') for i in train_data[0]])
# 将评论解码。注意,索引减去了3,因为0、1、2是为“padding”(填充)、“start of sequence”(序列开始)、
# “unknown”(未知词)保留的索引
Python 字典(Dictionary) get()方法
语法:
dict.get(key, default=None)
参数:
key -- 字典中要查找的键。
default -- 如果指定键的值不存在时,返回该默认值值。
准备数据
不能将整数序列直接输入神经网络,要将列表转换为张量。转换方式有两种:
1、填充列表,使其有相同的长度,再列表转换成形状为(samples, word_idices)的整数张量,然后网络第一层使用能处理这种整数张量的层(Embedding层);
2、对列表进行 one-hot 编码,将其转换为0和1的向量。若将序列 [3, 5] 转化为10000维向量,只有索引3和5的元素时1,其余元素是0。然后网络第一层可用 Dense 层,它能处理浮点数向量数据。
import numpy as np
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000) # 保留训练数据中前10000个经常出现的词
def vectorize_sequences(sequences, dimension=10000):
results = np.zeros((len(sequences), dimension)) # 创建一个形状为(len(sequences), dimension)的零矩阵
for i, sequence in enumerate(sequences): # enumerate为内建序列函数
results[i, sequence] = 1 # 将results[i]的指定索引设为1
return results
x_train = vectorize_sequences(train_data) # 将训练数据向量化
x_test = vectorize_sequences(test_data) # 将训练数据向量化
print(x_train[0])
y_train = np.asarray(train_labels).astype('float32') # 将标签向量化
y_test = np.asarray(test_labels).astype('float32') # 将标签向量化
Using TensorFlow backend.
[0. 1. 1. ... 0. 0. 0.]