数据归一化处理transforms.Normalize()
数据归一化处理transforms.Normalize()
1. 图像预处理Transforms(主要讲解数据标准化)
1.1 理解torchvision
transforms属于torchvision模块的方法,它是常见的图像预处理的方法
在这里贴上别人整理的transforms运行机制:
可以看出torchvision工具包中包含三个主要模块,主要讲解学习transforms
torchvision.transforms:常用的数据预处理方法,提升泛化能力
包括:数据中心化、数据标准化、缩放、裁剪、旋转、翻转、填充、噪声添加、灰度变换、线性变换、仿射变换、亮度、饱和度及对比度变换等
1.2 数据标准化——transforms.normalize()
功能:逐channel的对图像进行标准化(均值变为0,标准差变为1),可以加快模型的收敛
output = (input - mean) / std
mean:各通道的均值
std:各通道的标准差
inplace:是否原地操作
思考:
(1)据我所知,归一化就是要把图片3个通道中的数据整理到[-1, 1]区间。
x = (x - mean(x))/std(x)
只要输入数据集x确定了,mean(x)和std(x)也就是确定的数值了,为什么Normalize()函数还需要输入mean和std的数值呢????
(2)RGB单个通道的值是[0, 255],所以一个通道的均值应该在127附近才对。
如果Normalize()函数去计算 x = (x - mean)/std ,因为RGB是[0, 255],算出来的x就不可能落在[-1, 1]区间了。
(3)在我看的了论文代码里面是这样的:
torchvision.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
为什么就确定了这一组数值,这一组数值是怎么来的? 为什么这三个通道的均值都是小于1的值呢?
理解:
(1)针对第一个问题,mean 和 std 肯定要在normalize()之前自己先算好再传进去的,不然每次normalize()就得把所有的图片都读取一遍算这两个
(2)针对第二个问题,有两种情况
(a )如果是imagenet数据集,那么ImageNet的数据在加载的时候就已经转换成了[0, 1].
(b) 应用了torchvision.transforms.ToTensor,其作用是将数据归一化到[0,1](是将数据除以255),transforms.ToTensor()会把HWC会变成C *H *W(拓展:格式为(h,w,c),像素顺序为RGB)
(3)针对第三个问题:[0.485, 0.456, 0.406]这一组平均值是从imagenet训练集中抽样算出来的。
继续有疑问:
ToTensor 已经[0,1]为什么还要[0.485, 0.456, 0.406]?那么归一化后为什么还要接一个Normalize()呢?Normalize()是对数据按通道进行标准化,即减去均值,再除以方差
解答:
别人的解答:数据如果分布在(0,1)之间,可能实际的bias,就是神经网络的输入b会比较大,而模型初始化时b=0的,这样会导致神经网络收敛比较慢,经过Normalize后,可以加快模型的收敛速度。
因为对RGB图片而言,数据范围是[0-255]的,需要先经过ToTensor除以255归一化到[0,1]之后,再通过Normalize计算过后,将数据归一化到[-1,1]。
是否可以这样理解:
[0,1]只是范围改变了, 并没有改变分布,mean和std处理后可以让数据正态分布
数据归一化处理transforms.Normalize()相关推荐
- PyTorch数据归一化处理:transforms.Normalize及计算图像数据集的均值和方差
PyTorch数据归一化处理:transforms.Normalize及计算图像数据集的均值和方差 1.数据归一化处理:transforms.Normalize 1.1 理解torchvision 1 ...
- pytorch图片数据归一化,通常传入transforms.Normalize(mean,std,inplace=False)中的mean和std是如何获取的?
pytorch做标准化利用transforms.Normalize(mean_vals, std_vals),其中常用数据集的均值方差有: if 'coco' in args.dataset:mean ...
- 深度之眼Pytorch打卡(九):Pytorch数据预处理——预处理过程与数据标准化(transforms过程、Normalize原理、常用数据集均值标准差与数据集均值标准差计算)
前言 前段时间因为一些事情没有时间或者心情学习,现在两个多月过去了,事情结束了,心态也调整好了,所以又来接着学习Pytorch.这篇笔记主要是关于数据预处理过程.数据集标准化与数据集均值标准差计算 ...
- PyTorch学习笔记——图像处理(transforms.Normalize 归一化)
PyTorch学习笔记--图像处理 transforms.Normalize 归一化 回顾 torchvision.ToTensor 归一化 transforms.Normalize 公式 回顾 to ...
- torchvision 笔记:transforms.Normalize()
一般和transforms.ToTensor()搭配使用 作用就是先将输入归一化到(0,1)[transforms.ToTensor()],再使用公式"(x-mean)/std", ...
- 使用transforms.Normalize((0.5,), (0.5,))异常报错“Process finished with exit code -1073741676 (0xC0000094)”
目录 1 问题描述 2 EDA分析 3 解决方案 1 问题描述 今天在使用transforms.Normalize((0.5,), (0.5,))对MNIST数据集中的图像进行归一化时,程序执行到这里 ...
- transforms.ToTensor()与transforms.Normalize()函数解析
1.transforms.ToTensor()作用 ToTensor()将shape为(H, W, C)的nump.ndarray或img转为shape为(C, H, W)的tensor,其将每一个数 ...
- transforms.Compose,transforms.ToTensor(),transforms.Normalize()的含义与原理
transforms.Compose,transforms.ToTensor(),transforms.Normalize()的含义与原理 1.问题描述 问题来源于pytorch实现CNN神经网络的示 ...
- 浅谈对transforms.ToTensor()和transforms.Normalize()函数的理解
前言 在进行tensor图片数据进行视觉时,一般会进行预处理操作,这个时候就需要用到ToTensor()和Normalize()这两个函数. 提示:以下是本篇文章正文内容,下面案例可供参考 一.ToT ...
最新文章
- 客户端与服务器持续同步解析(轮询,comet,WebSocket)
- CriminalIntent项目的强大完善
- layui 给table里面的添加图标_layui中的table中toolbar自定义过程
- Azure 国际版与中国版服务列表对(2020年6月版)
- Feather包实现数据框快速读写,你值得拥有
- Java StringBuffer
- 8086简单的指令流水线_在8086微处理器中执行流水线的指令和概念的步骤
- MySQL常见面试题与答案
- iOS 10 不提示「是否允许应用访问数据」,导致应用无法使用的解决方案
- 计算机组成原理浮点数左移规则,2020考研计算机组成原理知识点:浮点数的表示和运算...
- STC15点亮WS2812灯珠(C结合汇编)
- 26.TCP/IP 详解卷1 --- Telnet 和 Rlogin : 远程登录
- checkbox:全选、全不选、单选(慕课网题目)
- mybatis源码解析
- 衡水二中2021清华北大高考成绩查询,衡水二中:把5分钟利用成2小时,清北再录取101人!...
- foo, bar ,baz
- 学习笔记:强化学习与最优控制(Chapter 2)
- 如何在Windows 8.1中“忘记”有线(或无线)网络
- UEFI+GPT+双硬盘下 搭建Windos10 和CentOS7 双系统
- CSDN英雄会上会英雄