一、目的

会用神经网络解决基本的分类问题。

二、内容

1、准备数据

2、构建网络解决分类问题

3、验证网络,生成预测结果

三、方法与步骤

1、查看keras库的版本

python lstm二分类 lstm处理二分类问题_深度学习

2、IMDB数据集

2.1、加载IMDB数据集

参数num_words=10000的意思是仅保留训练数据中常见的前10000个单词,低频单词被舍去,可以让向量数据不会太大,便于处理。

train_data和test_data是由评论组成的列表。

python lstm二分类 lstm处理二分类问题_深度学习_02

2.2、限定为前10000个单词,索引最大不会超过10000

python lstm二分类 lstm处理二分类问题_数据_03

2.3将评论迅速解码为英文单词

python lstm二分类 lstm处理二分类问题_标量_04

3、准备数据

·填充列表,使其具有相同的长度,再将列表转换为整数张量,然后网络第一层使用能处理这种整数张量的层。

·对列表进行one-hot编码,将其转换为0和1组成的向量。

3.1、将整数序列编码为二进制矩阵

python lstm二分类 lstm处理二分类问题_标量_05

3.2、标签向量化

python lstm二分类 lstm处理二分类问题_数据_06

4、构建网络

对于Dense层堆叠,确定两个关键架构

·网络有多少层。

·每层有多少个隐藏单元。

选择架构为:

·两个中间层,每层都有16个隐藏单元、

·第三层输出一个标量,预测当前评论的情感。

4.1、模型定义

使用激活函数(relu):为了得到更丰富的假设空间,从而充分利用多层表示的优势。

python lstm二分类 lstm处理二分类问题_深度学习_07

4.2、编译模型

用rmsprop优化器和binary_crossentropy损失函数来配置模型

python lstm二分类 lstm处理二分类问题_数据_08

上述代码将优化器、损失函数、指标作为字符串传入

4.3、配置优化器

python lstm二分类 lstm处理二分类问题_标量_09

4.4、使用自定义的损失和指标

python lstm二分类 lstm处理二分类问题_标量_10

5、验证方法

5.1、留出验证集

python lstm二分类 lstm处理二分类问题_标量_11

5.2、训练模型

使用512个样本组成的小批量,将模型训练20个轮次(即对x_train和y_train两个张量中所有样本进行20次迭代),同时监控在留出的10000个样本上的损失和精度。

python lstm二分类 lstm处理二分类问题_python lstm二分类_12

5.3、查看history字典

python lstm二分类 lstm处理二分类问题_深度学习_13

字典中包含4个条目,对应训练过程和验证过程中的监控的指标。

5.4、绘制训练损失和验证损失

python lstm二分类 lstm处理二分类问题_数据_14

python lstm二分类 lstm处理二分类问题_python lstm二分类_15

5.5、绘制训练精度和验证精度

python lstm二分类 lstm处理二分类问题_python lstm二分类_16

python lstm二分类 lstm处理二分类问题_机器学习_17

5.6、重新训练一个模型

python lstm二分类 lstm处理二分类问题_机器学习_18

查看结果

python lstm二分类 lstm处理二分类问题_机器学习_19

5.7在新数据上生成预测结果

python lstm二分类 lstm处理二分类问题_python lstm二分类_20

四、思考与总结

·二分类问题通常需要对原始数据进行大量预处理,以便将其转换为张量输入到神经网络中。单词序列可以编码为二进制向量,但也有其他编码方式。

·带有relu激活的Dense层堆叠,可以解决很多种问题。

·对于二分类问题(两个输出类别),网络的最后一层应该只有一个单元并使用sigmoid激活的Dense层,网络输出应该0~1范围内的标量,表示概率。

·对于二分类问题的sigmoid标量输出,应该使用binary_crossentropy损失函数。

·无论问题是什么,rmsprop优化器通常都是足够好的选择。

·一定要监控模型在训练集之外的数据上的性能。