1.路透社数据集:
本次使用的路透社数据集包含许多短新闻及其对应的主题,由路透社在1986年发布。包括46个不同的主题,其中某些主题的样本更多,但是训练集中的每个主题都有至少10个样本。
与IMDB数据集一样,路透社数据集也内置到了Keras库中,并且已经经过了预处理。
2.分步骤实现:
2.1 加载路透社数据集并将样本解码为英文单词
2.2 数据预处理
2.3 构建网络
2.4 训练模型
2.5 可视化监控参数
2.6 重新训练模型,并在测试数据上评估模型效果
3.全流程代码:
import numpy as np
from keras.datasets import reuters
from keras import models
from keras import layers
# 参数num_words=10000表示仅保留训练数据中前10000个最常出现的单词,其他低频单词将被舍弃,这样得到的向量数据就不会太大,便于后续处理
(train_data,train_labels),(test_data,test_labels) = reuters.load_data(num_words=10000)
# 将训练和测试数据向量化
def vectorrize_sequences(sequences,dimension=10000):
results = np.zeros((len(sequences),dimension)) # 这里二维数组要用两个括号括起来,否则汇报TypeError: data type not understood错误
for i ,sequence in enumerate(sequences):
results[i,sequence] = 1
return results
x_train = vectorrize_sequences(train_data)
x_test = vectorrize_sequences(test_data)
# 将训练和测试标签向量化
def to_one_hot(labels,dimension=46):
results = np.zeros((len(labels),dimension))
for i ,label in enumerate(labels):
results[i,label] = 1
return results
one_hot_train_labels = to_one_hot(train_labels)
one_hot_test_labels = to_one_hot(test_labels)
# 构建模型
model = models.Sequential()
model.add(layers.Dense(64,activation='relu',input_shape=(10000,)))
model.add(layers.Dense(64,activation='relu'))
model.add(layers.Dense(46,activation='softmax'))
# 编译模型
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 划分验证集
x_val = x_train[:1000]
partial_x_train = x_train[1000:]
y_val = one_hot_train_labels[:1000]
partial_y_train = one_hot_train_labels[1000:]
# 训练模型
history = model.fit(partial_x_train,
partial_y_train,
epochs=20,
batch_size=512,
validation_data=(x_val,y_val))
# 评估模型
results = model.evaluate(x_test,one_hot_test_labels)
print(results)
Reference:
《Deep Learning with Python》