1.循环神经网络的提出是基于记忆模型的想法,期望网络能够记住前面出现的特征,并依据特征推断后面的结果,而且整体的网络结构不断循环,因而得名循环神经网络。

2.循环神经网络的基本结构特别简单,就是将网络的输出保存在一个记忆单元中,这个记忆单元和下一次的输入一起进入神经网络中。

3.使用双向循环神将网络,网络会先从序列的正方向读取数据,再从反方向读取数据,最后将网络输出的两种结果合在一起形成网络的最终输出结果。

4.解决长时依赖的问题:LSTM,GRU

LSTM(1997):长的短时记忆网络

LSTM由三个门来控制,这三个门分别是输入门,遗忘门和输出门。输入门控制者网络的输入,遗忘门控制者记忆单元,输出门控制者网络的输出。其中最重要的是遗忘门,遗忘门的作用是决定之前的哪些记忆被保留,哪些记忆将被去掉,正是遗忘门的作用,使得LSTM具有长时记忆的功能,对于给定的任务,遗忘门能够自己学习保留多少以前的记忆,这使得不需人为干扰,网络能够自主学习。

LSTM流程:

Ct-1作为上一步t-1时刻网络中的记忆单元,传入t时刻的网络之后,第一步操作是决定它的遗忘程度,将t时刻前面的记忆状态乘上一个0-1的系数进行衰减,接着加上t时刻学到的记忆作为更新之后的记忆传出网络,作为t+1时刻的网络的记忆单元。其中t-1时刻网络记忆的衰减系数是通过t时刻网络的输入和t-1网络输出来确定的,t时刻网络学到的记忆也是根据t时刻网络的输入和t-1时刻网络的输出得到的。

遗忘门:

首先将 t-1 时刻的网络输出ht-1和这一步的输入xt结合起来,然后作用线性变换Wf*[ht-1,xt]+bf。再经过sigmoid激活函数,将结果映射到0-1作为记忆的衰减系数,记作ft,可以看到网络具体要保留多少记忆是由前一时刻的输出和这一时刻的输入共同决定的。

衰减系数:

t时刻学到的记忆:    :当前学习到记忆的衰减系数。:当前状态学习到的记忆

最后将t-1时刻的衰减系数乘 t-1时刻的记忆,加上该时刻t下学到的记忆乘它对应的衰减系数,这样便得到了t时刻下的记忆状态

输出门:

当前时刻t的网络输出取决于当前时刻t的记忆状态和t时刻的输入时刻的输出,

GRU:

GRU与LSTM最大的不同在于GRU将遗忘门和输入门合成了一个‘更新门’,同时网络不再额外的记忆状态,而是将输出结果作为记忆状态不断向后循环传递。

5.PyTorch的循环网络模块

标准RNN

在Pytorch的调用:nn.RNN()

input_size:表示输入xt的特征维度

hidden_size:表示输出ht的特征维度,

num_layers:表示网络层数,默认是1层,

nonlinearity:非线性激活函数的选择,默认为Tanh,可以选择relu

bias:是否偏置

batch_first:决定网络输入的维度顺序,默认网络输入是按照(seq,batch,feature)输入的,序列长度在最前面,然后是批量,最后是特征维度,如果这个参数设置为True,那么顺序就变为(batch,seq,feature)

dropout:接受一个0-1的数值,会在网络中除了最后一层之外的其他输出层加上dropout层

bidirectional:默认为False,如果设置为True,就是双向循环神经网络的结构。

网络接收的输入和输出:

pytorch_08_RNN的更多相关文章

随机推荐

  1. SQL语句性能调整原则

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...

  2. windows10 安装win10和ubuntu 16.04双系统

    安装教程如下 亲测可用 https://www.cnblogs.com/masbay/p/10844857.html 镜像路径如下 http://releases.ubuntu.com/16.04/ ...

  3. a minimum of subsistence

    A hundred years ago it was assumed and scientifically "proved" by economists that the laws ...

  4. [考试反思]1114csp-s模拟测试115:零迟

    最后一次了,允许自己混进榜里吧. 没有心态,原题不会做(真的忘了) T2的搜索没有分. 「 零 · 迟 」:酷刑 只有在最后的时刻才开始意识到,一切的一切都已经晚了. 就在眼前了.没有机会了. 退役, ...

  5. YAPI windows 二次开发 树形结构 多层级结构 拖拽 数据导入 接口自动化测试

    什么是YAPI: 高效.易用.功能强大的API管理平台 http://yapi.demo.qunar.com/ github: https://github.com/YMFE/yapi 可以去那里下载 ...

  6. RN调试坑点总结(不定期更新)

    前言 我感觉,如果模拟器是个人的话,我已经想打死他了 大家不要催我学flutter啦,哈哈哈,学了后跟大家分享下 RN报错的终极解决办法 众所周知,RN经常遇到无可奈何的超级Bug, 那么对于这些问题 ...

  7. go语言之数据类型和格式化输出

    1.数据类型 package main import ( "fmt" "reflect" ) func main() { //整形 var v1 int32 v ...

  8. 获取windows操作系统所有用户

    一.知识点简单介绍 1. 利用WindowsApi获取 [DllImport("Netapi32.dll ")] extern static int NetUserEnum([Ma ...

  9. 案例:Oracle 10g RAC 集群无法启动

    环境:RHEL 5.7 + Oracle 10.2.0.5 RAC 很多年前的一套测试环境,今天发现集群无法启动.手工尝试启动crs,集群日志也无任何输出.进一步检查集群配置: [oracle@rac ...

  10. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU特性那些事(2)- RT1052DVL6性能实测(CoreMark)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的性能. 在前面的文章 i.MXRTyyyy微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2 ...