模型训练时间过长

我在使用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层训练时间都很长吗?


回答:

是的,因为LSTM(以及许多其他RNN)依赖于信息的顺序输入,你会失去CNN通常拥有的很大一部分并行化加速。你可以探索其他类型的RNN,它们利用更多可并行化的算法,但与LSTM/GRU相比,它们的预测性能的评判仍未有定论。

Related Posts

神经网络反向传播代码不工作

我需要编写一个简单的由1个输出节点、1个包含3个节点的…

值错误:y 包含先前未见过的标签:

我使用了 决策树分类器,我想将我的 输入 作为 字符串…

使用不平衡数据集进行特征选择时遇到的问题

我正在使用不平衡数据集(54:38:7%)进行特征选择…

广义随机森林/因果森林在Python上的应用

我在寻找Python上的广义随机森林/因果森林算法,但…

如何用PyTorch仅用标量损失来训练神经网络?

假设我们有一个神经网络,我们希望它能根据输入预测三个值…

什么是RNN中间隐藏状态的良好用途?

我已经以三种不同的方式使用了RNN/LSTM: 多对多…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注