文章目录

  • 一、How to model sequential data?(怎样对时序数据建模)
    • 1.1 one to one模型
    • 1.2 many to one模型
  • 二、Simple RNN Model(简单循环神经网络)
    • 2.1 Simple RNN for IMDB Review
    • 2.2 改动
    • 2.3 优缺点
    • 2.4 Summary(总结)
    • 2.5 Number of Parameters

一、How to model sequential data?(怎样对时序数据建模)

1.1 one to one模型

one to one模型:一个输入对应一个输出。包括:全连接神经网络和卷积神经网络。

人脑并不需要one to one模型来处理时序数据,并不会把一整段文字直接输入大脑。

  • 整体处理一个段落。
  • 固定大小的输入(例如图像)。
  • 固定大小的输出(例如,预测概率)。

1.2 many to one模型

RNNs对于输入和输出的长度都不需要固定

RNNs适合文本,语音,时序序列数据

更新状态向量h的时候,需要参数矩阵A。整个RNNs只有一个参数A,A随机初始化,然后利用训练数据来学习A。

二、Simple RNN Model(简单循环神经网络)

矩阵和向量的乘积是一个向量。

问题:Why do we need the tanh function?(为什么需要双曲正切函数作为激活函数)

答:每次让h恢复到(-1,+1)之间。

训练参数:矩阵A

  • A的行:shape(h)
  • A的列:shape(h)+shape(x)
  • 矩阵A的大小=shape(h)× [ shape(h)+shape(x)]

2.1 Simple RNN for IMDB Review

from keras.models import Sequential
from keras.layers import SimpleRNN,Embedding,Dense# 设置超参数
vocabulary = 10000   # 词典里面有10000个词汇
embedding_dim=32     # shape(x)=32,词向量x的维度为32
word_num = 500       # 每个电影评论有500个单词,如果超过500个单词,就会被截掉;如果不到500,就会补够。
state_dim =32        # shape(h) = 32,状态向量h的维度为32# 开始搭建网络
model = Sequential()     # 建立Sequential()模型
# 往model里面加层,Embedding层,把词映射成向量
model.add(Embedding(vocabulary,embedding_dim,input_length=word_num))
# 需要指定状态向量h的维度,设置RNN层的return_sequences=False,表示RNN只输出最后一个状态向量h,把之前的状态向量舍去。
model.add(SimpleRNN(state_dim,return_sequences=False))
# 全连接层,输入RNN的最后一个状态h,输出0-1之间的数
model.add(Dense(1, activation="sigmoid"))model.summary()

from keras import optimizers# 迭代最大次数
epochs = 3    # Early stopping alleviates overfitting# 编译模型
# 指定算法为 RMSprop,loss为损失函数,metrics为评价标准
model.compile(optimizer = optimizers.RMSprop(lr=0.001),loss="binary_crossentropy",metrics=["acc"])
# 用训练数据来拟合模型,
history=model.fit(x_train,y_train,epochs=epochs,batch_size=32,validation_data=(x_valid,y_valid))

# 用测试数据来评价模型的表现
# 把测试数据作为输入,返回loss 和 acc。
loss_and_acc = model.evaluate(x_test,labels_test)
print("loss = " + str(loss_and_acc[0]))
print("acc = " + str(loss_and_acc[1]))

2.2 改动

刚才搭建模型只使用了RNN的最后一个状态ht ,把之前的状态全部舍去了。

如果返回所有状态,RNN的输出为一个矩阵,矩阵的每一行为一个状态向量h。

如果用所有状态,则需要加一个Flatten层,把状态矩阵变成一个向量。然后把这个向量作为分类器的输入,进行判断。

from keras.models import Sequential
from keras.layers import SimpleRNN,Embedding,Dense# 设置超参数
vocabulary = 10000   # 词典里面有10000个词汇
embedding_dim=32     # shape(x)=32,词向量x的维度为32
word_num = 500       # 每个电影评论有500个单词,如果超过500个单词,就会被截掉;如果不到500,就会补够。
state_dim =32        # shape(h) = 32,状态向量h的维度为32# 开始搭建网络
model = Sequential()     # 建立Sequential()模型
# 往model里面加层,Embedding层,把词映射成向量
model.add(Embedding(vocabulary,embedding_dim,input_length=word_num))
# 需要指定状态向量h的维度,设置RNN层的return_sequences=False,表示RNN输出所有状态
model.add(SimpleRNN(state_dim,return_sequences=True))
model.add(Flatten())
# 全连接层,输入RNN的最后一个状态h,输出0-1之间的数
model.add(Dense(1, activation="sigmoid"))model.summary()

2.3 优缺点

good of SimpleRNN(优点):

  • RNN擅长在短期文本依赖(RNN只需看最近的几个词即可)

Shortcomings of SimpleRNN(缺点):

  • RNN的记忆较短,会遗忘很久之前的输入X;
  • 如果时间序列很长,好几十步,最终的ht 忘记之前的输入X0

2.4 Summary(总结)

ht 包含了之前所有的输入信息

2.5 Number of Parameters

  • SimpleRNN has a parameter matrix (and perhaps an intercept vector).
  • Shape of the parameter matrix is

​ shape(h)× [ shape(h)+shape(x)]

  • 参数矩阵一开始随机初始化,然后从训练数据中学习这个参数矩阵A,

训练参数:矩阵A

  • A的行:shape(h)
  • A的列:shape(h)+shape(x)

说明:简单循环神经网络只有一个参数矩阵A,不论这个序列有多长,所有模块里面的参数都是一样的。

2_Recurrent Neural Networks (RNNs)循环神经网络 —Simple RNNs相关推荐

  1. Paper:RNN之《Generating Sequences With Recurrent Neural Networks用循环神经网络生成序列》的翻译和解读

    Paper:<Generating Sequences With Recurrent Neural Networks>的翻译和解读 目录 Generating Sequences With ...

  2. Recurrent Neural Networks(RNN) 循环神经网络初探

    1. 针对机器学习/深度神经网络"记忆能力"的讨论 0x1:数据规律的本质是能代表此类数据的通用模式 - 数据挖掘的本质是在进行模式提取 数据的本质是存储信息的介质,而模式(pat ...

  3. 如何计算给定一个unigram语言模型_CS224n笔记[5]:语言模型(LM)和循环神经网络(RNNs)...

    CS224n笔记[5]:语言模型(LM)和循环神经网络(RNNs) 作者:郭必扬 许久没更新了,十分惭愧,翻了翻之前的笔记,才之前上一期我们讲的是"依存分析".本期,我们介绍一下语 ...

  4. [论文翻译]-A Comprehensive Survey on Graph Neural Networks《图神经网络GNN综述》

    文章目录 摘要 1 简介 1.1 GNN简史 1.2 Related surveys on graph neural networks 1.3 Graph neural networks vs. ne ...

  5. 深度学习-Non-local Neural Networks非局部神经网络

    Non-local Neural Networks非局部神经网络 0.概述 1.相关工作 1.1.Non-local image processing.(非局部影像处理) 1.2.Graphical ...

  6. Bag of Tricks for Image Classification with Convolutional Neural Networks(卷积神经网络在图像分类中的技巧)

    来源:Tong He Zhi Zhang Hang Zhang Zhongyue Zhang Junyuan Xie Mu L Amazon Web Services fhtong,zhiz,hzaw ...

  7. 论文翻译-A Comprehensive Survey on Graph Neural Networks《图神经网络GNN综述》

    文章目录 1 简介 1.1 GNN简史 1.2 GNN的相关研究 1.3 GNN vs 网络嵌入 1.4 文章的创新性 2 基本的图概念的定义 3 GNN分类和框架 3.1 GNNs分类 3.2 框架 ...

  8. Distill文章-A gentle introduction to graph Neural Networks(图神经网络是怎么构造的)

    目录 1 简介 2 图的介绍 3 数据如何表示成图 4  三大类问题 5 将机器学习(神经网络)用在图上,会遇到什么挑战 6 最简单的GNN 7 信息传递(把图结构的信息考虑进去) 8  GNN的pl ...

  9. [EGNN] Exploiting Edge Features for Graph Neural Networks 利用图神经网络的边特征 论文详解 CVPR 2019

    文章目录 1 简介 1.1 GAT和GCN的局限性 1.2 EGNN的创新点 2 相关工作 3 EGNN网络 3.1 符号定义 3.2 EGNN和GNN的对比 3.3 Doubly stochasti ...

最新文章

  1. 腐蚀国内稳定服务器_WOW正式服:热修提升坐骑掉率,下周改动大幻象装备必带腐蚀...
  2. ajax使用异步问题
  3. 设计模式(中介者模式)
  4. 三种常用SoC片上总线的分析与比较 (Z)
  5. 甲骨文严查Java授权,企业连夜删除JDK
  6. android 那几种动画,Android 动画实现几种方案
  7. 运行报错java.lang.Exception: No runnable methods
  8. 《android开发艺术探索》读书笔记(五)--RemoteViews
  9. WSUS补丁更新相关命令及参数
  10. js中substr与substring的区别
  11. linux shell脚本字符串 字段分隔符 存入数组 根据下标取值
  12. Android RadioButton(单选按钮)点击事件的两种方法
  13. 【渝粤教育】国家开放大学2018年春季 0266-21T设计构成 参考试题
  14. python 迭代器 生成器 区别_Python的生成器和迭代器之间的区别
  15. 韩顺平 Java IO流 自学笔记
  16. Resnet残差网络学习
  17. 48脚STM32内部基准电压校准ADC的一些心得记录
  18. 乔布斯其人的演讲技巧
  19. 基因编辑最新研究进展(2021年8月)
  20. 高精度除法(高精度除以高精度)

热门文章

  1. 斐波那契数列大数的压位c语言,HDU 1568 Fibonacci(大数前4位)
  2. 资源放送丨《MySQL的查询与优化》PPT视频
  3. 今晚直播:WLS/WAS故障基本分析介绍
  4. 验证GaussDB T 闪回事务查询功能;闪回表功能强劲闪回TRUNCATE
  5. 带你了解极具弹性的Spark架构的原理
  6. 带你读AI论文:基于Transformer的直线段检测
  7. 一文带你探究Sentinel的独特初始化
  8. 【华为云技术分享】基于Atlas 200 DK的原版YOLOv3(基于Darknet-53)实现(Python版本)
  9. 【华为云技术分享】ARM体系结构基础(1)
  10. 【nodejs原理源码赏析(2)】KOA中间件的基本运作原理