Neural network Pytorch:从批处理加载检查点,而无需再次迭代数据集
我需要能够从批处理加载,而不是从历元检查点加载。我知道这不是最优的,但因为我只有有限的训练时间,我的训练才会被打断(谷歌colab免费版),我需要能够从它停止的批次或该批次周围加载 我还想再次迭代所有数据,但继续使用模型尚未看到的数据 我目前的方法不起作用: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
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
可以维护索引映射器并需要进行验证