项目场景:
在使用DAGAN时,组测试和单张图片测试有较大差别。
问题描述:
在训练和测试时都是用了如下代码:
# train
generator=UNet()
# test
generator=UNet()
原因分析:
网络中定义了BN层,BN层在训练过程中,会将一个Batch的中的数据转变成正太分布,在推理过程中使用训练过程中的参数对数据进行处理,然而网络并不知道你是在训练还是测试阶段。
解决方案:
更改后
# train
generator=UNet().train()
# test
generator=UNet().eval()
成功!飒爽下班!!
新问题:
在torch.no_gard
下面,用model.eval()
会影响下一个epoch的loss。
非常奇怪,问题待解决。
参考
感谢大佬们的经验:
https://blog.csdn.net/weixin_40100431/article/details/84349470
https://blog.csdn.net/iammelon/article/details/89928531
BN类的定义见pytorch中文参考文档:
https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch-nn/