RNN

RNN - 22

版本

  • **名称**: RNN (GitHub)

  • **域**: main

  • **起始版本**: 22

  • **函数**: False

  • **支持级别**: SupportType.COMMON

  • **形状推断**: True

该版本的算子从 **版本 22** 起可用。

摘要

计算单层简单 RNN。该算子通常通过某些自定义实现(例如 CuDNN)来支持。

符号表示

  • X - 输入张量

  • i - 输入门

  • t - 时间步长 (t-1 表示上一个时间步长)

  • Wi - 输入门的 W 参数权重矩阵

  • Ri - 输入门的 R 循环权重矩阵

  • Wbi - 输入门的 W 参数偏置向量

  • Rbi - 输入门的 R 参数偏置向量

  • WBi - 反向输入门的 W 参数权重矩阵

  • RBi - 反向输入门的 R 循环权重矩阵

  • WBbi - 反向输入门的 WR 偏置向量

  • RBbi - 反向输入门的 RR 偏置向量

  • 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 >= 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=Tanh)

  • Ht = f(Xt*(Wi^T) + Ht-1*(Ri^T) + Wbi + Rbi) 此算子具有**可选**的输入/输出。有关可选参数表示的更多详细信息,请参阅 ONNX IR。可以使用空字符串代替实际参数的名称来表示参数缺失。末尾的可选参数(后面没有出现的参数)也可以简单地省略。

属性

  • activation_alpha - 浮点数数组 :

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

  • activation_beta - 浮点数数组 :

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

  • **activations - 字符串数组** (默认值为 ['Tanh', 'Tanh'])

    输入门的激活函数(如果双向则为一个或两个)。激活函数必须是上面指定的激活函数之一。可选:如果未指定,默认为 Tanh

  • clip - 浮点数 :

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

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

    指定 RNN 是前向 (forward)、反向 (reverse) 还是双向 (bidirectional)。必须是 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]。

输入

3 到 6 个输入。

  • **X** (异构) - **T**

    打包(并可能填充)到一个 3-D 张量中的输入序列,形状为 [seq_length, batch_size, input_size]

  • **W** (异构) - **T**

    输入门的权重张量。是 WiWBi(如果双向)的连接。张量的形状为 [num_directions, hidden_size, input_size]

  • **R** (异构) - **T**

    循环权重张量。是 RiRBi(如果双向)的连接。张量的形状为 [num_directions, hidden_size, hidden_size]

  • **B** (可选, 异构) - **T**

    输入门的偏置张量。是 [Wbi, Rbi][WBbi, RBbi](如果双向)的连接。张量的形状为 [num_directions, 2*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 限制为整数张量。

RNN - 14

版本

  • **名称**: RNN (GitHub)

  • **域**: main

  • **起始版本**: 14

  • **函数**: False

  • **支持级别**: SupportType.COMMON

  • **形状推断**: True

该版本的算子从 **版本 14** 起可用。

摘要

计算单层简单 RNN。该算子通常通过某些自定义实现(例如 CuDNN)来支持。

符号表示

  • X - 输入张量

  • i - 输入门

  • t - 时间步长 (t-1 表示上一个时间步长)

  • Wi - 输入门的 W 参数权重矩阵

  • Ri - 输入门的 R 循环权重矩阵

  • Wbi - 输入门的 W 参数偏置向量

  • Rbi - 输入门的 R 参数偏置向量

  • WBi - 反向输入门的 W 参数权重矩阵

  • RBi - 反向输入门的 R 循环权重矩阵

  • WBbi - 反向输入门的 WR 偏置向量

  • RBbi - 反向输入门的 RR 偏置向量

  • 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 >= 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=Tanh)

  • Ht = f(Xt*(Wi^T) + Ht-1*(Ri^T) + Wbi + Rbi) 此算子具有**可选**的输入/输出。有关可选参数表示的更多详细信息,请参阅 ONNX IR。可以使用空字符串代替实际参数的名称来表示参数缺失。末尾的可选参数(后面没有出现的参数)也可以简单地省略。

属性

  • activation_alpha - 浮点数数组 :

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

  • activation_beta - 浮点数数组 :

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

  • **activations - 字符串数组** (默认值为 ['Tanh', 'Tanh'])

    输入门的激活函数(如果双向则为一个或两个)。激活函数必须是上面指定的激活函数之一。可选:如果未指定,默认为 Tanh

  • clip - 浮点数 :

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

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

    指定 RNN 是前向 (forward)、反向 (reverse) 还是双向 (bidirectional)。必须是 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]。

输入

3 到 6 个输入。

  • **X** (异构) - **T**

    打包(并可能填充)到一个 3-D 张量中的输入序列,形状为 [seq_length, batch_size, input_size]

  • **W** (异构) - **T**

    输入门的权重张量。是 WiWBi(如果双向)的连接。张量的形状为 [num_directions, hidden_size, input_size]

  • **R** (异构) - **T**

    循环权重张量。是 RiRBi(如果双向)的连接。张量的形状为 [num_directions, hidden_size, hidden_size]

  • **B** (可选, 异构) - **T**

    输入门的偏置张量。是 [Wbi, Rbi][WBbi, RBbi](如果双向)的连接。张量的形状为 [num_directions, 2*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 限制为整数张量。

RNN - 7

版本

  • **名称**: RNN (GitHub)

  • **域**: main

  • **起始版本**: 7

  • **函数**: False

  • **支持级别**: SupportType.COMMON

  • **形状推断**: True

该版本的算子从 **版本 7** 起可用。

摘要

计算单层简单 RNN。该算子通常通过某些自定义实现(例如 CuDNN)来支持。

符号表示

X - 输入张量

i - 输入门

t - 时间步长 (t-1 表示上一个时间步长)

Wi - 输入门的 W 参数权重矩阵

Ri - 输入门的 R 循环权重矩阵

Wbi - 输入门的 W 参数偏置向量

Rbi - 输入门的 R 参数偏置向量

WBi - 反向输入门的 W 参数权重矩阵

RBi - 反向输入门的 R 循环权重矩阵

WBbi - 反向输入门的 WR 偏置向量

RBbi - 反向输入门的 RR 偏置向量

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 >= 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=Tanh)

  • Ht = f(Xt*(Wi^T) + Ht-1*(Ri^T) + Wbi + Rbi) 此算子具有**可选**的输入/输出。有关可选参数表示的更多详细信息,请参阅 ONNX IR。可以使用空字符串代替实际参数的名称来表示参数缺失。末尾的可选参数(后面没有出现的参数)也可以简单地省略。

属性

  • activation_alpha - 浮点数数组 :

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

  • activation_beta - 浮点数数组 :

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

  • **activations - 字符串数组** (默认值为 ['Tanh', 'Tanh'])

    输入门的激活函数(如果双向则为一个或两个)。激活函数必须是上面指定的激活函数之一。可选:如果未指定,默认为 Tanh

  • clip - 浮点数 :

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

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

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

  • hidden_size - 整数 :

    隐藏层中的神经元数量

输入

3 到 6 个输入。

  • **X** (异构) - **T**

    打包(并可能填充)到一个 3-D 张量中的输入序列,形状为 [seq_length, batch_size, input_size]

  • **W** (异构) - **T**

    输入门的权重张量。是 WiWBi(如果双向)的连接。张量的形状为 [num_directions, hidden_size, input_size]

  • **R** (异构) - **T**

    循环权重张量。是 RiRBi(如果双向)的连接。张量的形状为 [num_directions, hidden_size, hidden_size]

  • **B** (可选, 异构) - **T**

    输入门的偏置张量。是 [Wbi, Rbi][WBbi, RBbi](如果双向)的连接。张量的形状为 [num_directions, 2*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 限制为整数张量。

RNN - 1

版本

  • **名称**: RNN (GitHub)

  • **域**: main

  • **起始版本**: 1

  • **函数**: False

  • **支持级别**: SupportType.COMMON

  • **形状推断**: True

该版本的算子从 **版本 1** 起可用。

摘要

计算单层简单 RNN。该算子通常通过某些自定义实现(例如 CuDNN)来支持。

符号表示

X - 输入张量

i - 输入门

t - 时间步长 (t-1 表示上一个时间步长)

Wi - 输入门的 W 参数权重矩阵

Ri - 输入门的 R 循环权重矩阵

Wbi - 输入门的 W 参数偏置向量

Rbi - 输入门的 R 参数偏置向量

WBi - 反向输入门的 W 参数权重矩阵

RBi - 反向输入门的 R 循环权重矩阵

WBbi - 反向输入门的 WR 偏置向量

RBbi - 反向输入门的 RR 偏置向量

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 >= 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=Tanh)

  • Ht = f(Xt*(Wi^T) + Ht-1*Ri + Wbi + Rbi)

属性

  • activation_alpha - 浮点数数组 :

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

  • activation_beta - 浮点数数组 :

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

  • **activations - 字符串数组** (默认值为 ['Tanh', 'Tanh'])

    输入门的激活函数(如果双向则为一个或两个)。激活函数必须是上面指定的激活函数之一。可选:如果未指定,默认为 Tanh

  • clip - 浮点数 :

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

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

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

  • hidden_size - 整数 :

    隐藏层中的神经元数量

  • **output_sequence - 整数** (默认值为 '0')

    隐藏状态的序列输出是可选的(如果为 0)。默认值为 0。

输入

3 到 6 个输入。

  • **X** (异构) - **T**

    打包(并可能填充)到一个 3-D 张量中的输入序列,形状为 [seq_length, batch_size, input_size]

  • **W** (异构) - **T**

    输入门的权重张量。是 WiWBi(如果双向)的连接。张量的形状为 [num_directions, hidden_size, input_size]

  • **R** (异构) - **T**

    循环权重张量。是 RiRBi(如果双向)的连接。张量的形状为 [num_directions, hidden_size, hidden_size]

  • **B** (可选, 异构) - **T**

    输入门的偏置张量。是 [Wbi, Rbi][WBbi, RBbi](如果双向)的连接。张量的形状为 [num_directions, 2*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 限制为整数张量。