调参调了很久,知道最近才发现自己的训练过程是错误的,我一直把验证集丢到模型里面去训练(手动蠢死)。不过还好,错处不大。不过为了防止你们也犯这样的错误,先贴上一张训练集,验证集和测试集在训练过程中的作用表格吧!
所以现在的需求就是,在训练过程中最优的模型来测试测试集,并在测试前使用验证集训练一次模型。
起初是直接使用
if val_loss < self.val_optimal_loss:
self.optimal_model=self.model
结果发现最优的模型并没有被保存下来。
然后去检索 了一些深拷贝和浅拷贝的东西,写下来下面的代码。
if val_loss < self.val_optimal_loss:
self.optimal_model = copy.deepcopy(model)
结果发现模型是拷贝下来了,但是使用self.optimal_model进行训练的时候却没办法训练。(可能是因为这个model是我自定义的训练class的原因,不过这里就不深究了)
最后还是采用了
if val_loss < self.val_optimal_loss: # 更新最小的loss值
self.val_optimal_loss = val_loss
torch.save(self.model.manhattan_lstm.state_dict(), 'model.pth')
self.model.manhattan_lstm.load_state_dict(torch.load("model.pth"))
如此,并成功完成了该需求。