PyTorch加载本地图像训练二分类器:可视化与反归一化问题
问题解决:图像显示异常与反归一化修正
1. 反归一化的正确实现
你当前的反归一化代码存在笔误:第三个均值项的分母写成了0.255,但原归一化的标准差是0.225,这是导致颜色还原错误的核心原因。正确的反归一化逻辑是:
- 反归一化均值 =
-原均值 / 原标准差 - 反归一化标准差 =
1 / 原标准差
修正后的代码:
inv_normalize = transforms.Normalize( mean=[-0.485/0.229, -0.456/0.224, -0.406/0.225], std=[1/0.229, 1/0.224, 1/0.225] )
2. 解决3×3网格重复显示的问题
出现网格重复是因为反归一化后的张量像素值可能超出[0, 1]范围(PIL图像和plt.imshow要求像素值在0-1或0-255区间内),导致显示时出现异常拉伸。解决方法是在转PIL图像前,将张量的值限制在[0, 1]区间:
修改后的图像还原与显示代码:
# 先定义反归一化变换 inv_normalize = transforms.Normalize( mean=[-0.485/0.229, -0.456/0.224, -0.406/0.225], std=[1/0.229, 1/0.224, 1/0.225] ) tensor_image = images[1] # 反归一化 + 限制像素值范围 restored_tensor = inv_normalize(tensor_image).clamp(0, 1) img = to_pil_image(restored_tensor) plt.imshow(img) plt.show()
额外注意事项
- 必须保证
inv_normalize的定义在调用它的代码之前,避免未定义错误。 - 你使用的
Resize(256)+RandomCrop(224)逻辑是合理的,不会导致显示异常,无需调整。
内容的提问来源于stack exchange,提问作者Jose Ramon
相关产品推荐
相关产品推荐

