model.eval()和loss.backward(retain_graph = True)

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值