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
- 如果方向 == 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 如果 x >= 0 否则 alpha * x
ThresholdedRelu(x) - x 如果 x >= alpha 否则 0
ScaledTanh(x) - alpha * Tanh(beta * x)
HardSigmoid(x) - min(max(alpha * x + beta, 0), 1)
Elu(x) - x 如果 x >= 0 否则 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) :
单元剪裁阈值。剪裁将张量的元素限制在 [-threshold, +threshold] 范围内,并应用于激活函数的输入。如果未指定,则不进行剪裁。
direction - 字符串 (STRING) (默认值为
'forward'
)指定 RNN 是前向、反向还是双向。必须是 forward(默认)、reverse 或 bidirectional 之一。
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
输入序列打包(并可能填充)为一个 3 维张量,形状为
[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]
。可选:如果未指定 - 假定为 0sequence_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
- 如果方向 == 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 如果 x >= 0 否则 alpha * x
ThresholdedRelu(x) - x 如果 x >= alpha 否则 0
ScaledTanh(x) - alpha * Tanh(beta * x)
HardSigmoid(x) - min(max(alpha * x + beta, 0), 1)
Elu(x) - x 如果 x >= 0 否则 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) :
单元剪裁阈值。剪裁将张量的元素限制在 [-threshold, +threshold] 范围内,并应用于激活函数的输入。如果未指定,则不进行剪裁。
direction - 字符串 (STRING) (默认值为
'forward'
)指定 RNN 是前向、反向还是双向。必须是 forward(默认)、reverse 或 bidirectional 之一。
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
输入序列打包(并可能填充)为一个 3 维张量,形状为
[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]
。可选:如果未指定 - 假定为 0sequence_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
- 如果方向 == 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 如果 x >= 0 否则 alpha * x
ThresholdedRelu(x) - x 如果 x >= alpha 否则 0
ScaledTanh(x) - alpha*Tanh(beta*x)
HardSigmoid(x) - min(max(alpha*x + beta, 0), 1)
Elu(x) - x 如果 x >= 0 否则 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) :
单元剪裁阈值。剪裁将张量的元素限制在 [-threshold, +threshold] 范围内,并应用于激活函数的输入。如果未指定,则不进行剪裁。
direction - 字符串 (STRING) (默认值为
'forward'
)指定 RNN 是前向、反向还是双向。必须是 forward(默认)、reverse 或 bidirectional 之一。
hidden_size - 整数 (INT) :
隐藏层中的神经元数量
linear_before_reset - 整数 (INT) (默认值为
'0'
)计算隐藏门输出时,先应用线性变换,再乘以重置门的输出。
输入¶
3 到 6 个输入。
X (异构) - T
输入序列打包(并可能填充)为一个 3 维张量,形状为
[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]
。可选:如果未指定 - 假定为 0sequence_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
起始版本:
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
- 如果方向 == 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 如果 x >= 0 否则 alpha * x
ThresholdedRelu(x) - x 如果 x >= alpha 否则 0
ScaledTanh(x) - alpha*Tanh(beta*x)
HardSigmoid(x) - min(max(alpha*x + beta, 0), 1)
Elu(x) - x 如果 x >= 0 否则 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) :
单元剪裁阈值。剪裁将张量的元素限制在 [-threshold, +threshold] 范围内,并应用于激活函数的输入。如果未指定,则不进行剪裁。
direction - 字符串 (STRING) (默认值为
'forward'
)指定 RNN 是前向、反向还是双向。必须是 forward(默认)、reverse 或 bidirectional 之一。
hidden_size - 整数 (INT) :
隐藏层中的神经元数量
linear_before_reset - 整数 (INT) (默认值为
'0'
)计算隐藏门输出时,先应用线性变换,再乘以重置门的输出。
output_sequence - 整数 (INT) (默认值为
'0'
)如果为 0,则隐藏层的序列输出是可选的。默认值为 0。
输入¶
3 到 6 个输入。
X (异构) - T
输入序列打包(并可能填充)为一个 3 维张量,形状为
[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]
。可选:如果未指定 - 假定为 0sequence_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
- 如果方向 == 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 如果 x >= 0 否则 alpha * x
ThresholdedRelu(x) - x 如果 x >= alpha 否则 0
ScaledTanh(x) - alpha*Tanh(beta*x)
HardSigmoid(x) - min(max(alpha*x + beta, 0), 1)
Elu(x) - x 如果 x >= 0 否则 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) :
单元剪裁阈值。剪裁将张量的元素限制在 [-threshold, +threshold] 范围内,并应用于激活函数的输入。如果未指定,则不进行剪裁。
direction - 字符串 (STRING) (默认值为
'foward'
)指定 RNN 是前向、反向还是双向。必须是 forward(默认)、reverse 或 bidirectional 之一。
hidden_size - 整数 (INT) :
隐藏层中的神经元数量
output_sequence - 整数 (INT) (默认值为
'0'
)如果为 0,则隐藏层的序列输出是可选的。默认值为 0。
输入¶
3 到 6 个输入。
X (异构) - T
输入序列打包(并可能填充)为一个 3 维张量,形状为
[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]
。可选:如果未指定 - 假定为 0sequence_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 约束为整数张量。