zoukankan      html  css  js  c++  java
  • 循环IRNNv2Layer实现

    循环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(隐藏状态大小),并由单元格算子公式定义。后续层使用单元Gx, hc),其中 X, H和 C 都是大小的向量 h, 并且还由单元格算子公式定义。

    可选地,可以将RNN配置为以“跳越模式”运行,这意味着第一层的输入权重矩阵是隐式的单元矩阵,并且 X 预期是大小 H

    条件与限制

    数据 (X)输入和初始隐藏/单元格状态(0 和 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 ++类 IRNNv2LayerPython类 IRNNv2Layer 有关更多详细信息。

    人工智能芯片与自动驾驶
  • 相关阅读:
    PowerDesigner应用02 逆向工程之导出PDM文件前过滤元数据(表、视图、存储过程等)
    PowerDesigner应用01 逆向工程之配置数据源并导出PDM文件
    CLR查找和加载程序集的方式(二) 流程图
    CLR查找和加载程序集的方式(一)
    C#控制台程序入口函数 Main(string[] args) 参数详解
    INotifyPropertyChanged 接口 CallerMemberName属性
    INotifyPropertyChanged 接口
    SQL Server 中执行Shell脚本计算本地文件的内容大小
    统计一个数据库中,无记录的表的sql语句
    SQL 性能优化 总结
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/14154830.html
Copyright © 2011-2022 走看看