1:RNN layer的计算
【注】这里W的shape为[hidden len,feature len],hidden len意思是每句话的当前单词需要用多少个不同的W向量进行提取特征(结果将feature len压缩成hidden len实现降维)。feature len的意思是由于每个单词由feture len个特征表示,故每个不同的W的维度也必须是feature len。
[注]x:[seq len,batch, feature len]。seq len为时间序列也即是每句话的单词数量。
x_t=[batch,feature len]x_t表示t时刻输入的每句话的每个单词用多少个(feature len)特征表示。
h:[seq len,batch,hidden len].hidden len表示每句话的记忆单元(每个单词降维后的叠加)需要用多少个不同的W向量进行特征提取(结果将feature len压缩成hidden len实现降维)。
h_t=[batch ,hidden len]h_t表示t时刻数的每句话的记忆单元(每个单词降维后的叠加)用多少个(hidden len)不同的W向量进行特征提取(结果将feature len压缩成hidden len实现降维)。
Whh=[hidden len,hidden len]
【注】nn.RNN(pa1,pa2)pa1表示每个单词的维度,pa2表示每个记忆单元的维度。
2:初始化
3:单层RNN
[注]前四行完成了初始化并且rnn(x,torch.zeros(1,3,20))实现了forward(x,h0)。h_0为第0时刻的记忆单元。h为最后时刻的记忆单元。
4:多层RNN
[注]h:[num layers,batch,h dim],out:[seq len,batch,h dim].h为每一层最后时刻每一个句子的记忆单元的维度。out输出的是最后一层所有记忆单元状态=【h0,h1............】。
5:单层RNNCell
【注】RNNCell表示只完成一个时间戳上的计算(也即是每句话只完成一个单词,不进行循环)
[注]for循环是实现对x:[seq len,batch,feature len]的第一维度seq len 进行循环。
6:多层RNNCell