Python深度学习案例2--新闻分类(多分类问题)

本节构建一个网络,将路透社新闻划分为46个互斥的主题,也就是46分类

案例2:新闻分类(多分类问题)

1. 加载数据集

from keras.datasets import reuters

(train_data, train_labels), (test_data, test_labels) = reuters.load_data(num_words=10000)

将数据限定在10000个最常见出现的单词,8982个训练样本和2264个测试样本

len(train_data)

8982

len(test_data)

2246

train_data[10]

2. 将索引解码为新闻文本

word_index = reuters.get_word_index()
reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
# Note that our indices were offset by 3
# because 0, 1 and 2 are reserved indices for "padding", "start of sequence", and "unknown".
decoded_newswire = ‘ ‘.join([reverse_word_index.get(i - 3, ‘?‘) for i in train_data[0]])
train_labels[10]

3. 编码数据

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)

from keras.utils.np_utils import to_categorical

one_hot_train_labels = to_categorical(train_labels)
one_hot_test_labels = to_categorical(test_labels)

4. 模型定义

from keras import models
from keras import layers

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‘))

5. 编译模型

对于这个例子,最好的损失函数是categorical_crossentropy(分类交叉熵),它用于衡量两个概率分布之间的距离

model.compile(optimizer=‘rmsprop‘, loss=‘categorical_crossentropy‘, metrics=[‘accuracy‘])

6. 留出验证集

留出1000个样本作为验证集

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:]

7. 训练模型

history = model.fit(partial_x_train, partial_y_train, epochs=20, batch_size = 512, validation_data = (x_val, y_val))

8. 绘制训练损失和验证损失

import matplotlib.pyplot as plt

loss = history.history[‘loss‘]
val_loss = history.history[‘val_loss‘]

epochs = range(1, len(loss) + 1)

plt.plot(epochs, loss, ‘bo‘, label = ‘Training loss‘)
plt.plot(epochs, val_loss, ‘b‘, label = ‘Validation loss‘)
plt.title(‘Training and validation loss‘)
plt.xlabel(‘Epochs‘)
plt.ylabel(‘Loss‘)
plt.legend()

plt.show()

9. 绘制训练精度和验证精度

plt.clf()     # 清除图像
acc = history.history[‘acc‘]
val_acc = history.history[‘val_acc‘]

plt.plot(epochs, acc, ‘bo‘, label=‘Training acc‘)
plt.plot(epochs, val_acc, ‘b‘, label=‘Validation acc‘)
plt.title(‘Training and validation accuracy‘)
plt.xlabel(‘Epochs‘)
plt.ylabel(‘Accuracy‘)
plt.legend()

plt.show()

10. 从头开始重新训练一个模型

中间层有64个隐藏神经元

# 从头开始训练一个新的模型
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(partial_x_train, partial_y_train, epochs=9, batch_size = 512, validation_data = (x_val, y_val))
results = model.evaluate(x_test, one_hot_test_labels)
results
[0.981157986054119, 0.790739091745149]这种方法可以得到79%的精度
import copy

test_labels_copy = copy.copy(test_labels)
np.random.shuffle(test_labels_copy)
float(np.sum(np.array(test_labels) == np.array(test_labels_copy))) / len(test_labels)
0.19011576135351738 完全随机的精度约为19%

10. 从头开始重新训练一个模型

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

11. 处理标签和损失的另一种方法

y_train = np.array(train_labels)
y_test = np.array(test_labels)
model.compile(optimizer=‘rmsprop‘, loss=‘sparse_categorical_crossentropy‘, metrics=[‘acc‘])

12. 中间层维度足够大的重要性

最终输出是46维的,本代码中间层只有4个隐藏单元,中间层的维度远远小于46

model = models.Sequential()
model.add(layers.Dense(64, activation=‘relu‘, input_shape=(10000,)))
model.add(layers.Dense(4, activation=‘relu‘))
model.add(layers.Dense(46, activation=‘softmax‘))

model.compile(optimizer=‘rmsprop‘, loss=‘categorical_crossentropy‘, metrics=[‘accuracy‘])
model.fit(partial_x_train, partial_y_train, epochs=20, batch_size = 128, validation_data = (x_val, y_val))
Epoch 20/20
7982/7982 [==============================] - 2s 274us/step - loss: 0.4369 - acc: 0.8779 - val_loss: 1.7934 - val_acc: 0.7160验证精度最大约为71%,比前面下降了8%。导致这一下降的主要原因在于,你试图将大量信息(这些信息足够回复46个类别的分割超平面)压缩到维度很小的中间空间

13. 实验

1. 中间层32个

model = models.Sequential()
model.add(layers.Dense(64, activation=‘relu‘, input_shape=(10000,)))
model.add(layers.Dense(32, activation=‘relu‘))
model.add(layers.Dense(46, activation=‘softmax‘))

model.compile(optimizer=‘rmsprop‘, loss=‘categorical_crossentropy‘, metrics=[‘accuracy‘])
model.fit(partial_x_train, partial_y_train, epochs=20, batch_size = 128, validation_data = (x_val, y_val))
results = model.evaluate(x_test, one_hot_test_labels)
results
Epoch 20/20
7982/7982 [==============================] - 2s 231us/step - loss: 0.1128 - acc: 0.9564 - val_loss: 1.1904 - val_acc: 0.7970
2246/2246 [==============================] - 0s 157us/step

Out[29]:

[1.4285533854925303, 0.7773820125196835]精度大约在77%

1. 中间层128个

model = models.Sequential()
model.add(layers.Dense(64, activation=‘relu‘, input_shape=(10000,)))
model.add(layers.Dense(128, activation=‘relu‘))
model.add(layers.Dense(46, activation=‘softmax‘))

model.compile(optimizer=‘rmsprop‘, loss=‘categorical_crossentropy‘, metrics=[‘accuracy‘])
model.fit(partial_x_train, partial_y_train, epochs=9, batch_size = 128, validation_data = (x_val, y_val))
results = model.evaluate(x_test, one_hot_test_labels)
results
Epoch 9/9
7982/7982 [==============================] - 2s 237us/step - loss: 0.1593 - acc: 0.9536 - val_loss: 1.0186 - val_acc: 0.8060
2246/2246 [==============================] - 0s 159us/step

Out[31]:

[1.126946303426211, 0.790293855743544]精度大约在79%

原文地址:https://www.cnblogs.com/gezhuangzhuang/p/9823325.html

时间: 2024-08-28 21:28:55

Python深度学习案例2--新闻分类(多分类问题)的相关文章

Python深度学习该怎么学?

Python想必对我们来说已经很熟悉了,Python的发展带来了一股学习Python的浪潮,聪明的人早已看准这个发展的好时机开始学习Python,那么我想问你知道Python深度学习是什么吗?不懂了吧,那让小编给你普及一下这方面的知识吧. 深度学习目前已经成为了人工智能领域的突出话题.它在"计算机视觉"和游戏(AlphaGo)等领域的突出表现而闻名,甚至超越了人类的能力.近几年对深度学习的关注度也在不断上升. 在这篇文章中,我们的目标是为所有Python深度学习的人提供一条学习之路,同

《Python深度学习》高清中文版pdf+高清英文版pdf+源代码

下载:https://pan.baidu.com/s/1fngyDdcld6rA5qoho1dQCw 更多最新的资料:http://blog.51cto.com/3215120 <Python深度学习>[中文版和英文版][高清完整版PDF]+[配套源代码] 高清中文版PDF,314页,带目录和书签,彩色配图,能够复制粘贴:高清英文版PDF,386页,带目录和书签,彩色配图,能够复制粘贴:中英文两版可以对比学习. 配套源代码: 经典书籍,讲解详细: 其中高清中文版如图 原文地址:http://b

好书推荐计划:Keras之父作品《Python 深度学习》

大家好,我禅师的助理兼人工智能排版住手助手条子.可能非常多人都不知道我.由于我真的难得露面一次,天天给禅师做底层工作. wx_fmt=jpeg" alt="640? wx_fmt=jpeg" /> 今天条子最终也熬到这一天! 最终也有机会来为大家写文章了! 激动的我啊.都忘了9月17号中午和禅师在我厂门口兰州料理吃饭.禅师要了一碗牛拉+一瓶可乐+一碟凉菜,总共30元.让我结账至今还没还钱的事儿了.真的,激动的我一点儿都想不起来了. 国庆长假就要開始了,作为人工智能头条的

分享《Python深度学习》高清中文版pdf+高清英文版pdf+源代码

下载:https://pan.baidu.com/s/1O2aHCeGP8p6FyBkVjFTnTQ 最新出版的<Python深度学习>. <Python深度学习>高清中文版pdf+高清英文版pdf+源代码 高清中文版PDF,314页,带目录和书签,彩色配图,文字能够复制粘贴:高清英文版PDF,386页,带目录和书签,彩色配图,文字能够复制粘贴:中英文两版可以对比学习. 配套源代码: 经典书籍,讲解详细: 其中高清中文版如图 原文地址:http://blog.51cto.com/1

《Python深度学习》高清中文版pdf+高清英文版pdf+源代码([美] 弗朗索瓦?肖莱+译者: 张亮 )

下载:https://pan.baidu.com/s/1O2aHCeGP8p6FyBkVjFTnTQ 更多资料分享:https://pan.baidu.com/s/1g4hv05UZ_w92uh9NNNkCaA 评分为10分的<Python深度学习>. <Python深度学习>高清中文版pdf+高清英文版pdf+源代码 高清中文版PDF,314页,带目录和书签,彩色配图,文字能够复制粘贴:高清英文版PDF,386页,带目录和书签,彩色配图,文字能够复制粘贴:中英文两版可以对比学习.

《Python深度学习》高清中文版PDF+高清英文版PDF+配套源代码

最新出版的<Python深度学习> <Python深度学习>高清中文版PDF+高清英文版PDF+配套源代码.高清中文版PDF,314页,带目录和书签,彩色配图,能够复制粘贴:高清英文版PDF,386页,带目录和书签,彩色配图,能够复制粘贴:中英文两版可以对比学习.配套源代码:其中高清中文版如图 百度云链接:https://pan.baidu.com/s/1uf9BTXqwKOCLW95HO_vsGA 原文地址:http://blog.51cto.com/11018611/23400

Python深度学习(高清版)PDF

Python深度学习(高清版)PDF百度网盘链接:https://pan.baidu.com/s/1WOAfraS5Y56247A8oDUPgg 提取码:pfo3 复制这段内容后打开百度网盘手机App,操作更方便哦内容简介 · · · · · · 本书由Keras之父.现任Google人工智能研究员的弗朗索瓦?肖莱(Fran?ois Chollet)执笔,详尽介绍了用Python和Keras进行深度学习的探索实践,涉及计算机视觉.自然语言处理.生成式模型等应用.书中包含30多个代码示例,步骤讲解

Python深度学习 PDF下载

网盘下载地址:Python深度学习 PDF下载 – 易分享电子书PDF资源网 作者: [美] 弗朗索瓦•肖莱 出版社: 人民邮电出版社 原作名: Deep Learning with Python 译者: 张亮 出版年: 2018-8 页数: 320 定价: 119.00元 装帧: 平装 内容简介 · · · · · · 软件乃是人类自以为最有把握,实则最难掌控的技术.本书作者罗森伯格对OSAF主持的Chandler项目进行田野调查,跟踪经年,试图借由Chandler的开发过程揭示软件开发中的一

Python深度学习 deep learning with Python 人民邮电出版社

内容简介 本书由Keras之父.现任Google人工智能研究员的弗朗索瓦?肖莱(Fran?ois Chollet)执笔,详尽介绍了用Python和Keras进行深度学习的探索实践,涉及计算机视觉.自然语言处理.生成式模型等应用.书中包含30多个代码示例,步骤讲解详细透彻.由于本书立足于人工智能的可达性和大众化,读者无须具备机器学习相关背景知识即可展开阅读.在学习完本书后,读者将具备搭建自己的深度学习环境.建立图像识别模型.生成图像和文字等能力. 作者简介 [作者简介] 弗朗索瓦?肖莱(Fran?