【问题标题】:Model taking long time to train模型训练时间长
【发布时间】:2019-01-09 07:04:23
【问题描述】:

我使用 PyTorch 在 VGG-16 模型中进行卷积后添加了一个 LSTM 层。随着时间的推移,模​​型学习得很好。然而,在仅添加一个由 32 个 LSTM 单元组成的 LSTM 层后,训练和评估的过程需要大约 10 倍的时间。

我将 LSTM 层添加到 VGG 框架中,如下所示

def make_layers(cfg, batch_norm=False):
   # print("Making layers!")
    layers = []
    in_channels = 3
    count=0
    for v in cfg:
        count+=1
        if v == 'M':
            layers += [nn.MaxPool2d(kernel_size=2, stride=2)]
        else:
            conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1)
            if batch_norm:
                layers += [conv2d, nn.BatchNorm2d(v), nn.ReLU(inplace=True)]
            else:
                layers += [conv2d, nn.ReLU(inplace=True)]
                in_channels=v
        if count==5:
            rlstm =RLSTM(v)
            rlstm=rlstm.cuda()
            layers+=[rlstm]

RLSTM 是我的自定义类,它实现了 Google 的 Pixel RNN 论文中的 RowLSTM。

这是一个常见问题吗? LSTM 层一般只需要很长时间来训练吗?

【问题讨论】:

    标签: python performance machine-learning lstm pytorch


    【解决方案1】:

    是的,由于 LSTM(和许多其他 RNN)依赖于信息的顺序输入,因此您会损失很大一部分通常使用 CNN 获得的并行化速度提升。您可以探索其他类型的 RNN,它们利用更多可并行化的算法,但与 LSTM/GRU 相比,它们的预测性能仍然没有定论

    【讨论】:

    • 我对这整个事情还比较陌生:我了解 RNN 的顺序性,但是是什么让 CNN 与众不同,这使得它们可以并行化?
    • 假设您有序列 1 2 3 4 并且您的 CNN 是一维的,滤波器大小为 2 - 因此它将计算输入 (1,2) 上的一些滤波器操作 F; (2,3); (3,4) 导致 F(1,2); F(2,3); F(3,4) 输出。请注意,所有这 3 个都可以同时计算(并行化)。在 RNN 上下文中,这个输出序列看起来像 F(1);F(F(1),2);F(F(F(1),2),3) ; F(F(F(F(1),2),3),4) - 这里每个连续的过滤器都依赖于前一个过滤器,使其连续。希望这有点道理
    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2021-08-07
    • 2017-08-19
    • 2020-09-14
    相关资源
    最近更新 更多