【发布时间】:2021-07-02 05:48:51
【问题描述】:
我下面有一个简单的rnn代码。
rnn = nn.RNN(1, 1, 1, bias = False, batch_first = True)
t = torch.ones(size = (1, 2, 1))
output, hidden = rnn(t)
print(rnn.weight_ih_l0)
print(rnn.weight_hh_l0)
print(output)
print(hidden)
# Outputs
Parameter containing:
tensor([[0.7199]], requires_grad=True)
Parameter containing:
tensor([[0.4698]], requires_grad=True)
tensor([[[0.6168],
[0.7656]]], grad_fn=<TransposeBackward1>)
tensor([[[0.7656]]], grad_fn=<StackBackward>)
tensor([[[0.7656]]], grad_fn=<StackBackward>)
我对 PyTorch 文档的理解是,上面的输出是隐藏状态。
所以,我尝试使用以下手动计算输出
hidden_state1 = torch.tanh(t[0][0] * rnn.weight_ih_l0)
print(hidden_state1)
hidden_state2 = torch.tanh(t[0][1] * rnn.weight_ih_l0 + hidden_state1 * rnn.weight_hh_l0)
print(hidden_state2)
tensor([[0.6168]], grad_fn=<TanhBackward>)
tensor([[0.7656]], grad_fn=<TanhBackward>)
结果是正确的。 hidden_state1 和 hidden_state2 匹配输出。
难道不应该将 hidden_states 与输出权重相乘得到输出吗?
我检查了从隐藏状态连接到输出的权重。但根本没有权重。
如果 rnn 的目标是只计算隐藏状态,谁能告诉我如何得到输出?
【问题讨论】:
-
最后的隐藏状态不可以算“输出”吗?
标签: pytorch recurrent-neural-network