记:新闻分类问题时多分类问题,与电影评论分类很类似又有一些差别,电影评论只有两个分类,而新闻分类有46个分类,所以在空间维度上有所增加,多分类问题的损失函数与二分类问题选择不同,最后一层使用的激活函数不同,其他基本流程都是一样的。

1、路透社数据集:包含许多短新闻及其对应的主题,是一个简单的,广泛使用的文本分类数据集,包含46个不同的主题,每个主题至少有10个样本,其中有8982个训练样本和2246个测试样本。

2、在编码标签时有两种方法(注意损失函数的选择是不同的):

(1)将其转换为整数张量:

#转换为张量
y_train = np.array(train_labels)
y_test = np.array(test_labels)#损失函数应选择:sparse_categorical_crossentropy
model.compile(optimezer='rmsprop',loss='sparse_categorical_crossentropy',metrics=['acc'])

(2)one-hot分类编码(两种实现方法):

#①代码实现如下: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)#②keras内置方法实现
one_hot_train_labels=to_categorical(train_labels)
one_hot_test_labels=to_categorical(test_labels)#损失函数的选择为:categorical_crossentropy
model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])

3、完整代码及部分注释如下:

#加载路透社数据集
from keras.datasets import reuters(train_data,train_labels),(test_data,test_labels)=reuters.load_data(num_words=10000)print(len(train_data),len(test_data))
print(train_data[1])
print(train_labels)

输出结果如下图:

#将索引解码为新闻文本(非必须,只是解码出来查看一下)
word_index=reuters.get_word_index()#将单词映射为整数索引的字典
reverse_word_index=dict([(value,key) for (key,value) in word_index.items()])#键值颠倒
decoded_review=' '.join([reverse_word_index.get(i-3,'?') for i in train_data[0]])#解码,i-3是因为0,1,2是“填充”,“序列开始”,“未知词”#查看解码后的数据
print(decoded_review)

解码后的新闻数据如下图:

#对数据进行编码
import numpy as np#将整数序列编码为二进制矩阵,之后才能够将数据输入到神经网络中
def vectorize_sequences(sequences,dimension=10000):results=np.zeros((len(sequences),dimension))#创建一个该形状的零矩阵for i,sequence in enumerate(sequences):results[i,sequence]=1.return results#将训练数据和测试数据向量化
x_train=vectorize_sequences(train_data)
x_test=vectorize_sequences(test_data)#将标签进行向量化,有两种方法分别是:将标签列表转化为整数张量,或者使用one-hot分类编码,代码实现如下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)#在keras内置方法可以实现这个操作,如下:
#one_hot_train_labels=to_categorical(train_labels)
#one_hot_test_labels=to_categorical(test_labels)#构建网络,与电影评论分类不同的是,该问题的输出类别是46个,16维的空间无法区别46个分类,这个问题改成64维#模型定义
from keras import models
from keras import layersmodel=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'])#验证模型,留出1000个样本作为验证集
x_val=x_train[:1000]
partical_x_train=x_train[1000:]
y_val=one_hot_train_labels[:1000]
partical_y_train=one_hot_train_labels[1000:]#训练模型,共20次迭代
history=model.fit(partical_x_train,partical_y_train,epochs=20,batch_size=512,validation_data=(x_val,y_val))

迭代过程数据如下图所示:(非完整截图)

#绘制训练损失和验证损失图像import matplotlib.pyplot as plthistory_dict=history.history
loss_values=history_dict['loss']
val_loss_values=history_dict['val_loss']epochs=range(1,len(loss_values)+1)
plt.plot(epochs,loss_values,'bo',label='Training loss')#bo表示蓝色原点
plt.plot(epochs,val_loss_values,'b',label='Validation loss')#b表示蓝色实线
plt.title('training and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()#绘制训练精度和验证精度图像
#绘制训练和验证精度
plt.clf()   # clear figure
acc_values = history_dict['acc']
val_acc_values = history_dict['val_acc']plt.plot(epochs, acc_values, 'bo', label='Training acc')
plt.plot(epochs, val_acc_values, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()plt.show()

两幅图如下所示:

#如上图,在第9轮时出现了过拟合,现在我们重新训练一个网络,迭代9测,然后再测试集上进行评估
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'])
model.fit(partical_x_train,partical_y_train,epochs=9,batch_size=512,validation_data=(x_val, y_val))
results = model.evaluate(x_test, one_hot_test_labels)print(results)

测评结果如下图:(测试精度达到了78%)

#在新数据上生成预测结果predict_result=model.predict(x_test)
print(predict_result.shape)
print(predict_result[0])
print(np.sum(predict_result[0]))

预测结果如下图所示:(因为使用的是softmax,所以最后所有预测结果的为1,或者逼近1)

新闻分类(python深度学习——多分类问题)相关推荐

  1. Python深度学习之分类模型示例,MNIST数据集手写数字识别

    MNIST数据集是机器学习领域中非常经典的一个数据集,由60000个训练样本和10000个测试样本组成,每个样本都是一张28 * 28像素的灰度手写数字图片. 我们把60000个训练样本分成两部分,前 ...

  2. 电影评论分类(python深度学习——二分类问题)

    记:二分类问题应该是应用最广泛的机器学习问题,电影评论分类是指根据电影评论的文字内容,将其划分为正面评论或者是负面评论,是一个二分类问题,我从头到尾学习了代码,并且进行了整理,有的内容是个人理解,如有 ...

  3. 毕设 GRU的 电影评论情感分析 - python 深度学习 情感分类

    文章目录 1 前言 项目介绍 2 情感分类介绍 3 数据集 4 实现 4.1 数据预处理 4.2 构建网络 4.3 训练模型 4.4 模型评估 4.5 模型预测 5 最后 1 前言

  4. Python深度学习(4):猫狗分类

    这个项目使用卷积神经网络,<Python深度学习>中使用了两个方法实现.一个是自己搭建卷积网络,另一个是直接使用VGG16.其中直接使用VGG16又可以分为抽取特征和微调模型两种方法. 1 ...

  5. Python深度学习实战:声呐返回值分类

    Python深度学习实战:声呐返回值分类 声呐物体分类数据 简单的神经网络 预处理数据以增加性能 调整模型的拓扑和神经元 缩小网络 扩大网络 总结 本章我们使用Keras开发一个二分类网络.本章包括: ...

  6. Python深度学习实战:多类花朵分类

    Python深度学习实战:多类花朵分类 鸢尾花分类数据集 导入库和函数 指定随机数种子 导入数据 输出变量编码 设计神经网络 用K折交叉检验测试模型 总结 本章我们使用Keras为多类分类开发并验证一 ...

  7. python 动物分类_《python深度学习》笔记---5.3-1、猫狗分类(使用预训练网络)

    <python深度学习>笔记---5.3-1.猫狗分类(使用预训练网络) 一.总结 一句话总结: [小型图像数据集]:想要将深度学习应用于小型图像数据集,一种常用且非常高效的方法是使用预训 ...

  8. Python深度学习实例--基于卷积神经网络的小型数据处理(猫狗分类)

    Python深度学习实例--基于卷积神经网络的小型数据处理(猫狗分类) 1.卷积神经网络 1.1卷积神经网络简介 1.2卷积运算 1.3 深度学习与小数据问题的相关性 2.下载数据 2.1下载原始数据 ...

  9. 【NLP】深度学习文本分类|模型代码技巧

    文本分类是NLP的必备入门任务,在搜索.推荐.对话等场景中随处可见,并有情感分析.新闻分类.标签分类等成熟的研究分支和数据集. 本文主要介绍深度学习文本分类的常用模型原理.优缺点以及技巧,是「NLP入 ...

最新文章

  1. 使用Python和OpenCV检测图像中的条形码
  2. 刘忠范院士:新型研发机构建设成了口号
  3. Scut游戏服务器引擎6.1.5.6发布,直接可运行,支持热更新
  4. 我的自白——华夏藏珍第一周
  5. kibana7.x操作
  6. DispacherServlet默认加载配置文件名
  7. oracle 查询时间跨度一年,关于时间跨度比较的OVERLAPS函数
  8. vuepc端实现数据加载_多模态注意力机制+多模态数据,完全实现端到端课堂活动检测|ICASSP 2020...
  9. linux view查看日志命令,【Linux】linux查看日志文件内容命令tail、cat、tac、head、echo...
  10. Python跨文件引用模块
  11. embedding在推荐系统中的应用总结,这些你知道吗?
  12. Flink Forward Asia Hackathon 正式启动,10W 奖金等你来!
  13. 前端跨域解决方案总结
  14. java 文本提取_Java 提取PDF 文本内容
  15. 高职高专计算机毕业论文平面设计,高职高专平面设计论文
  16. 情侣网名java语言_甜蜜情侣网名600个
  17. 如何打造个人IP品牌?_云媒体软文营销
  18. 怎样在VS2005中添加Flash控件
  19. 三个常见博弈游戏以及 SG 函数和 SG 定理
  20. 中国互联网出现数学家的科普乐园

热门文章

  1. YOLOX训练:显存足够,但依旧CUDA out of memory(Tried to allocate 5.58 GiB,8.00 GiB total capacity,6.40 GiB free)
  2. CUDA out of memory. Tried to allocate 192.00 MiB (GPU 0; 2.00 GiB total capacity; 960.29 MiB already
  3. 你可能还没有听过“奶嘴理论”这个词,但是你可能已经被它毁了
  4. ddl/dml/dql/dcl
  5. Bootstrap CSS
  6. 机器学习笔记之玻尔兹曼机(一)基本介绍
  7. PBR常用贴图及使用事项
  8. CAD看图软件哪个好?好用的CAD看图软件推荐
  9. 【Spring Cloud】多数据源配置
  10. python将txt中的内容导入到excel