Pytorch中Unormalize变换的实现
在torchvsion库中,transforms下边有个Normalize变换方法,用于图像数据的归一化:
class torchvision.transforms.Normalize(mean, std)
给定均值:(R,G,B)
方差:(R,G,B)
,将会把Tensor
正则化。即:Normalized_image=(image-mean)/std
。
normalize变换主要用于Imagenet数据集的训练中作为数据输入的归一化。
这就导致在预测图像后,进行预测标签和图像的检查时,图像不能正常显示。需要进行反归一化变换才可以。
但是torchvision没有给Unormalize方法,下面的代码实现了UnNormalize变换:
class UnNormalize: #restore from T.Normalize #反归一化 def __init__(self,mean=(0.485, 0.456, 0.406),std= (0.229, 0.224, 0.225)): self.mean=tc.tensor(mean).view((1,-1,1,1)) self.std=tc.tensor(std).view((1,-1,1,1)) def __call__(self,x): x=(x*self.std)+self.mean return tc.clip(x,0,None)
用法和normalize相同,二者是正反变换,使用方法如下:
import torch as tc from torchvision import transforms as T t=tc.rand((1,3,24,24)) t1=T.Normalize((1,2,3),(3,2,1))(t) #归一化 tt=UnNormalize((1,2,3),(3,2,1))(t1) #反归一化 (t-tt).abs().sum() #结果比较
输出是:tensor(5.3823e-05)
可见反变换后的结果与原结果机乎相同,方法正确。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix