位置: IT常识 - 正文

【Pytorch基础知识】数据的归一化和反归一化(pytorch基本操作)

编辑:rootadmin
【Pytorch基础知识】数据的归一化和反归一化

推荐整理分享【Pytorch基础知识】数据的归一化和反归一化(pytorch基本操作),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:学pytorch的基础,pytorch基本操作,pytorch入门到进阶,pytorch入门,pytorch基础教程,pytorch零基础,pytorch基础教程,pytorch详解,内容如对您有帮助,希望把文章链接给更多的朋友!

一张正常的图,或者说是人眼习惯的图是这样的:

但是,为了神经网络更快收敛,我们在深度学习网络过程中通常需要将读取的图片转为tensor并归一化(此处的归一化指transforms.Normalize()操作)输入到网络中进行系列操作。

如果将转成的tensor再直接转为图片,就会变成下图,和我们眼睛看到是不一样感觉。

这是因为,将图片转为tensor并归一化,tensor之中会有负值,和我们正常看到的是不一样的,如果不进行反归一化到 [0,1],就会变成下图,会觉得变扭。

我们正常看到的图片tensor是[0,255]或者[0,1]

解释:transforms.Normalize()归一化后的图像,满足均值为0方差为1,被限定在一定的数值内,一般的数值为[-1,1]。

这个过程中,我们需要进行如下操作,才能把图片转为tensor操作再转为图片(人眼习惯的)。这里的tensor操作是transforms系列操作。

【Pytorch基础知识】数据的归一化和反归一化(pytorch基本操作)

归一化的目的:使得预处理的数据被限定在一定的范围内,从而消除奇异样本数据导致的不良影响。数据归一化处理后,可以加快梯度下降求最优解的速度,且有可能提高精度(如KNN)。

反归一化的目的:为了还原原来人眼可以识别的图。

归一化

一幅图片的格式为【批数据的数量× 通道数× 高× 宽】:

接下来开始计算mean 和 std: 

nb_samples = 0#创建3维的空列表channel_mean = torch.zeros(3)channel_std = torch.zeros(3)print(image.shape)N, C, H, W = image.shape[:4]image = image.view(N, C, -1) #将w,h维度的数据展平,为batch,channel,data,然后对三个维度上的数分别求和和标准差print(image.shape)#展平后,w,h属于第二维度,对他们求平均,sum(0)为将同一纬度的数据累加channel_mean += image.mean(2).sum(0) #展平后,w,h属于第二维度,对他们求标准差,sum(0)为将同一纬度的数据累加channel_std += image.std(2).sum(0)#获取所有batch的数据,这里为1nb_samples += N#获取同一batch的均值和标准差channel_mean /= nb_sampleschannel_std /= nb_samplesprint(channel_mean, channel_std)

然后利用transforms.Normalize 进行转换:

normalizer = transforms.Normalize(mean=channel_mean, std=channel_std)# 归一化后得到可处理的值data = normalizer(image)反归一化

根据归一化计算得到的mean和std,我们可以反推出反归一化的 mean 和 std,从而利用 transforms.Normalize 进行转换,计算方法如下:

MEAN是指归一化时计算出来的均值,de_MEAN是计算出来反归一化的均值,后面需要用。

综合上面的讲解及代码,整合最后的代码为下:

# 定义一个image图像,torch.Size([1, 3, 319, 256])image = torch.rand([1,3,319,256])# 计算原图的 mean 和stdnb_samples = 0#创建3维的空列表channel_mean = torch.zeros(3)channel_std = torch.zeros(3)print(image.shape)N, C, H, W = image.shape[:4]#将w,h维度的数据展平,为batch,channel,data,然后对三个维度上的数分别求和和标准差image = image.view(N, C, -1) print(image.shape)#展平后,w,h属于第二维度,对他们求平均,sum(0)为将同一纬度的数据累加channel_mean += image.mean(2).sum(0) #展平后,w,h属于第二维度,对他们求标准差,sum(0)为将同一纬度的数据累加channel_std += image.std(2).sum(0)#获取所有batch的数据,这里为1nb_samples += N#获取同一batch的均值和标准差channel_mean /= nb_sampleschannel_std /= nb_samplesprint(channel_mean, channel_std)# 这是归一化的 mean 和std channel_mean = torch.tensor([-0.5321, -0.8102, -0.5532])channel_std = torch.tensor([1.2582, 1.0009, 0.9211])# 这是反归一化的 mean 和std MEAN = [-mean/std for mean, std in zip(channel_mean, channel_std)]STD = [1/std for std in channel_std]# 归一化和反归一化生成器normalizer = transforms.Normalize(mean=channel_mean, std=channel_std)denormalizer = transforms.Normalize(mean=MEAN, std=STD)# 归一化得到可处理的值data = normalizer(image)# 反归一化得到原图image2 = denormalizer(data)

image ≈ image2

因为浮点数计算有误差,所以不会完全一样,但是问题不大~

 这样就可以得到tensor转换后的原图了。

好了,大功告成,完结撒花!

欢迎关注、点赞、收藏、评论、分享给好友,一起学习有趣的新知识!!! 

本文链接地址:https://www.jiuchutong.com/zhishi/297335.html 转载请保留说明!

上一篇:原生js获取元素的各种位置(大全)(原生js获取元素高度)

下一篇:vue中Number方法将字符串转换为数字(vue的number)

  • 等线补交以前年度附加税会计分录
  • 行政单位固定资产管理制度
  • 发票专用章和财务章区别
  • 自查补税申报表
  • 延期利息增值税可以抵扣吗
  • 小规模纳税人开具增值税专用发票
  • 退回多打货款分录
  • 长期股权投资的4个明细科目
  • 股权转让如何避免印花税
  • 经营租赁租赁费会计分录
  • 汽修店的服务项目有哪些
  • 营改增后房产土地作价入股该如何做税务处理?
  • 折旧和摊销可以没有吗
  • 增值税与实际缴纳不符
  • 公司出租房屋交印花税吗
  • 减免所得税额和抵免所得税额的区别
  • 滴滴客运服务费免税
  • 汇总纳税申报期
  • 分类所得申报要申报吗
  • 弥补以前年度亏损从哪里取数
  • 什么叫变动费用
  • 小规模增值税附加税
  • 专票小数点后两位没有显示出来可以认证吗
  • 房地产土地增值税计税依据
  • 出口退税附加税计税依据
  • 公司原因领不了失业保险要赔偿吗
  • 购入电脑一次性扣除
  • 没有发票只有收据可以报销吗
  • 补交社保如何做账务处理
  • 预收预付不一致什么意思
  • php基础入门教程
  • 存货怎么预估
  • 期初留存收益包括
  • js编写一个标准的单例模式类
  • yii2框架从入门到精通
  • framework启动
  • 小微企业应纳税所得额300万所得税
  • 短期借款产生的利息进入总账吗
  • 项目辅材计入什么科目
  • 所得税申报表应怎么填
  • thinkphp log
  • 股东分红的会计处理方法
  • 软考软件设计师考试时间
  • Js中操作数组的方法
  • 净化器 ccm
  • 为什么开发票能抵税
  • asp和asp net
  • 税前补发补扣
  • 银行汇票是什么意思易懂
  • 个人独资企业最新税收政策
  • 小规模加工企业加工费会计分录
  • mysql如何调优
  • 房地产开发的土地分割
  • 规模以上企业纳税要求
  • 存货取得长期股权投资
  • 固定资产更新改造被替换的旧部件残值收入
  • 支付给其他公司的借款属于什么现金流
  • 销售佣金?
  • 车辆保险证明怎么开
  • 代办旅行社经营许可证
  • 税务会计应该设什么岗位
  • 商业批发企业有哪些
  • mysql怎么复制粘贴语句
  • sqlserver 触发器 redis
  • 预装win10
  • win7系统u盘打不开怎么办
  • linux怎么切到桌面
  • 禅道界面
  • linux查看磁盘io负载
  • win8宽带错误651最简单解决方法
  • 红石数据
  • perl hex
  • cocos2dx运行原理
  • 蓝牙模块手机程序
  • react navigate
  • jQuery插件封装时如要实现链式编程,需要
  • 如何查询车辆购置税
  • 深圳地方税务局电话
  • 山西国税电子税务局电话
  • 现任新疆兵团政治部主任
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设