model.eval()和loss.backward

model.eval()和loss.backward,第1张

1:model.eval()会固定网络的nn.BN层和nn.Dropout层,nn.BN层在train的时候针对每一个batch会计算一次均值方差,然后最后归纳整个训练集的均值方差,所以在test的时候就不能再让BN层的均值方差发生变化了。


参考文章:(1条消息) Pytorch model.eval()的作用_嘿,兄弟,好久不见的博客-CSDN博客_model.eval()作用

2:loss.backward(retain_graph = True),首先,forward一次会建立一个计算图,正常backward()会释放掉forward()过程所建立的计算图。


而在backward中指定retain_graph = True以后,则每次backward不会释放当次forward()产生的计算图,这样会导致内存中计算图越来越多,使得训练会越来越慢。


另外为了保证每次backward()之后,梯度不会积累,在backward之前一般会采取optmizer.zero_grad()的方法。


参考自:

为什么向后设置(retain_graph = True)会占用大量GPU内存?-python黑洞网 (pythonheidong.com)(1条消息) Pytorch中backward(retain_graph=True)的 retain_graph参数解释_今 晚 打 老 虎的博客-CSDN博客_retain_graph=true为什么向后设置(retain_graph = True)会占用大量GPU内存?-python黑洞网 (pythonheidong.com)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/578966.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存