位置: 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)

  • 小规模缴纳企业所得税会计分录
  • 个人所得税纳税记录
  • 去年缴纳印花税忘记做账了怎么办呢
  • 什么是非居民个人的工资薪金
  • 支票罚金
  • 房地产企业实收资本要求
  • 增值税计算方式举例
  • 银行抵债资产怎么管理
  • 软件开发公司一般做什么
  • 出口押汇与打包押汇区别
  • 企业购买机械设备是否需要进行过户登记
  • 未开票收入开票后怎么做账
  • 发票已认证部分怎么撤销
  • 客户方流水号是什么
  • 年终奖跟13薪有什么区别
  • 简化丢失专用发票的处理流程
  • 个人借款利息收入增值税税率
  • 母公司资产转移到子公司
  • 法定盈余公积是留存收益吗
  • 购进虚假发票进项税转出的会计处理?
  • 本月做账下月认证的进项怎么做账?
  • win11怎么把默认c盘改到d盘
  • windows10如何开热点
  • vmware10怎么安装
  • 企业纳税申报的流程
  • 如何在苹果电脑上删除软件
  • PHP:oci_statement_type()的用法_Oracle函数
  • php实现的跟QQ和MSN类似的BICQ v2.0.0
  • linux用不了yum
  • 进度条js代码
  • 烟草企业亏损
  • 居民企业境外所得税抵免限额
  • 增值税发票作废了税钱退还吗
  • 离职补偿金的会计实务处理
  • 总部资产减值会考吗
  • stable diffusion webul
  • php抽奖程序源码
  • 微信小程序游戏手游排行榜
  • 基于stm32的飞行器
  • fold命令 限制文件列宽
  • 个税申报表收入额怎么填
  • phpcms v9官网
  • python中有很多包管理工具
  • 集团公司如何收管理费
  • mysql深度解析
  • 汽车修理费用会计分录
  • 同一控制下企业合并
  • mysql大分页优化
  • 代开发票可能遇到的问题是?
  • 分公司能不能作为行政处罚的主体
  • 增值税及附加税费申报表附列资料一
  • 支付利息的现金流
  • 企业零申报怎么办
  • 固定资产的修理费属于什么费用
  • 固定资产的期末余额反映固定资产原值的结余额
  • 实物投资的会计科目
  • 非公司员工可以发提成吗
  • 如何在sql server表中添加数据表格为什么没有显示
  • 安装fedora33
  • 桌面快捷方式不显示图标怎么办
  • win8开启快速启动
  • Linux配置防火墙端口
  • 最小化安装centos7怎么装图形界面
  • mac系统怎么把文件移到文件夹
  • windows102021年更新
  • win7笔记本触摸板怎么用滑轮
  • linux 使用
  • android studio 新建项目只有.idea文件
  • OpenGL super bible(5th) 学习笔记 -- 像素缓冲区对象(PBO)
  • 基于flask的开源项目
  • XML、HTML、CSS与JS的区别整理
  • Jquery针对tr td的一些实用操作方法(必看篇)
  • 安卓开发 内存
  • jQuery简单实现tab选项卡切换效果
  • python中的get方法
  • 安徽省定额发票真伪查询
  • 税控发票开票软件(金税盘版)打不开?
  • 中国税务客服工作时间
  • 零申报的企业残保金怎么申报
  • 怎样在网上申报税务流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设