从零开始的踩坑生活(1):PyTorch中有关BN层训练和测试的区别

2022-10-12 12:25:44

项目场景:

在使用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/

  • 作者:阿黄不会编程
  • 原文链接:https://blog.csdn.net/huangjiahao0711/article/details/110138955
    更新时间:2022-10-12 12:25:44