deep-learning - PyTorch GRU 中隐藏状态的层顺序返回

标签 deep-learning pytorch recurrent-neural-network tensor gated-recurrent-unit

这是我正在查看的 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] ?

    如果是双向的,如何进行切片以获得两个方向上GRU的最后一个隐藏层状态?

    最佳答案

    文档 nn.GRU很清楚这一点。这是一个更明确的例子:
    对于单向 GRU/LSTM(具有多个隐藏层):output - 将包含所有时间步的所有输出特征 th_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 的输出并计算最终结果。
    因此,以相同的顺序相应地返回结果(即隐藏状态)是自然而直观的。

    关于deep-learning - PyTorch GRU 中隐藏状态的层顺序返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54242123/

    相关文章:

    python - 对角化+可训练的自定义 Tensorflow 层

    python - PyTorch 中的 `inplace=True` 激活仅对推理模式有意义吗?

    python - 值错误 : Input 0 is incompatible with layer lstm_14: expected ndim=3, 发现 ndim=2

    pytorch - 如何使用 pytorch-lightning 将模型权重保存到 mlflow 跟踪服务器?

    python - 通过计算雅可比行列式有效地使用 PyTorch 的 autograd 与张量

    machine-learning - 使用循环神经网络解决时间序列任务

    python - 循环神经网络 (LSTM) 的任意长度输入/输出

    machine-learning - 为什么随着我逐渐添加更多训练数据,训练和测试损失都会减少?

    tensorflow - 当前一层中 mask_zero=True 时,由于连接层,Keras 图像字幕模型无法编译

    python - 为什么我的 tensorflow 模型输出在 x 个时期后变成 NaN?