GRUCell

バージョン名: GRUCell-3

カテゴリー: シーケンス処理

簡単な説明: GRUCell は、論文で説明されている式で出力を計算する単一の GRU セルを表します。

詳細な説明: GRUCell は、次の式で現在のタイムステップの出力 Ht を計算します。

Formula:
  *  - matrix multiplication
 (.) - Hadamard product(element-wise)
 [,] - concatenation
  f, g - are activation functions.
   zt = f(Xt*(Wz^T) + Ht-1*(Rz^T) + Wbz + Rbz)
   rt = f(Xt*(Wr^T) + Ht-1*(Rr^T) + Wbr + Rbr)
   ht = g(Xt*(Wh^T) + (rt (.) Ht-1)*(Rh^T) + Rbh + Wbh) # default, when linear_before_reset = 0
   ht = g(Xt*(Wh^T) + (rt (.) (Ht-1*(Rh^T) + Rbh)) + Wbh) # when linear_before_reset != 0
   Ht = (1 - zt) (.) ht + zt (.) Ht-1

属性:

  • hidden_size

    • 説明: hidden_size は隠れ状態のサイズを指定します。

    • 値の範囲: 正の整数

    • タイプ: int

    • 必須: はい

  • activations

    • 説明: ゲートのアクティベーション関数

    • 値の範囲: relusigmoidtanh の任意の組み合わせ

    • タイプ: 文字列のリスト

    • デフォルト値: f は sigmoid、g は tanh

    • 必須: いいえ

  • activations_alpha、activations_beta

    • 説明: activates_alpha、activations_beta 関数の属性

    • 値の範囲: 浮動小数点数のリスト

    • タイプ: float[]

    • デフォルト値: なし

    • 必須: いいえ

  • clip

    • 説明: clip は、アクティベーションの前にテンソル・クリッピングの値を [-C, C] に指定します。

    • 値の範囲: 正の浮動小数点数

    • タイプ: float

    • デフォルト値: infinity はクリッピングが適用されないことを意味します

    • 必須: いいえ

  • linear_before_reset

    • 説明: linear_before_reset フラグは、ONNX ドキュメントの式で説明されている GRUCell の変更に従ってレイヤーが動作するかどうかを示します。

    • 値の範囲: true または false

    • タイプ: boolean

    • デフォルト値 : false

    • 必須: いいえ

入力:

  • 1: X - タイプ T [batch_size, input_size] の 2D テンソル、入力データ。必須。

  • 2: initial_hidden_state - タイプ T [batch_size, hidden_size] の 2D テンソル。必須。

  • 3: W - タイプ T [3 * hidden_size, input_size] の 2D テンソル、行列乗算の重み、ゲートオーダー: zrh。必須。

  • 4: R - タイプ T [3 * hidden_size, hidden_size] の 2D テンソル、行列乗算の再帰重み、ゲートオーダー: zrh。必須。

  • 5: B - T タイプの 1D テンソル。linear_before_reset が 1 に設定されている場合、形状は [4 * hidden_size] - z ゲートと r ゲートのバイアス (重みと再帰重み) の合計であり、h ゲートのバイアスは個別に配置されます。それ以外は、形状は [3 * hidden_size]、つまりバイアス (重みと反復重み) の合計になります。オプション。

出力:

  • 1: Ho - タイプ T [batch_size, hidden_size] の 2D テンソル、隠し状態の最後の出力値。

タイプ:

  • T: サポートされている浮動小数点タイプ。

例:

<layer ... type="GRUCell" ...>
    <data hidden_size="128" linear_before_reset="1"/>
    <input>
        <port id="0">
            <dim>1</dim>
            <dim>16</dim>
        </port>
        <port id="1">
            <dim>1</dim>
            <dim>128</dim>
        </port>
         <port id="2">
            <dim>384</dim>
            <dim>16</dim>
        </port>
         <port id="3">
            <dim>384</dim>
            <dim>128</dim>
        </port>
         <port id="4">
            <dim>768</dim>
        </port>
    </input>
    <output>
        <port id="5">
            <dim>1</dim>
            <dim>128</dim>
        </port>
    </output>
</layer>