Python 长时间训练的模型

Python 长时间训练的模型,python,performance,machine-learning,lstm,pytorch,Python,Performance,Machine Learning,Lstm,Pytorch,在使用Pytork对VGG-16模型进行卷积后,我添加了一个LSTM层。随着时间的推移,模特儿学得很好。然而,仅添加一个LSTM层(由32个LSTM单元组成)后,训练和评估过程将花费约10倍的时间 我将LSTM层添加到VGG框架中,如下所示 def make_layers(cfg, batch_norm=False): # print("Making layers!") layers = [] in_channels = 3 count=0 for v in

在使用Pytork对VGG-16模型进行卷积后,我添加了一个LSTM层。随着时间的推移,模特儿学得很好。然而,仅添加一个LSTM层(由32个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是我的自定义类,它实现了RowlTM,来自Google的Pixel RNN paper


这是一个普遍的问题吗?LSTM层通常需要很长时间来训练吗?

是的,因为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)输出。请注意,所有这三个都可以同时计算(并行化)。在RNN上下文中,这个输出序列看起来像F(1);F(F(1),2);F(F(1,2,3);;F(F(F(F(1),2),3),4)-这里,每个连续的过滤器都依赖于前一个过滤器,使其连续。希望这有点道理