我们将过行归一化的图片数据显示出来后会发现不是正常的图片。因此需要进行反归一化操作。
当我们需要将Normalize
之后的图片显示出来的时间,如果数字相同还好,否则很是麻烦。经过研究了一番之后写出了一个比较通用的方法。如下
比如ImageNet的数据Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])]
。进行下如操作
import matplotlib.pyplot as plt
def inverse_normalize(batch_image,batch_label = None,isShow = False,isSave = True,
saveFile="savefig.png",mean=(0.485, 0.456, 0.406),std=(0.229, 0.224, 0.225)):
fig = plt.figure(figsize=(batch_image.size(0) * 2.5, 5))
for i in range(batch_image.size(0)):
img = batch_image[i].numpy().transpose(1, 2, 0)
if (mean is not None) and (std is not None):
img = (img * std + mean) * 255
else: #如果只是经过了ToTensor()
img = img * 255
if isShow or isSave:
ax = fig.add_subplot(1, batch_image.size(0), i+1, xticks=[], yticks=[])
plt.imshow(img.astype('uint8'))
if batch_label is not None:
ax.set_title(batch_label[i].item())
if isShow and isSave:
plt.savefig(saveFile)
plt.show()
elif isSave:
plt.savefig(saveFile)
elif isShow:
plt.show()
然后调用
train_loader = torch.utils.data.DataLoader(dataset,batch_size=8,shuffle=True,num_workers=0)
loader = iter(train_loader)
image,label = loader.next()
inverse_normalize(image,label,isShow=True)
效果如下
完美还原!