循环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 from 0 to T,然后向后层迭代地应用 applies G using xi from T to 0,如下图所示:

上图中的黑条表示串联。完全隐藏状态 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:
o Z := sigmoid(Wzx + Rzh + Wbz + Rbz)
o M := sigmoid(Wrx + Rrh + Wbr + Rbr)
o G(x, h, c) := tanh(Whx + M(h + Rbh) + Wbh) (c not used)
• LSTM:
o I := sigmoid(WIx + RIh + Wbi + Rbi)
o F := sigmoid(Wfx + Rfh + Wbf + Rbf)
o O := sigmoid(Wox + Roh + Wbo + Rbo)
o C := tanh(WCx + RCh + Wbc + Rbc)
o C’ := F × C
o H := O x tanh(C’)
o 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 is 0-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实现相关推荐

  1. 中兴面试总结,华为。技术,市场

    1,软件测试,如何把这个测试做的更好. 进到一个新项目,作为测试人员应该都是想把测试做好,项目在符合客户质量要求的情况下按时交付的吧.但往往都事与愿违,造成这个结果的原因有很多很多.通过这段时间做自动 ...

  2. Linux shell 学习笔记(9)— 循环语句(for、while)以及更改字段分隔符

    1. for 语句 bash shell 中 for 命令的基本格式如以下,$var 变量包含着这次迭代对应的当前列表项中的值. for var in list docommands done 也可以 ...

  3. 【机器学习】RNN循环神经网络

    循环神经网络归属: 领域:机器学习 方向:自然语言处理 贡献:自动文本生成 循环神经网络实际应用: 生活中因为原始数据都是序列化的,比如自然语言,语音处理,时间序列问题(股票价格)等问题, 这个时候需 ...

  4. MindSpore循环神经网络

    MindSpore循环神经网络 一. 神经网络的组成 神经元模型:首先简单的了解以下构成神经网络的最基础单元:神经元.每个神经元与其它神经元相连,处于激活状态时,就会向相连的神经元发送相应信号.从而改 ...

  5. CodeGen按钮循环

    CodeGen按钮循环 按钮循环是一个模板文件构造,它允许您迭代CodeGen拥有的按钮信息集合. 在按钮循环中处理的按钮的定义可以来自两个位置之一. 如果基于UI工具箱输入窗口定义进行处理,则默认情 ...

  6. CodeGen标记循环

    CodeGen标记循环 标记循环是一个模板文件构造,它允许您迭代CodeGen拥有的标记信息的集合.为了使用标记循环,必须基于至少定义了一个字段标记的存储库结构生成代码. 标记循环由一对匹配的< ...

  7. CodeGen结构循环回路

    CodeGen结构循环回路 structure循环是一个模板文件构造,它允许您迭代CodeGen拥有的有关结构的集合.为了使用结构循环,必须同时基于多个存储库结构生成代码. CodeGen可以通过以下 ...

  8. CodeGen融合核心关系循环扩展

    CodeGen融合核心关系循环扩展 Expansion Tokens <HARMONYCORE_RELATION_NAME> 插入当前关系的名称.关系名称将自动生成,但可以由Harmony ...

  9. CodeGen字段循环Field Loop

    CodeGen字段循环Field Loop 字段循环是一个模板文件构造,它允许迭代CodeGen拥有的有关字段的集合.这些字段定义可以来自以下两个位置之一: •如果基于从存储库结构中获取的信息生成代码 ...

最新文章

  1. 五、唱歌不如跳舞(下)
  2. 再谈多态——向上映射及VMT/DMT(转)
  3. SpringBoot整合MyBatis-Plus分页查询
  4. android网络通信之HTTP协议教程实例汇总
  5. VREP中的力触觉设备接口(CHAI3D)
  6. asp.net core WebAPI实现CRUD
  7. MYSQL进程权限过大_mysql查询较长的执行进程及创建权限账号
  8. php 窗体移动,窗体处理 - My Labs! PHP - PHP博客
  9. 201521123061 《Java程序设计》第七周学习总结
  10. UVA280 LA5588 Vertex【DFS】
  11. item2vec详解
  12. 中间件(一):订单系统整体架构
  13. 征途私服门:一个程序员和一个黑客群的故事
  14. 序列号生成-模拟windows office序列号
  15. “数据结构”课程的内容
  16. 【项目一】:易班晚点名(以合职业晚点名为平台做的)
  17. 可可网络验证9.3、9.5版本
  18. 【FTP】——文件传输协议
  19. linux系统时间显示错误的是,教你解决linux操作系统时间错误
  20. 百度与360的搜索战

热门文章

  1. python实现二叉树的重建2 之由中序遍历和后序遍历重建
  2. NNVM Compiler,AI框架的开放式编译器
  3. Auto ML自动调参
  4. DeepLabV3+语义分割实战
  5. 如何使用TensorCores优化卷积
  6. 怎样训练YOLOv3
  7. 人脸真伪验证与识别:ICCV2019论文解析
  8. [JAVA EE] 拦截器
  9. Python ModuleNotFoundError: No module named ‘xlrd‘
  10. android 调用百度sdk点位当前城市