看了许多大神的经验,做一个总结:
- 验证测试集的时候开启model.eval() 。
- 设置随机种子。
- pytorch框架中模型加载器dataLoader的属性“shuffle”置为“False”。
如果想看 具体原因 和 简单实现 可以继续往下看:
- 验证测试的时候开启model.eval() 。因为可能你的模型中含有 BatchNormalization(批归一化)或 Dropout(舍弃),如果未设置模型为eval模式,则验证时会根据每次的batch调整或Dropout还是随机去掉某些神经元,这不符合我们的要求。如果设置模型为eval后,Batch会设置全部数据的均值,Dropout会全部放开,不会随机率舍弃神经元。简单代码如下:
for epoch in num_epoch:
model.train()
...