GRU

GRU - 22

版本

  • 名稱GRU (GitHub)

  • 網域main

  • since_version22

  • 函式False

  • 支援等級SupportType.COMMON

  • 形狀推斷True

此運算子版本自版本 22 起可用。

摘要

計算單層 GRU。此運算子通常透過某些自訂實作(例如 CuDNN)來支援。

符號

  • X - 輸入張量

  • z - 更新閘

  • r - 重設閘

  • h - 隱藏閘

  • t - 時間步驟(t-1 表示前一個時間步驟)

  • W[zrh] - 更新、重設和隱藏閘的 W 參數權重矩陣

  • R[zrh] - 更新、重設和隱藏閘的 R 遞迴權重矩陣

  • Wb[zrh] - 更新、重設和隱藏閘的 W 偏權向量

  • Rb[zrh] - 更新、重設和隱藏閘的 R 偏權向量

  • WB[zrh] - 後向更新、重設和隱藏閘的 W 參數權重矩陣

  • RB[zrh] - 後向更新、重設和隱藏閘的 R 遞迴權重矩陣

  • WBb[zrh] - 後向更新、重設和隱藏閘的 W 偏權向量

  • RBb[zrh] - 後向更新、重設和隱藏閘的 R 偏權向量

  • H - 隱藏狀態

  • num_directions - 如果方向 == 雙向,則為 2,否則為 1

激活函式

  • Relu(x) - max(0, x)

  • Tanh(x) - (1 - e^{-2x})/(1 + e^{-2x})

  • Sigmoid(x) - 1/(1 + e^{-x})

注意:以下為選用

  • Affine(x) - alpha * x + beta

  • LeakyRelu(x) - 如果 x >= 0,則為 x,否則為 alpha * x

  • ThresholdedRelu(x) - 如果 x >= alpha,則為 x,否則為 0

  • ScaledTanh(x) - alpha * Tanh(beta * x)

  • HardSigmoid(x) - min(max(alpha * x + beta, 0), 1)

  • Elu(x) - 如果 x >= 0,則為 x,否則為 alpha * (e^x - 1)

  • Softsign(x) - x/(1 + |x|)

  • Softplus(x) - log(1 + e^x)

方程式(預設:f=Sigmoid,g=Tanh)

  • 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) # 預設值,當 linear_before_reset = 0 時

  • ht = g(Xt*(Wh^T) + (rt (.) (Ht-1*(Rh^T) + Rbh)) + Wbh) # 當 linear_before_reset != 0 時

  • Ht = (1 - zt) (.) ht + zt (.) Ht-1 此運算子具有選用輸入/輸出。 有關選用引數表示法的更多詳細資訊,請參閱ONNX IR。 在實際引數名稱的位置可以使用空字串來表示遺失的引數。 尾隨的選用引數(後面沒有接著存在的引數)也可以直接省略。

屬性

  • activation_alpha - FLOATS :

    某些激活函式所使用的選用縮放值。 這些值會依激活函式的順序使用,例如 LSTM 中的 (f, g, h)。 預設值與對應的 ONNX 運算子相同。例如,使用 LeakyRelu 時,預設的 alpha 為 0.01。

  • activation_beta - FLOATS :

    某些激活函式所使用的選用縮放值。 這些值會依激活函式的順序使用,例如 LSTM 中的 (f, g, h)。 預設值與對應的 ONNX 運算子相同。

  • activations - STRINGS :

    更新、重設和隱藏閘的 2 個(如果雙向則為 4 個)激活函式清單。 激活函式必須是上面指定的激活函式之一。 選用:如果未指定,請參閱預設值的方程式。

  • clip - FLOAT :

    單元剪裁閾值。 剪裁會將張量的元素限制在 [-閾值, +閾值] 的範圍內,並套用至激活的輸入。 如果未指定,則不剪裁。

  • direction - STRING(預設值為 'forward'

    指定 RNN 是正向、反向還是雙向。 必須是正向(預設)、反向或雙向之一。

  • hidden_size - INT :

    隱藏層中的神經元數量

  • layout - INT(預設值為 '0'

    輸入 X、initial_h 和輸出 Y、Y_h 的形狀格式。 如果為 0,則預期下列形狀:X.shape = [seq_length, batch_size, input_size],Y.shape = [seq_length, num_directions, batch_size, hidden_size],initial_h.shape = Y_h.shape = [num_directions, batch_size, hidden_size]。 如果為 1,則預期下列形狀:X.shape = [batch_size, seq_length, input_size],Y.shape = [batch_size, seq_length, num_directions, hidden_size],initial_h.shape = Y_h.shape = [batch_size, num_directions, hidden_size]。

  • linear_before_reset - INT(預設值為 '0'

    計算隱藏閘的輸出時,在乘以重設閘的輸出之前套用線性轉換。

輸入

介於 3 到 6 個輸入之間。

  • X (異質) - T

    輸入序列封裝(且可能已填補)為一個 3D 張量,其形狀為 [seq_length, batch_size, input_size]

  • W (異質) - T

    閘的權重張量。 沿著維度 0 串連 W[zrh]WB[zrh](如果是雙向)。 此張量的形狀為 [num_directions, 3*hidden_size, input_size]

  • R (異質) - T

    遞迴權重張量。沿著維度 0 將 R[zrh]RB[zrh] (如果是雙向) 連接起來。此張量的形狀為 [num_directions, 3*hidden_size, hidden_size]

  • B (可選,異質) - T

    閘門的偏置張量。沿著維度 0 將 [Wb[zrh], Rb[zrh]][WBb[zrh], RBb[zrh]] (如果是雙向) 連接起來。此張量的形狀為 [num_directions, 6*hidden_size]。可選:如果未指定,則假設為 0。

  • sequence_lens (可選,異質) - T1

    可選張量,用於指定批次中序列的長度。如果未指定,則假設批次中的所有序列長度都為 seq_length。其形狀為 [batch_size]

  • initial_h (可選,異質) - T

    隱藏層的可選初始值。如果未指定,則假設為 0。其形狀為 [num_directions, batch_size, hidden_size]

輸出

介於 0 和 2 個輸出之間。

  • Y (可選,異質) - T

    一個張量,連接所有隱藏層的中間輸出值。其形狀為 [seq_length, num_directions, batch_size, hidden_size]

  • Y_h (可選,異質) - T

    隱藏層的最後一個輸出值。其形狀為 [num_directions, batch_size, hidden_size]

類型約束

  • T 屬於 ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16) )

    將輸入和輸出類型約束為浮點數張量。

  • T1 屬於 ( tensor(int32) )

    將 seq_lens 約束為整數張量。

GRU - 14

版本

  • 名稱GRU (GitHub)

  • 網域main

  • since_version: 14

  • 函式False

  • 支援等級SupportType.COMMON

  • 形狀推斷True

此版本的運算符自版本 14起可用。

摘要

計算單層 GRU。此運算子通常透過某些自訂實作(例如 CuDNN)來支援。

符號

  • X - 輸入張量

  • z - 更新閘

  • r - 重設閘

  • h - 隱藏閘

  • t - 時間步驟(t-1 表示前一個時間步驟)

  • W[zrh] - 更新、重設和隱藏閘的 W 參數權重矩陣

  • R[zrh] - 更新、重設和隱藏閘的 R 遞迴權重矩陣

  • Wb[zrh] - 更新、重設和隱藏閘的 W 偏權向量

  • Rb[zrh] - 更新、重設和隱藏閘的 R 偏權向量

  • WB[zrh] - 後向更新、重設和隱藏閘的 W 參數權重矩陣

  • RB[zrh] - 後向更新、重設和隱藏閘的 R 遞迴權重矩陣

  • WBb[zrh] - 後向更新、重設和隱藏閘的 W 偏權向量

  • RBb[zrh] - 後向更新、重設和隱藏閘的 R 偏權向量

  • H - 隱藏狀態

  • num_directions - 如果方向 == 雙向,則為 2,否則為 1

激活函式

  • Relu(x) - max(0, x)

  • Tanh(x) - (1 - e^{-2x})/(1 + e^{-2x})

  • Sigmoid(x) - 1/(1 + e^{-x})

注意:以下為選用

  • Affine(x) - alpha * x + beta

  • LeakyRelu(x) - 如果 x >= 0,則為 x,否則為 alpha * x

  • ThresholdedRelu(x) - 如果 x >= alpha,則為 x,否則為 0

  • ScaledTanh(x) - alpha * Tanh(beta * x)

  • HardSigmoid(x) - min(max(alpha * x + beta, 0), 1)

  • Elu(x) - 如果 x >= 0,則為 x,否則為 alpha * (e^x - 1)

  • Softsign(x) - x/(1 + |x|)

  • Softplus(x) - log(1 + e^x)

方程式(預設:f=Sigmoid,g=Tanh)

  • 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) # 預設值,當 linear_before_reset = 0 時

  • ht = g(Xt*(Wh^T) + (rt (.) (Ht-1*(Rh^T) + Rbh)) + Wbh) # 當 linear_before_reset != 0 時

  • Ht = (1 - zt) (.) ht + zt (.) Ht-1 此運算子具有選用輸入/輸出。 有關選用引數表示法的更多詳細資訊,請參閱ONNX IR。 在實際引數名稱的位置可以使用空字串來表示遺失的引數。 尾隨的選用引數(後面沒有接著存在的引數)也可以直接省略。

屬性

  • activation_alpha - FLOATS :

    某些激活函式所使用的選用縮放值。 這些值會依激活函式的順序使用,例如 LSTM 中的 (f, g, h)。 預設值與對應的 ONNX 運算子相同。例如,使用 LeakyRelu 時,預設的 alpha 為 0.01。

  • activation_beta - FLOATS :

    某些激活函式所使用的選用縮放值。 這些值會依激活函式的順序使用,例如 LSTM 中的 (f, g, h)。 預設值與對應的 ONNX 運算子相同。

  • activations - STRINGS :

    更新、重設和隱藏閘的 2 個(如果雙向則為 4 個)激活函式清單。 激活函式必須是上面指定的激活函式之一。 選用:如果未指定,請參閱預設值的方程式。

  • clip - FLOAT :

    單元剪裁閾值。 剪裁會將張量的元素限制在 [-閾值, +閾值] 的範圍內,並套用至激活的輸入。 如果未指定,則不剪裁。

  • direction - STRING(預設值為 'forward'

    指定 RNN 是正向、反向還是雙向。 必須是正向(預設)、反向或雙向之一。

  • hidden_size - INT :

    隱藏層中的神經元數量

  • layout - INT(預設值為 '0'

    輸入 X、initial_h 和輸出 Y、Y_h 的形狀格式。 如果為 0,則預期下列形狀:X.shape = [seq_length, batch_size, input_size],Y.shape = [seq_length, num_directions, batch_size, hidden_size],initial_h.shape = Y_h.shape = [num_directions, batch_size, hidden_size]。 如果為 1,則預期下列形狀:X.shape = [batch_size, seq_length, input_size],Y.shape = [batch_size, seq_length, num_directions, hidden_size],initial_h.shape = Y_h.shape = [batch_size, num_directions, hidden_size]。

  • linear_before_reset - INT(預設值為 '0'

    計算隱藏閘的輸出時,在乘以重設閘的輸出之前套用線性轉換。

輸入

介於 3 到 6 個輸入之間。

  • X (異質) - T

    輸入序列封裝(且可能已填補)為一個 3D 張量,其形狀為 [seq_length, batch_size, input_size]

  • W (異質) - T

    閘的權重張量。 沿著維度 0 串連 W[zrh]WB[zrh](如果是雙向)。 此張量的形狀為 [num_directions, 3*hidden_size, input_size]

  • R (異質) - T

    遞迴權重張量。沿著維度 0 將 R[zrh]RB[zrh] (如果是雙向) 連接起來。此張量的形狀為 [num_directions, 3*hidden_size, hidden_size]

  • B (可選,異質) - T

    閘門的偏置張量。沿著維度 0 將 [Wb[zrh], Rb[zrh]][WBb[zrh], RBb[zrh]] (如果是雙向) 連接起來。此張量的形狀為 [num_directions, 6*hidden_size]。可選:如果未指定,則假設為 0。

  • sequence_lens (可選,異質) - T1

    可選張量,用於指定批次中序列的長度。如果未指定,則假設批次中的所有序列長度都為 seq_length。其形狀為 [batch_size]

  • initial_h (可選,異質) - T

    隱藏層的可選初始值。如果未指定,則假設為 0。其形狀為 [num_directions, batch_size, hidden_size]

輸出

介於 0 和 2 個輸出之間。

  • Y (可選,異質) - T

    一個張量,連接所有隱藏層的中間輸出值。其形狀為 [seq_length, num_directions, batch_size, hidden_size]

  • Y_h (可選,異質) - T

    隱藏層的最後一個輸出值。其形狀為 [num_directions, batch_size, hidden_size]

類型約束

  • T 屬於 ( tensor(double), tensor(float), tensor(float16) )

    將輸入和輸出類型約束為浮點數張量。

  • T1 屬於 ( tensor(int32) )

    將 seq_lens 約束為整數張量。

GRU - 7

版本

  • 名稱GRU (GitHub)

  • 網域main

  • since_version: 7

  • 函式False

  • 支援等級SupportType.COMMON

  • 形狀推斷True

此版本的運算符自版本 7起可用。

摘要

計算單層 GRU。此運算子通常透過某些自訂實作(例如 CuDNN)來支援。

符號

X - 輸入張量

z - 更新閘

r - 重設閘

h - 隱藏閘

t - 時間步驟(t-1 表示前一個時間步驟)

W[zrh] - 更新、重設和隱藏閘的 W 參數權重矩陣

R[zrh] - 更新、重設和隱藏閘的 R 遞迴權重矩陣

Wb[zrh] - 更新、重設和隱藏閘的 W 偏權向量

Rb[zrh] - 更新、重設和隱藏閘的 R 偏權向量

WB[zrh] - 後向更新、重設和隱藏閘的 W 參數權重矩陣

RB[zrh] - 後向更新、重設和隱藏閘的 R 遞迴權重矩陣

WBb[zrh] - 後向更新、重設和隱藏閘的 W 偏權向量

RBb[zrh] - 後向更新、重設和隱藏閘的 R 偏權向量

H - 隱藏狀態

num_directions - 如果方向 == 雙向,則為 2,否則為 1

激活函式

Relu(x) - max(0, x)

Tanh(x) - (1 - e^{-2x})/(1 + e^{-2x})

Sigmoid(x) - 1/(1 + e^{-x})

(注意:以下為可選)

Affine(x) - alpha*x + beta

LeakyRelu(x) - 如果 x >= 0,則為 x,否則為 alpha * x

ThresholdedRelu(x) - 如果 x >= alpha,則為 x,否則為 0

ScaledTanh(x) - alphaTanh(betax)

HardSigmoid(x) - min(max(alpha*x + beta, 0), 1)

Elu(x) - 如果 x >= 0 則為 x,否則為 alpha*(e^x - 1)

Softsign(x) - x/(1 + |x|)

Softplus(x) - log(1 + e^x)

方程式(預設:f=Sigmoid,g=Tanh)

  • 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) # 預設值,當 linear_before_reset = 0 時

  • ht = g(Xt*(Wh^T) + (rt (.) (Ht-1*(Rh^T) + Rbh)) + Wbh) # 當 linear_before_reset != 0 時

  • Ht = (1 - zt) (.) ht + zt (.) Ht-1 此運算子具有選用輸入/輸出。 有關選用引數表示法的更多詳細資訊,請參閱ONNX IR。 在實際引數名稱的位置可以使用空字串來表示遺失的引數。 尾隨的選用引數(後面沒有接著存在的引數)也可以直接省略。

屬性

  • activation_alpha - FLOATS :

    某些激活函式所使用的選用縮放值。 這些值會依激活函式的順序使用,例如 LSTM 中的 (f, g, h)。 預設值與對應的 ONNX 運算子相同。例如,使用 LeakyRelu 時,預設的 alpha 為 0.01。

  • activation_beta - FLOATS :

    某些激活函式所使用的選用縮放值。 這些值會依激活函式的順序使用,例如 LSTM 中的 (f, g, h)。 預設值與對應的 ONNX 運算子相同。

  • activations - STRINGS :

    更新、重設和隱藏閘的 2 個(如果雙向則為 4 個)激活函式清單。 激活函式必須是上面指定的激活函式之一。 選用:如果未指定,請參閱預設值的方程式。

  • clip - FLOAT :

    單元剪裁閾值。 剪裁會將張量的元素限制在 [-閾值, +閾值] 的範圍內,並套用至激活的輸入。 如果未指定,則不剪裁。

  • direction - STRING(預設值為 'forward'

    指定 RNN 是正向、反向還是雙向。 必須是正向(預設)、反向或雙向之一。

  • hidden_size - INT :

    隱藏層中的神經元數量

  • linear_before_reset - INT(預設值為 '0'

    計算隱藏閘的輸出時,在乘以重設閘的輸出之前套用線性轉換。

輸入

介於 3 到 6 個輸入之間。

  • X (異質) - T

    輸入序列封裝(且可能已填補)為一個 3D 張量,其形狀為 [seq_length, batch_size, input_size]

  • W (異質) - T

    閘的權重張量。 沿著維度 0 串連 W[zrh]WB[zrh](如果是雙向)。 此張量的形狀為 [num_directions, 3*hidden_size, input_size]

  • R (異質) - T

    遞迴權重張量。沿著維度 0 將 R[zrh]RB[zrh] (如果是雙向) 連接起來。此張量的形狀為 [num_directions, 3*hidden_size, hidden_size]

  • B (可選,異質) - T

    閘門的偏置張量。沿著維度 0 將 [Wb[zrh], Rb[zrh]][WBb[zrh], RBb[zrh]] (如果是雙向) 連接起來。此張量的形狀為 [num_directions, 6*hidden_size]。可選:如果未指定,則假設為 0。

  • sequence_lens (可選,異質) - T1

    可選張量,用於指定批次中序列的長度。如果未指定,則假設批次中的所有序列長度都為 seq_length。其形狀為 [batch_size]

  • initial_h (可選,異質) - T

    隱藏層的可選初始值。如果未指定,則假設為 0。其形狀為 [num_directions, batch_size, hidden_size]

輸出

介於 0 和 2 個輸出之間。

  • Y (可選,異質) - T

    一個張量,連接所有隱藏層的中間輸出值。其形狀為 [seq_length, num_directions, batch_size, hidden_size]

  • Y_h (可選,異質) - T

    隱藏層的最後一個輸出值。其形狀為 [num_directions, batch_size, hidden_size]

類型約束

  • T 屬於 ( tensor(double), tensor(float), tensor(float16) )

    將輸入和輸出類型約束為浮點數張量。

  • T1 屬於 ( tensor(int32) )

    將 seq_lens 約束為整數張量。

GRU - 3

版本

  • 名稱GRU (GitHub)

  • 網域main

  • since_version: 3

  • 函式False

  • 支援等級SupportType.COMMON

  • 形狀推斷True

此版本的運算符自版本 3起可用。

摘要

計算單層 GRU。此運算子通常透過某些自訂實作(例如 CuDNN)來支援。

符號

X - 輸入張量

z - 更新閘

r - 重設閘

h - 隱藏閘

t - 時間步驟(t-1 表示前一個時間步驟)

W[zrh] - 更新、重設和隱藏閘的 W 參數權重矩陣

R[zrh] - 更新、重設和隱藏閘的 R 遞迴權重矩陣

Wb[zrh] - 更新、重設和隱藏閘的 W 偏權向量

Rb[zrh] - 更新、重設和隱藏閘的 R 偏權向量

WB[zrh] - 後向更新、重設和隱藏閘的 W 參數權重矩陣

RB[zrh] - 後向更新、重設和隱藏閘的 R 遞迴權重矩陣

WBb[zrh] - 後向更新、重設和隱藏閘的 W 偏權向量

RBb[zrh] - 後向更新、重設和隱藏閘的 R 偏權向量

H - 隱藏狀態

num_directions - 如果方向 == 雙向,則為 2,否則為 1

激活函式

Relu(x) - max(0, x)

Tanh(x) - (1 - e^{-2x})/(1 + e^{-2x})

Sigmoid(x) - 1/(1 + e^{-x})

(注意:以下為可選)

Affine(x) - alpha*x + beta

LeakyRelu(x) - 如果 x >= 0,則為 x,否則為 alpha * x

ThresholdedRelu(x) - 如果 x >= alpha,則為 x,否則為 0

ScaledTanh(x) - alphaTanh(betax)

HardSigmoid(x) - min(max(alpha*x + beta, 0), 1)

Elu(x) - 如果 x >= 0 則為 x,否則為 alpha*(e^x - 1)

Softsign(x) - x/(1 + |x|)

Softplus(x) - log(1 + e^x)

方程式(預設:f=Sigmoid,g=Tanh)

  • zt = f(Xt*(Wz^T) + Ht-1*Rz + Wbz + Rbz)

  • rt = f(Xt*(Wr^T) + Ht-1*Rr + Wbr + Rbr)

  • ht = g(Xt*(Wh^T) + (rt (.) Ht-1)*Rh + Rbh + Wbh) # 預設,當 linear_before_reset = 0 時

  • ht = g(Xt*(Wh^T) + (rt (.) (Ht-1*Rh + Rbh) + Wbh) # 當 linear_before_reset != 0 時

  • Ht = (1 - zt) (.) ht + zt (.) Ht-1

屬性

  • activation_alpha - FLOATS :

    某些激活函式所使用的選用縮放值。 這些值會依激活函式的順序使用,例如 LSTM 中的 (f, g, h)。 預設值與對應的 ONNX 運算子相同。例如,使用 LeakyRelu 時,預設的 alpha 為 0.01。

  • activation_beta - FLOATS :

    某些激活函式所使用的選用縮放值。 這些值會依激活函式的順序使用,例如 LSTM 中的 (f, g, h)。 預設值與對應的 ONNX 運算子相同。

  • activations - STRINGS :

    更新、重設和隱藏閘的 2 個(如果雙向則為 4 個)激活函式清單。 激活函式必須是上面指定的激活函式之一。 選用:如果未指定,請參閱預設值的方程式。

  • clip - FLOAT :

    單元剪裁閾值。 剪裁會將張量的元素限制在 [-閾值, +閾值] 的範圍內,並套用至激活的輸入。 如果未指定,則不剪裁。

  • direction - STRING(預設值為 'forward'

    指定 RNN 是正向、反向還是雙向。 必須是正向(預設)、反向或雙向之一。

  • hidden_size - INT :

    隱藏層中的神經元數量

  • linear_before_reset - INT(預設值為 '0'

    計算隱藏閘的輸出時,在乘以重設閘的輸出之前套用線性轉換。

  • output_sequence - INT (預設為 '0')

    如果為 0,則隱藏層的序列輸出為可選。預設為 0。

輸入

介於 3 到 6 個輸入之間。

  • X (異質) - T

    輸入序列封裝(且可能已填補)為一個 3D 張量,其形狀為 [seq_length, batch_size, input_size]

  • W (異質) - T

    閘的權重張量。 沿著維度 0 串連 W[zrh]WB[zrh](如果是雙向)。 此張量的形狀為 [num_directions, 3*hidden_size, input_size]

  • R (異質) - T

    遞迴權重張量。沿著維度 0 將 R[zrh]RB[zrh] (如果是雙向) 連接起來。此張量的形狀為 [num_directions, 3*hidden_size, hidden_size]

  • B (可選,異質) - T

    閘門的偏置張量。沿著維度 0 將 [Wb[zrh], Rb[zrh]][WBb[zrh], RBb[zrh]] (如果是雙向) 連接起來。此張量的形狀為 [num_directions, 6*hidden_size]。可選:如果未指定,則假設為 0。

  • sequence_lens (可選,異質) - T1

    可選張量,用於指定批次中序列的長度。如果未指定,則假設批次中的所有序列長度都為 seq_length。其形狀為 [batch_size]

  • initial_h (可選,異質) - T

    隱藏層的可選初始值。如果未指定,則假設為 0。其形狀為 [num_directions, batch_size, hidden_size]

輸出

介於 0 和 2 個輸出之間。

  • Y (可選,異質) - T

    一個張量,連接所有隱藏層的中間輸出值。其形狀為 [seq_length, num_directions, batch_size, hidden_size]。如果 output_sequence 為 0,則此項為可選。

  • Y_h (可選,異質) - T

    隱藏層的最後一個輸出值。其形狀為 [num_directions, batch_size, hidden_size]

類型約束

  • T 屬於 ( tensor(double), tensor(float), tensor(float16) )

    將輸入和輸出類型約束為浮點數張量。

  • T1 屬於 ( tensor(int32) )

    將 seq_lens 約束為整數張量。

GRU - 1

版本

  • 名稱GRU (GitHub)

  • 網域main

  • since_version: 1

  • 函式False

  • 支援等級SupportType.COMMON

  • 形狀推斷: False

此版本的運算符自版本 1起可用。

摘要

計算單層 GRU。此運算子通常透過某些自訂實作(例如 CuDNN)來支援。

符號

X - 輸入張量

z - 更新閘

r - 重設閘

h - 隱藏閘

t - 時間步驟(t-1 表示前一個時間步驟)

W[zrh] - 更新、重設和隱藏閘的 W 參數權重矩陣

R[zrh] - 更新、重設和隱藏閘的 R 遞迴權重矩陣

Wb[zrh] - 更新、重設和隱藏閘的 W 偏權向量

Rb[zrh] - 更新、重設和隱藏閘的 R 偏權向量

WB[zrh] - 後向更新、重設和隱藏閘的 W 參數權重矩陣

RB[zrh] - 後向更新、重設和隱藏閘的 R 遞迴權重矩陣

WBb[zrh] - 後向更新、重設和隱藏閘的 W 偏權向量

RBb[zrh] - 後向更新、重設和隱藏閘的 R 偏權向量

H - 隱藏狀態

num_directions - 如果方向 == 雙向,則為 2,否則為 1

激活函式

Relu(x) - max(0, x)

Tanh(x) - (1 - e^{-2x})/(1 + e^{-2x})

Sigmoid(x) - 1/(1 + e^{-x})

(注意:以下為可選)

Affine(x) - alpha*x + beta

LeakyRelu(x) - 如果 x >= 0,則為 x,否則為 alpha * x

ThresholdedRelu(x) - 如果 x >= alpha,則為 x,否則為 0

ScaledTanh(x) - alphaTanh(betax)

HardSigmoid(x) - min(max(alpha*x + beta, 0), 1)

Elu(x) - 如果 x >= 0 則為 x,否則為 alpha*(e^x - 1)

Softsign(x) - x/(1 + |x|)

Softplus(x) - log(1 + e^x)

方程式(預設:f=Sigmoid,g=Tanh)

  • zt = f(Xt*(Wz^T) + Ht-1*Rz + Wbz + Rbz)

  • rt = f(Xt*(Wr^T) + Ht-1*Rr + Wbr + Rbr)

  • ht = g(Xt*(Wh^T) + (rt (.) Ht-1)*Rh + Rbh + Wbh) # 預設,當 linear_before_reset = 0 時

  • ht = g(Xt*(Wh^T) + (rt (.) (Ht-1*Rh + Rbh) + Wbh) # 當 linear_before_reset != 0 時

  • Ht = (1 - zt) (.) ht + zt (.) Ht-1

屬性

  • activation_alpha - FLOATS :

    某些啟動函數使用的可選縮放值。這些值會按照啟動函數的順序使用,例如 LSTM 中的 (f, g, h)。

  • activation_beta - FLOATS :

    某些啟動函數使用的可選縮放值。這些值會按照啟動函數的順序使用,例如 LSTM 中的 (f, g, h)。

  • activations - STRINGS :

    更新、重設和隱藏閘的 2 個(如果雙向則為 4 個)激活函式清單。 激活函式必須是上面指定的激活函式之一。 選用:如果未指定,請參閱預設值的方程式。

  • clip - FLOAT :

    單元剪裁閾值。 剪裁會將張量的元素限制在 [-閾值, +閾值] 的範圍內,並套用至激活的輸入。 如果未指定,則不剪裁。

  • direction - STRING (預設為 'foward')

    指定 RNN 是正向、反向還是雙向。 必須是正向(預設)、反向或雙向之一。

  • hidden_size - INT :

    隱藏層中的神經元數量

  • output_sequence - INT (預設為 '0')

    如果為 0,則隱藏層的序列輸出為可選。預設為 0。

輸入

介於 3 到 6 個輸入之間。

  • X (異質) - T

    輸入序列封裝(且可能已填補)為一個 3D 張量,其形狀為 [seq_length, batch_size, input_size]

  • W (異質) - T

    閘的權重張量。 沿著維度 0 串連 W[zrh]WB[zrh](如果是雙向)。 此張量的形狀為 [num_directions, 3*hidden_size, input_size]

  • R (異質) - T

    遞迴權重張量。沿著維度 0 將 R[zrh]RB[zrh] (如果是雙向) 連接起來。此張量的形狀為 [num_directions, 3*hidden_size, hidden_size]

  • B (可選,異質) - T

    閘門的偏置張量。沿著維度 0 將 [Wb[zrh], Rb[zrh]][WBb[zrh], RBb[zrh]] (如果是雙向) 連接起來。此張量的形狀為 [num_directions, 6*hidden_size]。可選:如果未指定,則假設為 0。

  • sequence_lens (可選,異質) - T1

    可選張量,用於指定批次中序列的長度。如果未指定,則假設批次中的所有序列長度都為 seq_length。其形狀為 [batch_size]

  • initial_h (可選,異質) - T

    隱藏層的可選初始值。如果未指定,則假設為 0。其形狀為 [num_directions, batch_size, hidden_size]

輸出

  • Y (可選,異質) - T

    一個張量,連接所有隱藏層的中間輸出值。其形狀為 [seq_length, num_directions, batch_size, hidden_size]。如果 output_sequence 為 0,則此項為可選。

  • Y_h (異質) - T

    隱藏層的最後一個輸出值。其形狀為 [num_directions, batch_size, hidden_size]

類型約束

  • T 屬於 ( tensor(double), tensor(float), tensor(float16) )

    將輸入和輸出類型約束為浮點數張量。

  • T1 屬於 ( tensor(int32) )

    將 seq_lens 約束為整數張量。