这是最佳实践,使用起来更直观
h
或(通常称为
output
states
dynamic_rnn
看看为什么会这样。
这说明你是对的,事实上没有什么不同。我不知道为什么
grad_fn
import torch
from torch import nn
lstm = nn.LSTM(10, 5, batch_first=True)
state = (torch.rand(1, 1, 5), torch.rand(1, 1, 5))
inp = torch.rand(1, 1, 10)
h, states = lstm(inp, state)
param = next(lstm.parameters())
l1 = h.sum()
l1.backward(retain_graph=True)
g1 = param.grad.clone()
param.grad.zero_()
l2 = states[0].sum()
l2.backward(retain_graph=True)
g2 = param.grad.clone()
print((g1 == g2).all()) # 1