LSTM输入和输出梯度以及梯度形状

  • 本文关键字:输出 LSTM python pytorch
  • 更新时间 :
  • 英文 :


我正在尝试理解LSTM和LSTM的反向传播。我有一个简单的架构。

def __init__(self, input_dim=100, hidden_dim=100, output_dim=216, num_layers=2):
super(LSTMGenerator, self).__init__()
self.input_dim = input_dim
self.hidden_dim = hidden_dim
self.output_dim = output_dim
self.num_layers = num_layers
self.layer1 = nn.LSTM(self.input_dim, self.hidden_dim, self.num_layers, bidirectional=False, dropout=0.5)
self.out = nn.Linear(self.hidden_dim, self.output_dim)

我使用的是pytorch register_backward_hook函数。我正试图修改后向传球中的坡度。我应该使用grad_input还是grad_output?哪个渐变用于更新以前的权重?

我打印出了渐变形状。grad_input和grad_output中的值是什么意思?

length of grad input  3
grad input 0 shape  torch.Size([216])
grad input 1 shape  torch.Size([128, 100])
grad input 2 shape  torch.Size([100, 216])
length of grad output  1
grad ouput 0 shape  torch.Size([128, 216])

如有任何帮助,我们将不胜感激。

Grad_in:模型输出与层输出的梯度

Grad_out:Grad_in*(层输出与层输入的梯度(

(wrt=关于(

因为向后传球从后面一直到开始,所以它是参数与向前传球相比,顺序应该颠倒。因此为了更清楚,我将在下面使用不同的命名约定。对于前向通过,层2的前一层是层1;对于向后传球,层2的前一层是层3。

最新更新