使用Keras处理多分类问题——以新闻分类为例

1.路透社数据集:

本次使用的路透社数据集包含许多短新闻及其对应的主题,由路透社在1986年发布。包括46个不同的主题,其中某些主题的样本更多,但是训练集中的每个主题都有至少10个样本。
与IMDB数据集一样,路透社数据集也内置到了Keras库中,并且已经经过了预处理。

2.分步骤实现:

  • 1.加载路透社数据集并将样本解码为英文单词
  • 2.数据预处理
  • 3.构建网络
  • 4.训练模型
  • 5.可视化监控参数

  • 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》

你可能感兴趣的:(使用Keras处理多分类问题——以新闻分类为例)