一、目的
会用神经网络解决基本的分类问题。
二、内容
1、准备数据
2、构建网络解决分类问题
3、验证网络,生成预测结果
三、方法与步骤
1、查看keras库的版本
2、IMDB数据集
2.1、加载IMDB数据集
参数num_words=10000的意思是仅保留训练数据中常见的前10000个单词,低频单词被舍去,可以让向量数据不会太大,便于处理。
train_data和test_data是由评论组成的列表。
2.2、限定为前10000个单词,索引最大不会超过10000
2.3将评论迅速解码为英文单词
3、准备数据
·填充列表,使其具有相同的长度,再将列表转换为整数张量,然后网络第一层使用能处理这种整数张量的层。
·对列表进行one-hot编码,将其转换为0和1组成的向量。
3.1、将整数序列编码为二进制矩阵
3.2、标签向量化
4、构建网络
对于Dense层堆叠,确定两个关键架构
·网络有多少层。
·每层有多少个隐藏单元。
选择架构为:
·两个中间层,每层都有16个隐藏单元、
·第三层输出一个标量,预测当前评论的情感。
4.1、模型定义
使用激活函数(relu):为了得到更丰富的假设空间,从而充分利用多层表示的优势。
4.2、编译模型
用rmsprop优化器和binary_crossentropy损失函数来配置模型
上述代码将优化器、损失函数、指标作为字符串传入
4.3、配置优化器
4.4、使用自定义的损失和指标
5、验证方法
5.1、留出验证集
5.2、训练模型
使用512个样本组成的小批量,将模型训练20个轮次(即对x_train和y_train两个张量中所有样本进行20次迭代),同时监控在留出的10000个样本上的损失和精度。
5.3、查看history字典
字典中包含4个条目,对应训练过程和验证过程中的监控的指标。
5.4、绘制训练损失和验证损失
5.5、绘制训练精度和验证精度
5.6、重新训练一个模型
查看结果
5.7、在新数据上生成预测结果
四、思考与总结
·二分类问题通常需要对原始数据进行大量预处理,以便将其转换为张量输入到神经网络中。单词序列可以编码为二进制向量,但也有其他编码方式。
·带有relu激活的Dense层堆叠,可以解决很多种问题。
·对于二分类问题(两个输出类别),网络的最后一层应该只有一个单元并使用sigmoid激活的Dense层,网络输出应该0~1范围内的标量,表示概率。
·对于二分类问题的sigmoid标量输出,应该使用binary_crossentropy损失函数。
·无论问题是什么,rmsprop优化器通常都是足够好的选择。
·一定要监控模型在训练集之外的数据上的性能。