以下是RNN的计算公式,t时刻的隐藏状态H(t)等于前一时刻隐藏状态H(t-1)乘以参数矩阵,再加t时刻的输入x(t)乘以参数矩阵,最后再通过激活函数,等到t时刻隐藏状态。
下图是输出input和初始化的隐藏状态,当参数batch_first = True时候,输入是(batch_size,Sequence_length,input_size),参数batch_first = False的时候,输入是
(Sequence_length,batch_size,input_size)
h_0就是初始时刻的隐藏状态hidden state,一般情况下,输入是(D*num_layers,N,H_out)
- D:如果是双向RNN则为2,如果是单向RNN则为1
- num_layers: 是RNN的层数
- N:Batch_size 大小
- H_in :input size
- H_out : hidden_size
写到这里也就把RNN的传入参数给将明白了,主要就是初始隐藏态和input
输出 - 输出分别输出最后一个时刻的隐藏态以及所有时刻隐藏态的堆叠,作为输出outputs
- outputs: 当batch_first = True时,输出为(batch_size,Sequence_length,hidden_size * D);当batch_first = False 的时候,输出为(Sequence_length,Batch_size,hidden_size*D)
- h_n: 输出为(D*num_layers,Batch_size,hidden_size)
- 参数 D 同上面一样,这里不在赘述。
示例:
RNN 返回值中 outputs 和 hidden_n的关系
由下图可知,outputs最后一个时间步的输出就是hidden_n