目录
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