首页 > 其他分享 >pix2pix模型测试时不使用model.eval()

pix2pix模型测试时不使用model.eval()

时间:2024-10-17 18:31:52浏览次数:12  
标签:BN torch pix2pix eval model grad

目录

pix2pix特殊之处

pix2pix模型在测试时与众不同的特点:
1、使用dropout,引入随机性,否则容易无论什么输入都生成一样的图
2、使用Batch Normalization(BN),并且用的是test数据集batch计算统计量(这一点也比较合理,因为训练集和测试集的分布不一样,再用训练集上得到的统计量不合适)。此外,由于pix2pix的batch_size=1,BN实际上就是Instance Normalization

理论基础:model.eval()、model.train()、with torch.no_grad()

model.eval()、model.train()

两者的区别在于dropout层和BN层
model.train():dropout层会按照设定的参数p,设置保留激活单元的概率(保留概率=p)。BN层会继续计算数据的mean和var等参数并更新
model.eval():dropout层会让所有的激活单元都通过。BN层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值。此模式不影响各层gradient的计算,即gradient计算和存储与training模式一样,只是不进行反向传播(back probagation)

with torch.no_grad()

with torch.no_grad()用于停止autograd模块的工作,以起到加速和节省显存的作用(可以跑更大的batch)。它的作用是将该with语句包裹起来的部分停止梯度的更新,从而节省了GPU算力和显存,但是并不会影响dropout和BN层

实际操作

在test.py中省去model.eval()。而torch.no_grad()照旧使用

参考资料

https://blog.csdn.net/qq_38410428/article/details/101102075
https://zhuanlan.zhihu.com/p/346233543

标签:BN,torch,pix2pix,eval,model,grad
From: https://www.cnblogs.com/xjl-ultrasound/p/18472871

相关文章