pytorch 笔记之 model.eval() 和 with torch.no_grad()

model.eval() 负责改变batchnorm、dropout的工作方式,如在eval()模式下,dropout是不工作的。

torch.no_grad() 负责关掉梯度计算,节省eval的时间。

只进行inference时,model.eval() 是必须使用的,否则会影响结果准确性。 而 torch.no_grad() 并不是强制的,只影响运行效率。

一般写为:

# evaluate model:
model.eval()

with torch.no_grad():
	...
	out_data = model(data)
	...

实践经验:当我训练模型时候,训练集的精度一直提高,但是验证集和瞎猜一样,我以为可能是过拟合?尝试了精简模型架构,但是依旧如此。这明显不是过拟合问题,最后我发现自己的验证集生成错误了。

posted @ 2022-12-20 00:29  cold_moon  阅读(654)  评论(0编辑  收藏  举报