当前位置: 代码迷 >> 综合 >> Pytorch中的model.train()和model.eval()——虽小但不能忽略
  详细解决方案

Pytorch中的model.train()和model.eval()——虽小但不能忽略

热度:96   发布时间:2023-11-27 01:12:39.0

背景【可以忽略】

最近,我花了一个月的时间在解决这样一个问题——“在代码的Train部分,每个一个epoch结束,我会使用第三方的数据集【例如:SOD数据集】进行test。而在代码的Test部分,我加载Train得到的模型权重,然后在对同一个第三方数据集进行test。两者结果不一致!!!!!

都说数据是不会骗人的,所以肯定是我的原因造成的。我从代码的加载,预训练。。。。。整个流程进行了一一排查,发现结果竟是因为这个。。。。。。。。。。。。。。。。。

model.train()和model.eval()

model.train() :启用 BatchNormalization 和 Dropout

model.eval() :不启用 BatchNormalization 和 Dropout

两个函数,第一个是在train之中调用,另一个在test时调用。特别注意,一旦test时就需要使用model.eval()。因为它可以阻止BN和Dropout操作,从而使网络中所有的参数都一致。

  相关解决方案