Neural network Pytorch:从批处理加载检查点,而无需再次迭代数据集

Neural network Pytorch:从批处理加载检查点,而无需再次迭代数据集,neural-network,pytorch,Neural Network,Pytorch,我需要能够从批处理加载,而不是从历元检查点加载。我知道这不是最优的,但因为我只有有限的训练时间,我的训练才会被打断(谷歌colab免费版),我需要能够从它停止的批次或该批次周围加载 我还想再次迭代所有数据,但继续使用模型尚未看到的数据 我目前的方法不起作用: def save_checkpoint(state, file=checkpoint_file): torch.save(state, file) def load_checkpoint(checkpoint): model.lo

我需要能够从批处理加载,而不是从历元检查点加载。我知道这不是最优的,但因为我只有有限的训练时间,我的训练才会被打断(谷歌colab免费版),我需要能够从它停止的批次或该批次周围加载

我还想再次迭代所有数据,但继续使用模型尚未看到的数据

我目前的方法不起作用:

def save_checkpoint(state, file=checkpoint_file):
  torch.save(state, file)

def load_checkpoint(checkpoint):
  model.load_state_dict(checkpoint['state_dict'])
  optimizer.load_state_dict(checkpoint['optimizer'])
  train_loss = checkpoint['train_loss']
  val_loss = checkpoint['val_loss']
  epoch = checkpoint['epoch']
  step = checkpoint['step']
  batch = checkpoint['batch']
  return model, optimizer, train_loss, val_loss, epoch, step, batch
虽然它确实从停止的位置加载权重,但它会再次迭代所有数据

此外,我是否需要捕获
列车损失
车辆损失
?无论是否包含它们,我都看不出输出的损失有什么不同。因此,我假设它已经包含在
model.load\u state\u dict
(?)

我假设捕获步骤和批处理不会以这种方式工作,实际上我需要在我的
类数据集中包含某种索引跟踪器?我在
数据集
类中已经有了它

   def __getitem__(self, idx):
    question = self.data_qs[idx]
    answer1 = self.data_a1s[idx]
    answer2 = self.data_a2s[idx]
    target = self.targets[idx]

那么,这是否有用呢?

您可以通过创建一个带有属性
self.start\u index=step*batch
的自定义数据集类来实现您的目标,并且在
函数中,新的索引应该是
(self.start\u index+idx)%len(self.data\u qs)
如果您使用
shuffle=False
创建数据加载器,那么这些技巧将起作用

此外,使用shuffle=True
可以维护索引映射器并需要进行验证