Qianfeng

Results 1 issues of Qianfeng

原代码中的若干疑点: 1. RNN中更新hidden应该是由这一次输入和上一次的hidden共同决定,参考pytorch文档中的公式: ![image](https://user-images.githubusercontent.com/53401404/89021596-60eb4880-d353-11ea-9dfd-d343c47d3f67.png) 而2.5节代码的step函数中将self.Whh.weight作为新的hidden返回,实际上是将上述公式中的Whh作为hidden返回,这应该是不对的。hidden应该对应2.5节out的表达式,而out变量没有存在的必要,RNN一般直接将更新后的hidden作为这一次的输出向量。 2. 在底下的测试代码中,可以看得出input的第一维代表了序列长度,第二维代表输入向量长度,那么也就是默认了batch_size为1。RNN中hidden的形状是 (batch_size,hidden_size),而不是2.5节代码中的(seq_len,hidden_size)。也就是说,hidden的形状与输入序列的序列长度无关,只与batch_size和hidden_size有关。既然测试代码默认了批量大小为1,那么h_0形状是(1,hidden_size)或者是个一维向量。参考pytorch关于Input和hidden的定义: ![image](https://user-images.githubusercontent.com/53401404/89024687-17512c80-d358-11ea-8148-898d49a94147.png) 3. 在最后的for循环中,一直将h_0当作上一次的hidden输入,貌似是笔误? 我修改了一下代码,可供参考: ```python import torch class RNN(): def __init__(self,input_size,hidden_size): self.W1x_plus_b1 = torch.nn.Linear(input_size,hidden_size) self.W2h_plus_b2 = torch.nn.Linear(hidden_size,hidden_size) def __call__(self,x,hidden): return self.step(x,hidden) def...