第一次完整的跑了一遍,算是入门深度学习
一、安装anaconda,tensorflow,keras(无数遍后终于全部成功)
二、导入数据
评论以数字的形式呈现,且只保留前10000个最常见的单词。标签分别为0或1,代表正面或者负面新闻。
用这段代码可以将评论解码为英文单词
三、数据处理
将整数序列编码为二进制矩阵,并且将标签向量化
四、搭建网络模型(三层)
隐藏单元越多(即更高维 的表示空间),网络越能够学到更加复杂的表示。
sigmoid函数的输出值可以看成概率值,即为正面标签的概率。
五、编译模型并配置优化器,自定义损失和指标
六、留出验证数据,训练模型并绘制图像
由图像发现训练数据的精度随着训练轮次的增大而增大,损失也越来越小;而验证数据并非如此,在第四轮达到最优值。由此可得训练网络模型过拟合化了。
七、重新训练模型,将轮次设为4
八、用测试数据进行测验
发现损失为30.96%,精确度达到87.58%。如果使用更先进的技术精确度会更高。
再利用predict可以预测测试样本中为正面新闻的概率。
九、总结
通常需要对原始数据进行大量预处理,以便将其转换为张量输入到神经网络中。
单词序列可以编码为二进制向量,但也有其他编码方式。
带有 relu 激活的 Dense 层堆叠,可以解决很多种问题(包括情感分类)。
对于二分类问题(两个输出类别),网络的最后一层应该是只有一个单元并使用 sigmoid 激活的 Dense 层,网络输出应该是 0~1 范围内的标量,表示概率值。对于二分类问题的 sigmoid 标量输出,你应该使用 binary_crossentropy 损失函数。无论你的问题是什么,rmsprop 优化器通常都是足够好的选择。
随着神经网络在训练数据上的表现越来越好,模型最终会过拟合,并在前所未见的数据上得到越来越差的结果,一定要一直监控模型在训练集之外的数据上的性能。