python - Pytorch 中的 LSTM

标签 python neural-network deep-learning lstm pytorch

我是 PyTorch 的新手。我遇到了一些这个 GitHub repository (link to full code example)包含各种不同的示例。

还有一个关于 LSTM 的例子,这是网络类:

# RNN Model (Many-to-One)
class RNN(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, num_classes):
        super(RNN, self).__init__()
        self.hidden_size = hidden_size
        self.num_layers = num_layers
        self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
        self.fc = nn.Linear(hidden_size, num_classes)

    def forward(self, x):
        # Set initial states 
        h0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size)) 
        c0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size))

        # Forward propagate RNN
        out, _ = self.lstm(x, (h0, c0))  

        # Decode hidden state of last time step
        out = self.fc(out[:, -1, :])  
        return out

所以我的问题是关于以下几行:

h0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size)) 
c0 = Variable(torch.zeros(self.num_layers, x.size(0), self.hidden_size))

据我了解,forward() 会为每个训练示例调用。但这意味着,隐藏状态和单元状态将被重置,即在每个训练示例中替换为零矩阵。

名称 h0c0 表明这只是 t=0 时的隐藏/单元状态,但是为什么这些零矩阵被移交给 lstm每个训练样本?

即使它们在第一次调用后被忽略,也不是一个很好的解决方案。

在测试代码时,它指出 MNIST 集上的准确率为 97%,因此它似乎以这种方式工作,但对我来说没有意义。

希望有人能帮我解决这个问题。

提前致谢!

最佳答案

显然我在这方面走错了路。我混淆了隐藏单元和隐藏/单元状态。 在训练步骤中只训练 LSTM 中的隐藏单元。细胞状态和隐藏状态在每个序列的开始被重置。因此,以这种方式编程是有道理的。

对不起..

关于python - Pytorch 中的 LSTM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48831585/

相关文章:

python插值需要很长时间

python - 如何为具有S形激活的简单神经网络进行反向传播?

tensorflow - 训练神经网络来检测最频繁的输入

python - 由于简单的自定义 Keras 损失函数,准确性指标失败

python - 为什么我的 CNN 总是返回相同的结果?

Python CSV DictReader 忽略列?

python - 在python中按纬度和经度从.nc文件中提取数据

python - 使用Python客户端通过映射将不规则json加载到Elasticsearch索引中

python - 如何使用多个输入变量 LSTM 生成 1 个输出

python - 是否可以使用 CNN 对同一对象的图像 block 进行分类,但区域不同?