文章目录

  • 电影评论模型的进一步改进
  • 4-3 原始模型
  • 4-4 容量更小的模型
  • 4-5 容量更大的模型
  • 4-6 向模型中添加L2权重正则化
  • 写在最后

电影评论模型的进一步改进


我们将在这一节使用实验的方式探讨电影评论模型的改进方法,在此之前,我们先总结几个知识点

  1. 验证集和测试集的区别
  • 为什么不能把他们放在同一个集合里面?—信息泄露
  • 在调节超参数的时候,我们可能会把验证集中的某些特征泄露到这些超参数里面,从而使得模型的性能看起来是提高了,但是在面对完全陌生的数据集的时候,却不一定能够表现很好的泛化性(存在过拟合的可能)
  • 所以我们在训练模型时候,如果基于测试集来调节模型,那么对泛化能力的衡量是不准确的
  1. 评估模型时候需要注意的事项
  • 数据代表性:有些样本标签可能完全没有出现在训练集里(需要打乱数据)
  • 时间箭头: 有时序性(不能打乱数据)
  • 数据冗余: 在样本中可能出现数据缺失的情况,但是我们却把它考虑为0,导致模型不准确

# 加载数据集
import os
os.environ['KERAS_BACKEND']='tensorflow'
from keras.datasets import imdb# 仅保留训练集数据中前10k个最常出现的单词
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words = 10000)
# 将整数序列编码为二进制矩阵
import numpy as npdef vectorize_sequence(sequences, dimension = 10000):# 创建一个形状为(len(sequences), dimension)的零矩阵results = np.zeros((len(sequences), dimension)) # 创建矩阵for i , sequences in enumerate(sequences):results[i, sequences] = 1. # 将results[i]的指定索引设置为1return resultsx_train = vectorize_sequence(train_data) # 将训练数据向量化
x_test = vectorize_sequence(test_data)   # 将测试数据向量化print(x_train[0])# 标签向量化
y_train = np.asarray(train_labels).astype('float32')
y_test = np.asarray(test_labels).astype('float32')
[0. 1. 1. ... 0. 0. 0.]

4-3 原始模型


# 原始模型
from keras import models
from keras import layersmodel = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(16, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

4-4 容量更小的模型


from keras import models
from keras import layersmodel = models.Sequential()
model.add(layers.Dense(4, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(4, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

4-5 容量更大的模型


from keras import models
from keras import layersmodel = models.Sequential()
model.add(layers.Dense(512, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

4-6 向模型中添加L2权重正则化


from keras import regularizers# l2(0.001)的意思是权重矩阵的每个系数都会使得网络的总损失增加0.001 * weight_coefficient_value
# 注意这里是 L2, 不是十二
# 注意这个惩罚一般只在训练的时候加
l2_model = models.Sequential()
l2_model.add(layers.Dense(16, kernel_regularizer = regularizers.l2(0.001),activation = 'relu', input_shape = (10000,)))l2_model.add(layers.Dense(16, kernel_regularizer = regularizers.l2(0.001),activation = 'relu'))l2_model.add(layers.Dense(1, activation = 'sigmoid'))# 编译器
l2_model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['acc'])# 训练
l2_model_hist = l2_model.fit(x_train, y_train,epochs=20,batch_size=512,validation_data=(x_test, y_test))
Train on 25000 samples, validate on 25000 samples
Epoch 1/20
25000/25000 [==============================] - 4s 151us/step - loss: 0.5189 - acc: 0.7970 - val_loss: 0.3919 - val_acc: 0.8752
Epoch 2/20
25000/25000 [==============================] - 3s 123us/step - loss: 0.3237 - acc: 0.9018 - val_loss: 0.3371 - val_acc: 0.8889
Epoch 3/20
25000/25000 [==============================] - 3s 124us/step - loss: 0.2725 - acc: 0.9209 - val_loss: 0.3340 - val_acc: 0.8869
Epoch 4/20
25000/25000 [==============================] - 3s 136us/step - loss: 0.2511 - acc: 0.9289 - val_loss: 0.3444 - val_acc: 0.8824
Epoch 5/20
25000/25000 [==============================] - 3s 126us/step - loss: 0.2372 - acc: 0.9320 - val_loss: 0.3748 - val_acc: 0.8729
Epoch 6/20
25000/25000 [==============================] - 3s 128us/step - loss: 0.2288 - acc: 0.9369 - val_loss: 0.4030 - val_acc: 0.8648
Epoch 7/20
25000/25000 [==============================] - 3s 129us/step - loss: 0.2244 - acc: 0.9386 - val_loss: 0.3587 - val_acc: 0.8810
Epoch 8/20
25000/25000 [==============================] - 3s 130us/step - loss: 0.2187 - acc: 0.9414 - val_loss: 0.3753 - val_acc: 0.8764
Epoch 9/20
25000/25000 [==============================] - 3s 127us/step - loss: 0.2099 - acc: 0.9459 - val_loss: 0.4297 - val_acc: 0.8572
Epoch 10/20
25000/25000 [==============================] - 3s 123us/step - loss: 0.2116 - acc: 0.9431 - val_loss: 0.3970 - val_acc: 0.8706
Epoch 11/20
25000/25000 [==============================] - 3s 121us/step - loss: 0.2068 - acc: 0.9465 - val_loss: 0.3857 - val_acc: 0.8754
Epoch 12/20
25000/25000 [==============================] - 3s 123us/step - loss: 0.2029 - acc: 0.9465 - val_loss: 0.3937 - val_acc: 0.8735
Epoch 13/20
25000/25000 [==============================] - 3s 123us/step - loss: 0.1981 - acc: 0.9495 - val_loss: 0.4351 - val_acc: 0.8633
Epoch 14/20
25000/25000 [==============================] - 3s 122us/step - loss: 0.1976 - acc: 0.9471 - val_loss: 0.4027 - val_acc: 0.8700
Epoch 15/20
25000/25000 [==============================] - 3s 124us/step - loss: 0.1883 - acc: 0.9533 - val_loss: 0.4374 - val_acc: 0.8616
Epoch 16/20
25000/25000 [==============================] - 3s 121us/step - loss: 0.1909 - acc: 0.9504 - val_loss: 0.4139 - val_acc: 0.8706
Epoch 17/20
25000/25000 [==============================] - 3s 122us/step - loss: 0.1863 - acc: 0.9524 - val_loss: 0.4338 - val_acc: 0.8640
Epoch 18/20
25000/25000 [==============================] - 3s 121us/step - loss: 0.1861 - acc: 0.9525 - val_loss: 0.4250 - val_acc: 0.8674
Epoch 19/20
25000/25000 [==============================] - 3s 125us/step - loss: 0.1884 - acc: 0.9518 - val_loss: 0.4287 - val_acc: 0.8690
Epoch 20/20
25000/25000 [==============================] - 3s 122us/step - loss: 0.1793 - acc: 0.9550 - val_loss: 0.4548 - val_acc: 0.8645

# 传入定义好的交叉熵函数
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])from keras import optimizersmodel.compile(optimizer=optimizers.RMSprop(lr=0.001),loss='binary_crossentropy',metrics=['accuracy'])# 优化配置器
from keras import optimizersmodel.compile(optimizer=optimizers.RMSprop(lr=0.001),loss='binary_crossentropy',metrics=['accuracy'])# 留出验证集
x_val = x_train[:10000]
partial_x_train = x_train[10000:]y_val = y_train[:10000]
partial_y_train = y_train[10000:]
# 训练模型
model.compile(optimizer = 'rmsprop',loss = 'binary_crossentropy', metrics = ['acc'])history = model.fit(partial_x_train, partial_y_train, epochs = 20, batch_size = 512, validation_data = (x_val, y_val))
Train on 15000 samples, validate on 10000 samples
Epoch 1/20
15000/15000 [==============================] - 2s 118us/step - loss: 0.5012 - acc: 0.7831 - val_loss: 0.3668 - val_acc: 0.8692
Epoch 2/20
15000/15000 [==============================] - 1s 98us/step - loss: 0.2911 - acc: 0.9023 - val_loss: 0.3168 - val_acc: 0.8738
Epoch 3/20
15000/15000 [==============================] - 1s 95us/step - loss: 0.2132 - acc: 0.9294 - val_loss: 0.2865 - val_acc: 0.8841
Epoch 4/20
15000/15000 [==============================] - 1s 96us/step - loss: 0.1663 - acc: 0.9468 - val_loss: 0.2770 - val_acc: 0.8894
Epoch 5/20
15000/15000 [==============================] - 2s 105us/step - loss: 0.1330 - acc: 0.9581 - val_loss: 0.3133 - val_acc: 0.8802
Epoch 6/20
15000/15000 [==============================] - 1s 99us/step - loss: 0.1107 - acc: 0.9646 - val_loss: 0.3048 - val_acc: 0.8808
Epoch 7/20
15000/15000 [==============================] - 1s 96us/step - loss: 0.0894 - acc: 0.9723 - val_loss: 0.3368 - val_acc: 0.8804
Epoch 8/20
15000/15000 [==============================] - 1s 98us/step - loss: 0.0745 - acc: 0.9787 - val_loss: 0.3552 - val_acc: 0.8728
Epoch 9/20
15000/15000 [==============================] - 2s 101us/step - loss: 0.0609 - acc: 0.9841 - val_loss: 0.3750 - val_acc: 0.8746
Epoch 10/20
15000/15000 [==============================] - 1s 95us/step - loss: 0.0479 - acc: 0.9877 - val_loss: 0.4036 - val_acc: 0.8724
Epoch 11/20
15000/15000 [==============================] - 1s 95us/step - loss: 0.0382 - acc: 0.9920 - val_loss: 0.5095 - val_acc: 0.8621
Epoch 12/20
15000/15000 [==============================] - 1s 97us/step - loss: 0.0312 - acc: 0.9935 - val_loss: 0.4559 - val_acc: 0.8732
Epoch 13/20
15000/15000 [==============================] - 1s 97us/step - loss: 0.0238 - acc: 0.9955 - val_loss: 0.6070 - val_acc: 0.8572
Epoch 14/20
15000/15000 [==============================] - 1s 96us/step - loss: 0.0164 - acc: 0.9977 - val_loss: 0.5313 - val_acc: 0.8662
Epoch 15/20
15000/15000 [==============================] - 1s 96us/step - loss: 0.0168 - acc: 0.9962 - val_loss: 0.5706 - val_acc: 0.8638
Epoch 16/20
15000/15000 [==============================] - 1s 96us/step - loss: 0.0134 - acc: 0.9973 - val_loss: 0.5975 - val_acc: 0.8682
Epoch 17/20
15000/15000 [==============================] - 1s 100us/step - loss: 0.0063 - acc: 0.9997 - val_loss: 0.6466 - val_acc: 0.8682
Epoch 18/20
15000/15000 [==============================] - 1s 95us/step - loss: 0.0113 - acc: 0.9971 - val_loss: 0.6640 - val_acc: 0.8664
Epoch 19/20
15000/15000 [==============================] - 1s 98us/step - loss: 0.0035 - acc: 0.9999 - val_loss: 0.6934 - val_acc: 0.8655
Epoch 20/20
15000/15000 [==============================] - 1s 97us/step - loss: 0.0095 - acc: 0.9981 - val_loss: 0.7261 - val_acc: 0.8647

写在最后

注:本文代码来自《Python 深度学习》,做成电子笔记的方式上传,仅供学习参考,作者均已运行成功,如有遗漏请练习本文作者

各位看官,都看到这里了,麻烦动动手指头给博主来个点赞8,您的支持作者最大的创作动力哟!
<(^-^)>
才疏学浅,若有纰漏,恳请斧正
本文章仅用于各位同志作为学习交流之用,不作任何商业用途,若涉及版权问题请速与作者联系,望悉知

《Python 深度学习》刷书笔记 Chapter 4 关于电影评论模型的进一步探讨相关推荐

  1. Python深度学习一书中: 8.4代码VAE在tensorflow2.0错误‘lambda_1/random_normal/shape‘的解决方案

    Python深度学习一书中: 8.4代码VAE在tensorflow2.0下会有Duplicate node name in graph: 'lambda_1/random_normal/shape' ...

  2. 《Python 深度学习》刷书笔记 Chapter 3 预测房价:回归问题

    文章目录 波士顿房价数据集 3-24 加载波士顿房价数据 3-25 数据标准化 3-26 模型定义 3-27 K折验证 3-28 训练500轮,保存每折的验证结果 3-29 计算所有轮次茨种的K折验证 ...

  3. 《Python 深度学习》刷书笔记 Chapter 8 Part-1 生成式深度学习

    文章目录 生成式深度学习 8-1 对于不同的softmax温度,对概率进行重新加权 实现字符级的LSTM文本生成 8-2 下载并解析初始文本文件 8-3 将字符序列向量化 8-4 用于预测下一个字符的 ...

  4. 《Python 深度学习》刷书笔记 Chapter 5 Part-4 卷积神经网络的可视化(Fillter)

    文章目录 可视化卷积神经网络 2-25 读入模组 5-26 观察图像 观察卷积层特征提取 5-27 建立多输出模型观察输出 5-28 显示图像 5-29 打印全部的识别图 5-32 为过滤器的可视化定 ...

  5. 《Python深度学习》读书笔记:第1章 什么是深度学习

    目录 第1章 什么是深度学习 1.1 人工智能.机器学习与深度学习 1.1.1 人工智能 1.1.2 机器学习 1.1.3 从数据中学习表示 1.1.4 深度学习之"深度" 1.1 ...

  6. 《Python深度学习》读书笔记

    第一章 1. 人工智能.机器学习.深度学习之间的关系 2. 人工智能:将通常由人类完成的智力任务自动化. 3. 机器学习 第二章 keras实现mnist识别 from keras.datasets ...

  7. Auto MPG 汽车油耗预测(tensorflow深度学习龙书笔记)

    利用全连接网络模型来完成汽车的效能指标 MPG(Mile Per Gallon,每加仑燃油英里数)的预测问题实战 数据集 我们采用 Auto MPG 数据集,它记录了各种汽车效能指标与气缸数.重量.马 ...

  8. MOOC网深度学习应用开发3——Deep Dream、电影评论情感分析

    Deep Dream:随机噪点图向目标图转换的过程 经典卷积神经网络 电影评论情感分析 自然语言处理基础知识1 自然语言处理基础知识2--分词 自然语言处理基础知识3--词的数字化表示方法和词嵌入 电 ...

  9. 《Python深度学习》第五章-5(可视化过滤器)读书笔记

    5.4 卷积神经网络的可视化 卷积神经网络学到的表示非常适合可视化,很大程度上是因为它们是视觉概念的表示\color{red}视觉概念的表示视觉概念的表示.接下来介绍3种可视化方法. 事中\color ...

最新文章

  1. Description Resource Path Location Type Java compiler level does not match the v
  2. 科大星云诗社动态20210318
  3. 今晚直播 | 从编码器与解码器端改进生成式句子摘要
  4. 编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码
  5. electron项目中使用jquery不生效的解决方法
  6. kafka 出现Java heap space的解决方法
  7. 陶哲轩实分析定义8.5.5的一个注记
  8. UVA10803 Thunder Mountain【Floyd算法】
  9. eclipse导入Javaweb文件出错解决
  10. r语言 linux使用教程,R语言初级教程: R编程环境的搭建
  11. 基于二阶锥规划的主动配电网动态最优潮流求解
  12. matlab香农编码
  13. 烟雾检测传感器实验-传感器原理及应用实验
  14. 震惊!PC端QQ也能防撤回?
  15. 不精确微分/不完整微分(Inexact differential/Imperfect differential)
  16. 遥感图像处理之计算植被覆盖度公式
  17. 基于Microhard P900无人机PIX飞控远距离数传解决方案
  18. 请教苹果虚拟机自动配置序列号ID脚本
  19. android provision
  20. 经典SQL学习笔记 (二)-单行函数

热门文章

  1. php调用百度地图定位,php用百度地图API进行IP定位和GPS定位
  2. Java绝对/相对路径获取与getResourceAsStream()方法
  3. 在VirtualBox下安装win7实现aero效果的图文教程
  4. 《从你的全世界路过》观后感
  5. RT3070L_USB_WIFI网卡在GT2440开发板上的移植和使用(一)
  6. 会议室管理系统jsp和mysql_JSP+Servlet+JDBC+Mysql实现的天才会议管理系统
  7. 软件设计师——程序设计语言练习
  8. Vue7 异步加载 懒加载
  9. console.log() 与 console.dir() 的区别:
  10. WIFI 断线原因总结