我在使用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相比,它们的预测性能的评判仍未有定论。