PyTorch GRU 中隐藏状态的层顺序返回
Posted
技术标签:
【中文标题】PyTorch GRU 中隐藏状态的层顺序返回【英文标题】:Order of layers in hidden states in PyTorch GRU return 【发布时间】:2019-06-12 00:27:15 【问题描述】:这是我正在查看的 API,https://pytorch.org/docs/stable/nn.html#gru
它输出:
output
形状 (seq_len, batch, num_directions * hidden_size)
h_n
形状 (num_layers * num_directions, batch, hidden_size)
对于多于一层的GRU,不知如何获取最后一层的隐藏状态,应该是h_n[0]
还是h_n[-1]
?
如果是双向的,如何分片得到GRUs在两个方向上的最后隐藏层状态?
【问题讨论】:
我认为是h_n[-1]
。刚刚确认了自己
【参考方案1】:
文档nn.GRU 对此很清楚。这是一个更明确的示例:
对于单向 GRU/LSTM(具有多个隐藏层):
output
- 将包含所有时间步的所有输出特征t
h_n
- 将返回所有层的隐藏状态(在最后一个时间步)。
要获得最后一个隐藏层和最后一个时间步的隐藏状态,使用:
first_hidden_layer_last_timestep = h_n[0]
last_hidden_layer_last_timestep = h_n[-1]
其中n
是序列长度。
这是因为描述说:
num_layers – 循环层数。例如,设置num_layers=2
意味着将两个 GRU 堆叠在一起形成一个堆叠的 GRU,第二个 GRU 接收第一个 GRU 的输出并计算最终结果。
因此,以相同的顺序相应地返回结果(即隐藏状态)是自然而直观的。
【讨论】:
我想你在想的是output
,“包含来自 GRU 最后一层的输出特征 h_t 的张量”。 h_n
只包含所有隐藏层在最后一个时间步的隐藏状态。注意这些张量的尺寸。
你说得对,我的意思是写输出;我现在已经更新了答案。谢谢指正!
这对我来说并不明显。如果不是另一种方式,你怎么办,第一层是例如h_n[-1]
?
我根据文档中的输入参数描述添加了一些解释。 +1
直觉可能是错误的,我自己确认了,因为最后一层 GRU hidden 的输出应该等于最后一步的output
以上是关于PyTorch GRU 中隐藏状态的层顺序返回的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Pytorch LSTM/GRU/RNN 中指定不同的层大小