描述:使用pytorch训练好的模型对数据进行预测时,将model设置为eval()模式之后,发现同样的数据每次预测时的概率值会变动。
分析:eval()可以将模型切换为 evaluation 模式,(仅仅当模型中含有Dropout和BatchNorm才起作用)。这里所说的 “模型中含有Dropout和BatchNorm ” 是指 包含在*_modules* 中(当类成员的type派生于Module时,该成员会自动划归为 _modules)。
查看源码发现,在某个成员函数里使用了 nn.Dropout ,但是 不属于 _modules 所以出现每次预测相同的数据出现不同的概率的现象。 故:使用pytorch的Dropout 或 BN 构建网络时,一定要把该神经网络层放入 _modules 否则不起作用。