Deep learning 利用Pytork中的LSTM加速培训RNN

Deep learning 利用Pytork中的LSTM加速培训RNN,deep-learning,pytorch,lstm,recurrent-neural-network,dataloader,Deep Learning,Pytorch,Lstm,Recurrent Neural Network,Dataloader,我正在尝试为能源需求预测培训LSTM,但时间太长。我不明白为什么,因为模型看起来“简单”,没有太多数据。可能是因为我没有使用数据加载器?既然我有一个序列,我如何将它与RNN一起使用 完整的代码在Colab中: 需要改进的有趣部分可能是: for seq, y_train in train_data: optimizer.zero_grad() model.hidden = (torch.zeros(1,1,model.hidden_size),

我正在尝试为能源需求预测培训LSTM,但时间太长。我不明白为什么,因为模型看起来“简单”,没有太多数据。可能是因为我没有使用数据加载器?既然我有一个序列,我如何将它与RNN一起使用

完整的代码在Colab中:

需要改进的有趣部分可能是:

for seq, y_train in train_data:
    optimizer.zero_grad()
    model.hidden = (torch.zeros(1,1,model.hidden_size),
                    torch.zeros(1,1,model.hidden_size))
    y_pred = model(seq)
    loss = criterion(y_pred, y_train)
    loss.backward()
    optimizer.step()

提前感谢所有帮助我的人。

如果您想加快培训过程,必须为每个培训的模型提供更多数据。就我而言,我只提供了一批。解决这个问题的最好方法是使用数据加载器

完整的Colab解决方案可在以下链接中找到:


如果希望加快培训过程,则必须为每个培训的模型提供更多数据。就我而言,我只提供了一批。解决这个问题的最好方法是使用数据加载器

完整的Colab解决方案可在以下链接中找到:


速度慢可能是因为你没有在GPU上进行训练。谢谢@girishdatarayhegde,这是真的,但数据集足够小,其他模型运行速度更快,更复杂。你说的“更复杂”模型是什么意思?我的意思是,在你们这方面,哪些型号比RNN快?原因,RNN if不是最复杂的神经模型,但由于其重复性,肯定属于此类“复杂”模型@你说的太长是什么意思?一个历元的时间是多少?感谢@inversed_index,问题在于批量加载。我每次训练只通过了一批。我将编写解决方案。速度很慢,可能是因为你没有在GPU上训练。谢谢@girishdatarayhegde,这是真的,但数据集足够小,其他模型运行速度更快,更复杂。你说的“更复杂”模型是什么意思?我的意思是,在你们这方面,哪些型号比RNN快?原因,RNN if不是最复杂的神经模型,但由于其重复性,肯定属于此类“复杂”模型@你说的太长是什么意思?一个历元的时间是多少?感谢@inversed_index,问题在于批量加载。每次培训我只通过了一批。我将编写解决方案。
# This is to create the Dataset
from torch.utils.data import Dataset, DataLoader

class DemandDataset(Dataset):
    def __init__(self, X_train, y_train):
        self.X_train = X_train
        self.y_train = y_train

    def __len__(self):
        return len(self.y_train)

    def __getitem__(self, idx):
        data = self.X_train[idx]
        labels = self.y_train[idx]
        return data, labels

#This is to convert from typical RNN sequences
sq_0 =[]
y_0 =[]
for seq, y_train in train_data:
  sq_0.append(seq)
  y_0.append(y_train)

dataset=DemandDataset(sq_0,y_0)
dataloader = DataLoader(dataset, batch_size=20)

epochs = 30
t = 50

for i in range(epochs):
    print("New epoch")    
  
    for data,label in dataloader:
         
        optimizer.zero_grad()
        model.hidden = (torch.zeros(1,1,model.hidden_size),
                        torch.zeros(1,1,model.hidden_size))
        
        y_pred = model(seq)
        
        loss = criterion(y_pred, label)
        loss.backward()
        optimizer.step()
        
   
    print(f'Epoch: {i+1:2} Loss: {loss.item():10.8f}')
    
   
    preds = train_set[-window_size:].tolist()

    for f in range(t):  
        seq = torch.FloatTensor(preds[-window_size:])
        with torch.no_grad():
            model.hidden = (torch.zeros(1,1,model.hidden_size),
                            torch.zeros(1,1,model.hidden_size))
            preds.append(model(seq).item())
            
    loss = criterion(torch.tensor(preds[-window_size:]),y[-t:])