GRU

GRU - 22

版本

  • 名称GRU (GitHub)

  • : main

  • 起始版本: 22

  • 函数: 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 - 如果 direction == bidirectional 则为 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 if x >= 0 else alpha * x

  • ThresholdedRelu(x) - x if x >= alpha else 0

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

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

  • Elu(x) - x if x >= 0 else 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 - 浮点数 :

    某些激活函数使用的可选缩放值。这些值按照激活函数的顺序使用,例如 LSTM 中的 (f, g, h)。默认值与相应 ONNX 运算符的默认值相同。例如,对于 LeakyRelu,默认 alpha 为 0.01。

  • activation_beta - 浮点数 :

    某些激活函数使用的可选缩放值。这些值按照激活函数的顺序使用,例如 LSTM 中的 (f, g, h)。默认值与相应 ONNX 运算符的默认值相同。

  • activations - 字符串 :

    更新、重置和隐藏门的 2 个(如果双向则为 4 个)激活函数列表。激活函数必须是上面指定的激活函数之一。可选:如果未指定,请参阅默认方程。

  • clip - 浮点数 :

    单元格裁剪阈值。裁剪将张量的元素限制在 [-threshold, +threshold] 范围内,并应用于激活函数的输入。如果未指定,则不进行裁剪。

  • direction - 字符串(默认为'forward'

    指定 RNN 是前向、反向还是双向。必须是 forward(默认)、reverse 或 bidirectional 之一。

  • hidden_size - 整数 :

    隐藏层中的神经元数量

  • layout - 整数(默认为'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 - 整数(默认为'0'

    计算隐藏门的输出时,在乘以重置门的输出之前应用线性变换。

输入

3 到 6 个输入之间。

  • X (异构) - T

    输入序列打包(并可能填充)成一个 3-D 张量,形状为[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

  • 起始版本: 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 - 如果 direction == bidirectional 则为 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 if x >= 0 else alpha * x

  • ThresholdedRelu(x) - x if x >= alpha else 0

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

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

  • Elu(x) - x if x >= 0 else 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 - 浮点数 :

    某些激活函数使用的可选缩放值。这些值按照激活函数的顺序使用,例如 LSTM 中的 (f, g, h)。默认值与相应 ONNX 运算符的默认值相同。例如,对于 LeakyRelu,默认 alpha 为 0.01。

  • activation_beta - 浮点数 :

    某些激活函数使用的可选缩放值。这些值按照激活函数的顺序使用,例如 LSTM 中的 (f, g, h)。默认值与相应 ONNX 运算符的默认值相同。

  • activations - 字符串 :

    更新、重置和隐藏门的 2 个(如果双向则为 4 个)激活函数列表。激活函数必须是上面指定的激活函数之一。可选:如果未指定,请参阅默认方程。

  • clip - 浮点数 :

    单元格裁剪阈值。裁剪将张量的元素限制在 [-threshold, +threshold] 范围内,并应用于激活函数的输入。如果未指定,则不进行裁剪。

  • direction - 字符串(默认为'forward'

    指定 RNN 是前向、反向还是双向。必须是 forward(默认)、reverse 或 bidirectional 之一。

  • hidden_size - 整数 :

    隐藏层中的神经元数量

  • layout - 整数(默认为'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 - 整数(默认为'0'

    计算隐藏门的输出时,在乘以重置门的输出之前应用线性变换。

输入

3 到 6 个输入之间。

  • X (异构) - T

    输入序列打包(并可能填充)成一个 3-D 张量,形状为[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

  • 起始版本: 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 - 如果 direction == bidirectional 则为 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 if x >= 0 else alpha * x

ThresholdedRelu(x) - x if x >= alpha else 0

ScaledTanh(x) - alphaTanh(betax)

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

Elu(x) - x if x >= 0 else 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 - 浮点数 :

    某些激活函数使用的可选缩放值。这些值按照激活函数的顺序使用,例如 LSTM 中的 (f, g, h)。默认值与相应 ONNX 运算符的默认值相同。例如,对于 LeakyRelu,默认 alpha 为 0.01。

  • activation_beta - 浮点数 :

    某些激活函数使用的可选缩放值。这些值按照激活函数的顺序使用,例如 LSTM 中的 (f, g, h)。默认值与相应 ONNX 运算符的默认值相同。

  • activations - 字符串 :

    更新、重置和隐藏门的 2 个(如果双向则为 4 个)激活函数列表。激活函数必须是上面指定的激活函数之一。可选:如果未指定,请参阅默认方程。

  • clip - 浮点数 :

    单元格裁剪阈值。裁剪将张量的元素限制在 [-threshold, +threshold] 范围内,并应用于激活函数的输入。如果未指定,则不进行裁剪。

  • direction - 字符串(默认为'forward'

    指定 RNN 是前向、反向还是双向。必须是 forward(默认)、reverse 或 bidirectional 之一。

  • hidden_size - 整数 :

    隐藏层中的神经元数量

  • linear_before_reset - 整数(默认为'0'

    计算隐藏门的输出时,在乘以重置门的输出之前应用线性变换。

输入

3 到 6 个输入之间。

  • X (异构) - T

    输入序列打包(并可能填充)成一个 3-D 张量,形状为[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 - 如果 direction == bidirectional 则为 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 if x >= 0 else alpha * x

ThresholdedRelu(x) - x if x >= alpha else 0

ScaledTanh(x) - alphaTanh(betax)

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

Elu(x) - x if x >= 0 else 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 - 浮点数 :

    某些激活函数使用的可选缩放值。这些值按照激活函数的顺序使用,例如 LSTM 中的 (f, g, h)。默认值与相应 ONNX 运算符的默认值相同。例如,对于 LeakyRelu,默认 alpha 为 0.01。

  • activation_beta - 浮点数 :

    某些激活函数使用的可选缩放值。这些值按照激活函数的顺序使用,例如 LSTM 中的 (f, g, h)。默认值与相应 ONNX 运算符的默认值相同。

  • activations - 字符串 :

    更新、重置和隐藏门的 2 个(如果双向则为 4 个)激活函数列表。激活函数必须是上面指定的激活函数之一。可选:如果未指定,请参阅默认方程。

  • clip - 浮点数 :

    单元格裁剪阈值。裁剪将张量的元素限制在 [-threshold, +threshold] 范围内,并应用于激活函数的输入。如果未指定,则不进行裁剪。

  • direction - 字符串(默认为'forward'

    指定 RNN 是前向、反向还是双向。必须是 forward(默认)、reverse 或 bidirectional 之一。

  • hidden_size - 整数 :

    隐藏层中的神经元数量

  • linear_before_reset - 整数(默认为'0'

    计算隐藏门的输出时,在乘以重置门的输出之前应用线性变换。

  • output_sequence - 整数(默认为'0'

    如果为 0,则隐藏状态的序列输出是可选的。默认为 0。

输入

3 到 6 个输入之间。

  • X (异构) - T

    输入序列打包(并可能填充)成一个 3-D 张量,形状为[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

  • 起始版本: 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 - 如果 direction == bidirectional 则为 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 if x >= 0 else alpha * x

ThresholdedRelu(x) - x if x >= alpha else 0

ScaledTanh(x) - alphaTanh(betax)

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

Elu(x) - x if x >= 0 else 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 - 浮点数 :

    某些激活函数使用的可选缩放值。这些值按照激活函数的顺序使用,例如 LSTM 中的 (f, g, h)。

  • activation_beta - 浮点数 :

    某些激活函数使用的可选缩放值。这些值按照激活函数的顺序使用,例如 LSTM 中的 (f, g, h)。

  • activations - 字符串 :

    更新、重置和隐藏门的 2 个(如果双向则为 4 个)激活函数列表。激活函数必须是上面指定的激活函数之一。可选:如果未指定,请参阅默认方程。

  • clip - 浮点数 :

    单元格裁剪阈值。裁剪将张量的元素限制在 [-threshold, +threshold] 范围内,并应用于激活函数的输入。如果未指定,则不进行裁剪。

  • direction - 字符串(默认为'foward'

    指定 RNN 是前向、反向还是双向。必须是 forward(默认)、reverse 或 bidirectional 之一。

  • hidden_size - 整数 :

    隐藏层中的神经元数量

  • output_sequence - 整数(默认为'0'

    如果为 0,则隐藏状态的序列输出是可选的。默认为 0。

输入

3 到 6 个输入之间。

  • X (异构) - T

    输入序列打包(并可能填充)成一个 3-D 张量,形状为[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 限制为整数张量。