循环IRNNv2Layer实现
IRNNv2Layer实现循环层,例如循环神经网络(RNN),门控循环单元(GRU)和长期短期记忆(LSTM)。支持的类型为RNN,GRU和LSTM。它执行循环操作,该操作由几个众所周知的循环神经网络(RNN)“单元”之一定义。
层描述
该层接受输入序列 X,初始隐藏状态 H0, 如果该单元格是长短期记忆(LSTM)单元格,则初始单元格状态 C0, 并产生输出 y 代表通过计算得出的最终RNN“子层”的输出 t时间步长(请参见下文)。可选地,该层还可以产生输出 hT 代表最终的隐藏状态,如果该单元格是LSTM单元格,则输出 cT代表最终的细胞状态。
单元的操作定义为函数 G(x, h, c)。此功能需要向量输入x,h,and c, 并产生最多两个向量输出 ^ h “ 和 ç “,表示执行单元操作后的隐藏状态和单元状态。
在默认(单向)配置中,RNNv2层适用 G如下图所示:

G' 是G的变体。
进入方框的箭头是功能输入,而远离方框的箭头是功能输出。X = [x0, x1, …, xT], Y = [y0, y1, …, yT], Hi= [hi,0, hi,1, …, hi,L], and Ci= [ci,0, ci,1, …, ci,L]。
灰色 C 仅当RNN将LSTM单元用于 G 和 G'。
注意:以上结构有L "sub-layers" (horizontal rows of G),以及矩阵matrices Hi and Ci have dimensionality L。
可选地,序列长度 t可以被指定为RNNv2层的输入,从而允许客户端指定一批具有不同长度的输入序列。
双向RNN (BiRNN):可以将RNN配置为双向。在这种情况下,每个子层都由一个“前向”层和“向后”层组成。前向层迭代地适用G 使用 The forward layer iteratively applies G using xi from0to T,然后向后层迭代地应用 applies G using xi from T to0,如下图所示:

上图中的黑条表示串联。完全隐藏状态 ht 由前向隐藏状态的串联定义 htf 和向后隐藏状态 htb:
- ht,i = [ htf,i ,htb,i]
- ht= [ ht,0,, ht,1, …,ht,L]。
类似地,对于单元状态(未示出)。每ht,i,用作下一个子层的输入,如上所示。
RNN算子: RNNv2层支持以下单元操作:
- ReLU: G(x, h, c) := max(Wix + Rih + Wb + Rb, 0) (c not used)
- tanh: G(x, h, c) := tanh(Wix + Rih + Wb + Rb) (c not used)
- GRU:
- Z := sigmoid(Wzx + Rzh + Wbz + Rbz)
- M := sigmoid(Wrx + Rrh + Wbr + Rbr)
- G(x, h, c) := tanh(Whx + M(h + Rbh) + Wbh) (c not used)
- LSTM:
- I := sigmoid(WIx + RIh + Wbi + Rbi)
- F := sigmoid(Wfx + Rfh + Wbf + Rbf)
- O := sigmoid(Wox + Roh + Wbo + Rbo)
- C := tanh(WCx + RCh + Wbc + Rbc)
- C’ := F × C
- H := O x tanh(C’)
- G(x, h, c) := { H, C’ }
对于GRU和LSTM,我们指的是Z, M, I, F, etc. as "gates"等称为“门”。
在单向情况下, the W matrices is HxE for the first layer and HxH,对于后续图层(除非设置了跳越模式,请参见下文)。在双向情况下,the dimensionality of the W matrices is HxE for the first forward/backward layer, and Hx2H for subsequent layers用于后续图层。
维度the R matrices is always HxH. The biases Wbx and Rbx have dimensionality H。
跳越模式: RNNv2使用的默认模式是“线性模式”。在此模式下,RNNv2层的第一子层使用该单元G’(x, h, c),它接受一个大小 e的向量 X (嵌入尺寸)和向量 H 和 C 大小 H(隐藏状态大小),并由单元格算子公式定义。后续层使用单元G(x, h,c),其中 X, H和 C 都是大小的向量 h, 并且还由单元格算子公式定义。
可选地,可以将RNN配置为以“跳越模式”运行,这意味着第一层的输入权重矩阵是隐式的单元矩阵,并且 X 预期是大小 H。
条件与限制
数据 (X)输入和初始隐藏/单元格状态(高0 和 C 0张量至少具有2个非批量尺寸。其它尺寸被认为是批次尺寸。
可选的序列长度输入 T is0-dimensional (scalar)尺寸(标量)(不包括批次尺寸)。
数据 (y)输出和最终的隐藏/单元状态(HT and CT张量至少具有2个非批量尺寸。其他尺寸被认为是批次尺寸。如果提供了序列长度输入,则将批次中的每个输出填充到最大序列长度Tmax。
IRNNv2Layer 支持:
- FP32和FP16数据类型用于输入和输出,隐藏和单元张量。
- INT32数据类型仅用于序列长度张量。
定义网络后,可以标记所需的输出。未标记为网络输出或不用作另一层输入的RNNv2输出张量将被丢弃。
network->markOutput(*pred->getOutput(1));
pred->getOutput(1)->setType(DataType::kINT32);
rnn->getOutput(1)->setName(HIDDEN_OUT_BLOB_NAME);
network->markOutput(*rnn->getOutput(1));
if (rnn->getOperation() == RNNOperation::kLSTM)
{
rnn->getOutput(2)->setName(CELL_OUT_BLOB_NAME);
network->markOutput(*rnn->getOutput(2));
};
参阅C ++类 IRNNv2Layer或Python类 IRNNv2Layer 有关更多详细信息。
循环IRNNv2Layer实现的更多相关文章
- 【.net 深呼吸】细说CodeDom(8):分支与循环
有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- 模仿Linux内核kfifo实现的循环缓存
想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...
- 【JS基础】循环
for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被 ...
- 【python之路4】循环语句之while
1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...
- To Java程序员:切勿用普通for循环遍历LinkedList
ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...
- JavaScript单线程和浏览器事件循环简述
JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...
- .NET基础 一步步 一幕幕[循环、逻辑语句块]
循环.逻辑语句块 好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...
随机推荐
- phpstorm 方法名类名 作者日期 注释
phpstorm 设置方法名 函数名注释 新建页面作者日期信息注释 官方提供的文档地址: http://www.jetbrains.com/phpstorm/help/creating-php-do ...
- 【vim】复制粘贴相关操作
复制: 首先,可以在命令模式下输入v进入自由选取模式,选择需要剪切的文字后,按下d就可以进行剪切了. 其他命令模式下剪切命令: yy:复制当前行 nyy:n表示大于1的数字,复制n行 yw:从光标处复 ...
- 路由器逆向分析------Running Debian MIPS Linux in QEMU
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/70176583 下面的文章内容主要参考英文博客<Running Debian ...
- POJ2135 来回最短路(简单费用流)
题意: 就是从1走到n然后再走回来,一条边只能走一次,要求路径最短. 思路: 比较水,可以直接一遍费用流,不解释了,具体的看看代码,敲这个题就是为了练 练手,好久不敲了,怕比赛 ...
- 基于三层交换机的VRRP技术--MSTP、VRRP的综合运用
MSTP (多生成树) 每个VLAN或者几个VLAN拥有一颗生成树,基于实例的生成树.instance 1.instance 2 每个实例拥有一颗生成树.MSTP可以实现多VLAN 的负载分担,可以实 ...
- node-OS&Domain&Net&Path
OS--------------------------------------------- Node.js os 模块提供了一些基本的系统操作函数. var os = require(" ...
- Docker为PHP安装gd扩展
安装扩展库的通常命令 docker-php-ext-install 扩展库名 安装gd库需要特殊照顾,步骤如下 //进入PHP容器 //更新软件源 apt update //安装各种库 apt ins ...
- ppt技巧--字体变化
常见字体搭配 Nordri Tools
- Kafka源码分析(二) - 生产者
系列文章目录 https://zhuanlan.zhihu.com/p/367683572 目录 系列文章目录 一. 使用方式 step 1: 设置必要参数 step 2: 创建KafkaProduc ...
- Beta设计和计划 —— NameNotFound
需求再分析 1. 用户群体 经过用户(大多数是同学)的反馈,我们发现大家其实并不是十分明确我们要做的到底是什么.具体要怎么用.而实际上我们的典型用户也并不是学生群体,因此出现这些偏差也是很正常的,毕竟 ...