放几个官方的图片:
输入
RNN中的参数必须要的是input_size和hidden_size
首先看input_size
input_size的维度是(seq_len, batch_size, input_dim)
- seq_len:输入的序列长度,比如我爱中国,这就是4
- batch_size:一轮处理多少个样本
- inpu_dim:每一个单词的维度
在看hidden_size
hidden_size的维度是(num_layers * directions, batch_size, hidden_dim),这个是为每一层提供一个初始的 h 0 h_0 h0(不懂的去看看RNN的结构)
- num_layers * directions:很明显,后面的那个参数是单向还是双向,如果是单向,当然是有多少层就需要提供多少个初始 h 0 h_0 h0
- batch_size:和上面一样,不说了
- hidden_dim:隐藏层的节点数
输出
共有两个输出,一个是output,一个是hidden
先看output
output的维度是(seq_len, batch_size, hidden_dim * directions)
- seq_len:输入几个单词,输出几个单词
- batch_size;---------
- hidden_dim*directions:这里我也不太明白,为什么output的维度要和hidden的维度一样,我在运行RNN的时候,并没有发现从hidden到output的权重矩阵,所以一样也是正常的,但是为什么会没有从hidden到output的权重矩阵呢,我也霸知道
再看 hidden
hidden的维度是(num_layers * directions, batch_size, hidden_dim),这个和输入时候的初始 h 0 h_0 h0一样,霸说了