在使用net.eval( )和with torch_no_grad( )时,发现网上有的例子只使用了一个,有些两个都用了,我之前也认为这两个的作用一样,后来发现最好是两个都用。
with torch_no_grad( ):数据不需要梯度计算,即不会进行反相传播;
net.eval( ):不加的话即使没有训练输入数据也会改变权值,因为这是禁止forward过程对参数造成的影响;例如禁止dropout或者因为测试集和训练集的样本分布不一样,会有batch normalization 所带来的影响。