RNNCell

class RNNCell(input_size, hidden_size, bias=True, nonlinearity='tanh')[源代码]

一个使用 tanh 或 ReLU 非线性的 Elman RNN 单元

\[h' = \tanh(W_{ih} x + b_{ih} + W_{hh} h + b_{hh})\]

如果 nonlinearity‘relu’ ,那么会使用 ReLU 代替 tanh。

参数
  • input_size (int) – 输入 x 应该具有的特征数量

  • hidden_size (int) – 隐藏状态 h 所包含的特征数量

  • bias (bool) – 如果为 False ,那么这一层不会使用偏置权重 b_ihb_hh 。默认值: True

  • nonlinearity (str) – 需要使用的非线性函数。可以是 'tanh''relu' 。默认值: 'tanh'

输入:input,hidden
  • input 形状为 (batch, input_size) :包含输入特征的张量

  • hidden 形状为 (batch, hidden_size) :包含批中每个元素的初始隐藏状态的张量。如果没有提供则默认为零。

输出: h’
  • h’ 形状为 (batch, hidden_size) :包含批中每个元素的下一隐藏状态的张量

形状:
  • 输入1: \((N, H_{in})\) 包含输入特征的张量其中 \(H_{in}\) = input_size

  • 输入2: \((N, H_{out})\) 包含批中每一元素的初始隐藏状态的张量其中 \(H_{out}\) = hidden_size 如果没有提供则默认为零。

  • 输出: \((N, H_{out})\) 包含批中每一元素的下一隐藏状态的张量

实际案例

import numpy as np
import megengine as mge
import megengine.module as M

m = M.RNNCell(10, 20)
inp = mge.tensor(np.random.randn(3, 10), dtype=np.float32)
hx = mge.tensor(np.random.randn(3, 20), dtype=np.float32)
out = m(inp, hx)
print(out.numpy().shape)

输出:

(3, 20)