文章目录

  • 深度学习 实验七 循环神经网络
    • 一、问题描述
    • 二、设计简要描述
    • 三、程序清单

深度学习 实验七 循环神经网络

一、问题描述

之前见过的所以神经网络(比如全连接网络和卷积神经网络)都有一个主要特点,那就是它们都没有记忆。它们单独处理每个输入,在输入和输入之间没有保存任何状态。对于这样的网络,要想处理数据点的序列或者时间序列,你需要向网络同时展示整个序列,即将序列转换成单个数据点。例如,在实验九词嵌入中就是这么做的:将全部电影评论转换为一个大向量,然后一次性处理。

与此相反,当人在阅读这个句子时,是一个词一个词地阅读(或者说,眼睛一次扫视一次扫视地阅读),同时会记住之前的内容,这让你能够动态理解这个句子所传达的含义,以渐进的方式处理信息,同时保存一个关于所处理的内部模型,这就是循环神经网络,它广泛应用于自然语言处理中,本实验会介绍简单的循环神经网络(SimpleRNN)来处理文本数据,然后改进网络使用LSTM神经网络对比效果。

二、设计简要描述

1. 简单循环神经网络

1.1 循环网络简介

了解循环网络的应用基础知识。

1.2 Keras中的循环层

实现一个简单的RNN层

1.3 数据处理

使用IMDB电影评论的数据,引入一个sequence模块把我们的数据格式化输入到神经网络中。

1.4 搭建自己RNN神经网络

按照如下步骤搭建自己的神经网络并应用上面数据拟合模型

1)从kaeras导入全连接层模块

2)定义一个序列模型

3) 添加一个Embedding层,参数是(max_features,32)

4)添加一个SimpleRNN层,输出维度32

5)添加一个全连接层,输出维度1,激活函数‘sigmoid’

6)编译模型,参数分别是‘rmsprop’,’binary_crossentropy’,[‘acc’]

7)拟合模型,epochs=10.batch_size=128,validation_split=0.2,结果返回给history

1.5 绘制结果

绘制训练损失和准确率率结果。

1.6 模型评估

利用测试数据对模型进行评估。

2. LSTM循环神经网络

2.1 SimpleRNN的缺陷

了解SimpleRNN存在梯度消失的情况,可能导致后续模型无法继续训练。

2.2 LSTM分析

2.3 搭建自己的LSTM神经网络

类似1.4节按照以下步骤搭建自己的LSTM神经网络。

1)从kaeras导入LSTM模块

2)定义一个序列模型

3)添加一个Embedding层,参数是(max_features,32)

4)添加一个LSTM层,输出维度32

5)添加一个全连接层,输出维度1,激活函数‘sigmoid’

6) 编译模型,参数分别是‘rmsprop’,’binary_crossentropy’,[‘acc’]

7)拟合模型,epochs=10.batch_size=128,validation_split=0.2,结果返回给history

2.4 绘制结果

参考1.5节绘制损失值和准确率的结果图。

2.5 模型评估

利用测试数据对模型进行评估。

三、程序清单

# test7_循环神经网络
# 1. 简单循环神经网络# 1.1 循环网络简介# 1.2 Keras中的循环层
# 实现一个简单的RNN层
from keras.models import Sequential
from keras.layers import Embedding, SimpleRNNmodel = Sequential()
model.add(Embedding(10000, 32))
model.add(SimpleRNN(32))
model.summary()# 1.3 数据处理
from keras.datasets import imdb
from keras.preprocessing import sequence
max_features = 10000 # 作为特征的单词个数
maxlen = 500
batch_size = 32
# 加载数据
print('Loading data...')
(input_train, y_train), (input_test, y_test) = imdb.load_data(path='F:\Desktop\data\imdb.npz', num_words=max_features)
print(len(input_train), 'train sequences')
print(len(input_test), 'test sequences')print('Pad sequences (samples x time)')
input_train = sequence.pad_sequences(input_train, maxlen=maxlen)
input_test = sequence.pad_sequences(input_test, maxlen=maxlen)
print('input_train shape:', input_train.shape)
print('input_test shape:', input_test.shape)# 1.4 搭建自己RNN神经网络
# 按照如下步骤搭建自己的神经网络并应用上面数据拟合模型
# 1)从kaeras导入全连接层模块
# 2)定义一个序列模型
# 3) 添加一个Embedding层,参数是(max_features,32)
# 4)添加一个SimpleRNN层,输出维度32
# 5)添加一个全连接层,输出维度1,激活函数‘sigmoid’
# 6)编译模型,参数分别是‘rmsprop’,’binary_crossentropy’,[‘acc’]
# 7)拟合模型,epochs=10.batch_size=128,validation_split=0.2,结果返回给history
from keras.layers import Dense, Activationmodel = Sequential()
model.add(Embedding(max_features, 32))
model.add(SimpleRNN(32))
model.add(Dense(1, activation='sigmoid'))model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
history = model.fit(input_train, y_train, epochs=10, batch_size=128, validation_split=0.2)# 1.5 绘制结果
# 能够通过以下代码绘制训练损失和准确率率结果
import matplotlib.pyplot as pltacc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']epochs = range(len(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.legend()plt.figure()plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()plt.show()# 1.6 RNN 模型评估
result = model.evaluate(input_test, y_test, verbose = 1)
print('Test loss:', result[0])
print('Test accuracy:', result[1])# 2 LSTM循环神经网络# 2.1 SimpleRNN的缺陷
# 2.2 LSTM分析# 2.3 搭建自己的LSTM神经网络
# 类似1.4节完成以下步骤
# 1)从kaeras导入LSTM模块
# 2)定义一个序列模型
# 3)添加一个Embedding层,参数是(max_features,32)
# 4)添加一个LSTM层,输出维度32
# 5)添加一个全连接层,输出维度1,激活函数‘sigmoid’
# 6) 编译模型,参数分别是‘rmsprop’,’binary_crossentropy’,[‘acc’]
# 7)拟合模型,epochs=10.batch_size=128,validation_split=0.2,结果返回给history
from keras.layers import LSTMmodel2 = Sequential()
model2.add(Embedding(max_features, 32))
model2.add(LSTM(32))
model2.add(Dense(1, activation='sigmoid'))model2.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
history2 = model2.fit(input_train, y_train, epochs=10, batch_size=128, validation_split=0.2)# 2.4 绘制结果
# 参考1.5节绘制损失值和准确率的结果图
import matplotlib.pyplot as pltacc2 = history2.history['acc']
val_acc2 = history2.history['val_acc']
loss2 = history2.history['loss']
val_loss2 = history2.history['val_loss']epochs2 = range(len(acc2))plt.plot(epochs2, acc2, 'bo', label='Training acc')
plt.plot(epochs2, val_acc2, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()plt.figure()plt.plot(epochs2, loss2, 'bo', label='Training loss')
plt.plot(epochs2, val_loss2, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()plt.show(# 2.5 LSTM 模型评估
result2 = model2.evaluate(input_test, y_test, verbose = 1)
print('Test loss:', result2[0])
print('Test accuracy:', result2[1])
)
plt.title('Training and validation loss')
plt.legend()plt.show(# 2.5 LSTM 模型评估
result2 = model2.evaluate(input_test, y_test, verbose = 1)
print('Test loss:', result2[0])
print('Test accuracy:', result2[1])

深度学习 实验七 循环神经网络相关推荐

  1. NNDL 实验七 循环神经网络(1)RNN记忆能力实验

    NNDL 实验七 循环神经网络(1)RNN记忆能力实验 第6章 循环神经网络 6.1 循环神经网络的记忆能力实验 6.1.1 数据集构建 6.1.1.1 数据集的构建函数 6.1.1.2 加载数据并进 ...

  2. NNDL 实验七 循环神经网络(2)梯度爆炸实验

    6.2 梯度爆炸实验 造成简单循环网络较难建模长程依赖问题的原因有两个:梯度爆炸和梯度消失.一般来讲,循环网络的梯度爆炸问题比较容易解决,一般通过权重衰减或梯度截断可以较好地来避免:对于梯度消失问题, ...

  3. 《深度学习》之 循环神经网络 原理 超详解

    循环神经网络 一.研究背景 1933年,西班牙神经生物学家Rafael Lorente de Nó发现大脑皮层(cerebral cortex)的解剖结构允许刺激在神经回路中循环传递,并由此提出反响回 ...

  4. NNDL 实验七 循环神经网络(4)基于双向LSTM的文本分类

    6.4 实践:基于双向LSTM模型完成文本分类任务 电影评论可以蕴含丰富的情感:比如喜欢.讨厌.等等. 情感分析(Sentiment Analysis)是为一个文本分类问题,即使用判定给定的一段文本信 ...

  5. 「NLP」 深度学习NLP开篇-循环神经网络(RNN)

    https://www.toutiao.com/a6714260714988503564/ 从这篇文章开始,有三AI-NLP专栏就要进入深度学习了.本文会介绍自然语言处理早期标志性的特征提取工具-循环 ...

  6. 【NLP】 深度学习NLP开篇-循环神经网络(RNN)

    从这篇文章开始,有三AI-NLP专栏就要进入深度学习了.本文会介绍自然语言处理早期标志性的特征提取工具-循环神经网络(RNN).首先,会介绍RNN提出的由来:然后,详细介绍RNN的模型结构,前向传播和 ...

  7. 《动手学深度学习》task3_3 循环神经网络进阶

    目录 GRU GRU 重置门和更新门 候选隐藏状态 隐藏状态 GRU的实现 载入数据集 初始化参数 GRU模型 训练模型 简洁实现 LSTM 长短期记忆 输入门.遗忘门和输出门 候选记忆细胞 记忆细胞 ...

  8. 深度学习中的循环神经网络LSTM详解

    (一).什么是循环神经网络LSTM? LSTM指的是长短期记忆网络(Long Short Term Memory),它是循环神经网络中最知名和成功的扩展.由于循环神经网络有梯度消失和梯度爆炸的问题,学 ...

  9. [人工智能-深度学习-48]:循环神经网络 - RNN是循环神经网络还是递归神经网络?

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

最新文章

  1. 日期函数:取过去或者将来多少天的日期
  2. 刚毕业的参加工作的黄金时期的核心策略:打好基础
  3. Apollo配置灰度发布
  4. 一张表看尽CV和NLP的经典+前沿论文,还教你阅读顶会论文,构建深度学习知识框架...
  5. 蚂蚁海图切片工具linux版本,Web海图服务软件 - 海图在线
  6. 在Linux下开发多语言软件: Hello GetText!
  7. linux 查看cuda版本_Ubuntu18.04+Tensorflow GPU版本环境搭建
  8. mysql 遍历二叉树_数据结构-二叉树遍历
  9. 在Angularjs中使用directive自定义指令实现attribute的继承
  10. html学习——按钮与多选框
  11. 兴达易控Profinet转TCP以太网模块
  12. TEXT到EPUB格式转换
  13. EXCEL与数据分析
  14. rockchip的调试手段
  15. 微信小程序傻瓜制作_怎么能免费制作自己的微信小程序?
  16. 线上发版如何做到分批发的?详解蓝绿部署,滚动升级,A/B 测试,灰度发布/金丝雀发布
  17. LAMP服务器环境搭建及工程部署
  18. STM32单片机开发应用教程 (HAL库版) ---基于国信长天嵌入式竞赛实训平台(CT117E-M4)教程汇总 与第一章 硬件平台简介
  19. 你不知道的 async、await 魔鬼细节
  20. Sublime Text 2搭建Go开发环境(Windows)

热门文章

  1. 轻松帮你做到无损放大图片的软件推荐:Topaz Gigapixel AI for mac
  2. 晶闸管的保护,判断晶闸管引脚及其好坏的方法
  3. linux wc -l命令
  4. 线束测试仪工作原理是什么,使用方法介绍
  5. 论文写作心得与投稿总结
  6. 视频混剪素材哪里找?
  7. 想知道音频剪切软件有哪些吗?
  8. Scrapy框架原理学习
  9. 电脑垃圾清理 -windows电脑裸奔必知技巧
  10. CSS 系列七 高级技巧篇 精灵图 、字体图标 、CSS三角 、 图片和文字对齐以及bug 、溢出文字省略号 、CSS 初始化 、 常见的布局技巧