深入理解 transforms.Normalize():PyTorch 图像预处理中的关键一步
深入理解 transforms.Normalize()
:PyTorch 图像预处理中的关键一步
在使用 PyTorch 进行图像分类、目标检测等深度学习任务时,我们常常会在数据预处理部分看到如下代码:
python复制编辑transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
])
其中的 transforms.Normalize()
是什么?为什么我们要对图像进行归一化?本文将深入讲解这个操作的原理、用途以及如何正确使用。
一、什么是 transforms.Normalize()
?
transforms.Normalize(mean, std)
是 torchvision.transforms
模块提供的一个图像预处理方法,用于对图像的每个通道(例如 RGB)进行标准化处理。具体公式如下:
其中:
input
:原始图像张量(已经通过ToTensor()
转换为 [C, H, W] 格式,值域在 [0, 1])mean
:每个通道的均值std
:每个通道的标准差
二、为什么要使用 Normalize()
?
在深度学习中,输入数据的标准化(Normalization)是一种常见的预处理手段,原因如下:
-
加速模型收敛
标准化可以让输入数据在各个维度上具有相似的分布,避免梯度在某些维度上过大或过小,有助于模型更快收敛。 -
提高模型性能
统一的数据分布让模型更容易学习规律,通常能提高准确率或减少损失。 -
与预训练模型保持一致
如果使用预训练模型(如 ResNet、VGG 等),正确的归一化参数是必须的。例如,ImageNet 预训练模型的标准化参数为:transforms.Normalize(mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225])
三、实战举例
示例 1:标准化 RGB 图像
from torchvision import transforms
from PIL import Imagetransform = transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean=[0.5, 0.5, 0.5], # 每个通道减去0.5std=[0.5, 0.5, 0.5]) # 再除以0.5
])img = Image.open('example.jpg') # 假设是 RGB 图像
img_tensor = transform(img) # 处理后的张量范围是 [-1, 1]
💡 注意:
ToTensor()
会将像素值从 [0, 255] 变为 [0.0, 1.0],而Normalize()
会进一步变为 [-1, 1]。
四、如何选择 mean 和 std?
通常有三种选择方式:
-
使用通用值
- 如果不讲究数据分布,一般用
[0.5, 0.5, 0.5]
的均值和标准差即可(适用于轻量级模型或小数据集)。
- 如果不讲究数据分布,一般用
-
使用 ImageNet 预训练模型的值
-
如果使用预训练模型(如
torchvision.models
提供的 ResNet),请使用以下标准值:mean = [0.485, 0.456, 0.406] std = [0.229, 0.224, 0.225]
-
-
根据自己的数据计算
-
对于自定义数据集,建议先用一部分数据统计均值和标准差,更符合实际数据分布。
-
示例代码(简化):
import torch from torchvision import datasets, transformsdataset = datasets.ImageFolder('your_data_path', transform=transforms.ToTensor()) loader = torch.utils.data.DataLoader(dataset, batch_size=64, shuffle=False)mean = 0. std = 0. total = 0for images, _ in loader:batch_samples = images.size(0)images = images.view(batch_samples, images.size(1), -1)mean += images.mean(2).sum(0)std += images.std(2).sum(0)total += batch_samplesmean /= total std /= total print(mean, std)
-
五、总结
内容 | 说明 |
---|---|
作用 | 对图像进行标准化,减均值、除以标准差 |
位置 | 一般放在 ToTensor() 之后 |
输入要求 | 形状为 [C, H, W] ,像素值范围 [0, 1] |
好处 | 加快模型收敛,提高精度,与预训练模型匹配 |
建议 | 预训练模型用其标准值,自定义数据集建议自己计算 |
📌 最后
掌握 transforms.Normalize()
的使用,对于训练一个稳定、高效的模型至关重要。希望本文能帮助你理解其背后的数学原理和实践方法。
如果你喜欢这篇文章,欢迎点赞、评论或关注我分享更多 PyTorch 深度学习干货!
相关文章:

深入理解 transforms.Normalize():PyTorch 图像预处理中的关键一步
深入理解 transforms.Normalize():PyTorch 图像预处理中的关键一步 在使用 PyTorch 进行图像分类、目标检测等深度学习任务时,我们常常会在数据预处理部分看到如下代码: python复制编辑transform transforms.Compose([transforms.ToTensor…...
leetcode 2434. 使用机器人打印字典序最小的字符串 中等
给你一个字符串 s 和一个机器人,机器人当前有一个空字符串 t 。执行以下操作之一,直到 s 和 t 都变成空字符串: 删除字符串 s 的 第一个 字符,并将该字符给机器人。机器人把这个字符添加到 t 的尾部。删除字符串 t 的 最后一个 字…...

爆炸仿真的学习日志
今天学习了一下【Workbench LS-DYNA中炸药在空气中爆炸的案例-哔哩哔哩】 https://b23.tv/kmXlN29 一开始 如果你的 ANSYS Workbench 工具箱(Toolbox)里 只有 SPEOS,即使尝试了 右键刷新、重置视图、显示全部 等方法仍然没有其他分析系统&a…...
【Fiddler抓取手机数据包】
Fiddler抓取手机数据包的配置方法 确保电脑和手机在同一局域网 电脑和手机需连接同一Wi-Fi网络。可通过电脑命令行输入ipconfig查看电脑的本地IP地址(IPv4地址),手机需能ping通该IP。 配置Fiddler允许远程连接 打开Fiddler,进入…...

[华为eNSP] OSPF综合实验
目录 配置流程 画出拓扑图、标注重要接口IP 配置客户端IP 配置服务端IP 配置服务器服务 配置路由器基本信息:名称和接口IP 配置路由器ospf协议 测试结果 通过配置OSPF路由协议,实现跨多路由器的网络互通,并验证终端设备的访问能力。 …...
东芝Toshiba DP-4528AG打印机信息
东芝 Toshiba DP 4528AG 是一款黑白激光数码复合机: 类型:激光数码复合机,涵盖复印、打印、扫描、传真功能,能满足办公室多样化的文档处理需求。速度类型:中速,黑白复印和打印速度可达 45 页 / 分钟&#…...
Vue3+Vite中lodash-es安装与使用指南
在 Vue 3 Vite 项目中安装和使用 lodash-es 的详细指南如下: 一、为什么选择 lodash-es? ES 模块支持:lodash-es 以原生 ES 模块格式发布,支持现代构建工具的 Tree Shaking 按需加载:只引入需要的函数,显…...

完美搭建appium自动化环境
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 桌面版appium提供可视化操作appium主要功能的使用方式,对于初学者非常适用。 如何在windows平台安装appium桌面版呢,大体分两个步骤&…...

c++中的输入输出流(标准IO,文件IO,字符串IO)
目录 (1)I/O概述 I/O分类 不同I/O的继承关系 不同I/O对应的头文件 (2)iostream 标准I/O流 iostream头文件中的IO流对象 iostream头文件中重载了<<和>> 缓冲区示意图 标准输入流 cin用法 cin:按空…...
App使用webview套壳引入h5(三)——解决打包为app后在安卓机可物理返回但是在苹果手机无法测滑返回的问题
话不多说,直接放最终版本代码。 解决思路是:如果设备是ios设备在myH5中监听 touchstart 和touchend事件。 经过 App使用webview套壳引入h5的最终代码如下 myApp中,entry.vue代码如下: <template><view class"ent…...
CSS中text-align: justify文本两端对齐
text-align: justify; 是 CSS 中用于控制文本对齐方式的属性值,它的核心作用是让文本两端对齐(分散对齐),使段落左右边缘整齐排列。以下是详细解析: 作用效果 均匀分布间距 浏览器会自动调整单词/字符之间的间距&#…...

2025年渗透测试面试题总结-ali 春招内推电话1面(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 ali 春招内推电话1面 一、Web安全核心理解 二、熟悉漏洞及防御方案 三、UDF提权原理与防御 四、XSS Fuzz…...
C#中的依赖注入
1. 依赖注入(Dependency Injection, DI)概述 定义 :依赖注入是一种设计模式,允许将组件的依赖关系从内部创建转移到外部提供。这样可以降低组件之间的耦合度,提高代码的可测试性、可维护性和可扩展性。 核心思想 &…...

Reactor和Proactor
reactor的重要组件包括:Event事件、Reactor反应堆、Demultiplex事件分发器、Eventhandler事件处理器。...

黄晓明新剧《潜渊》定档 失忆三面间谍开启谍战新维度
据悉,黄晓明领衔主演的谍战剧《潜渊》已于近日正式定档6月9日,该剧以“失忆三面间谍”梁朔为核心,打破传统谍战剧的框架和固有角度,以一种特别的视角将悬疑感推向极致。剧中,梁朔因头部受伤失去记忆,陷入身…...
深入浅出Java ParallelStream:高效并行利器还是隐藏的陷阱?
在Java 8带来的众多革新中,Stream API彻底改变了我们对集合操作的方式。而其中最引人注目的特性之一便是parallelStream——它承诺只需简单调用一个方法,就能让数据处理任务自动并行化,充分利用多核CPU的优势。但在美好承诺的背后,…...

物联网嵌入式开发实训室建设方案探讨(高职物联网应用技术专业实训室建设)
一、建设背景与目标 在当今数字化时代,物联网技术正以前所未有的速度改变着人们的生活和工作方式。从智能家居到工业自动化,从智能交通到环境监测,物联网的应用场景无处不在。根据市场研究机构的数据,全球物联网设备连接数量预计…...

集成学习三种框架
集成学习通过组合多个弱学习器构建强学习器,常见框架包括Bagging(装袋)、Boosting(提升) 和Stacking(堆叠) 一、Bagging(自助装袋法) 核心思想 从原始数据中通过有放回…...
大数据量高实时性场景下订单生成的优化方案
文章目录 一、问题背景二、核心优化目标三、架构设计方案3.1 分层架构设计 3.2 关键组件说明 四、核心优化策略4.1 异步处理与流量控制4.1.1 异步接口设计4.1.2 任务进度查询 4.2 批量处理与并行计算4.2.1 数据分批处理4.2.2 并行流处理 4.3 数据库优化4.3.1 批量插入4.3.2 索…...
在UI界面内修改了对象名,在#include “ui_mainwindow.h“没更新
原因:未重新编译UI文件 Qt的UI文件(.ui)需要通过uic工具(Qt的UI编译器)生成对应的ui_*.h头文件。如果你在Qt Designer中修改了对象名,但没有重新构建(Rebuild)…...
ocrapi服务docker镜像使用
umiocr只能用于windows,http服务只能找旧版,没办法,只能找docker替代一下了。 umiocr 使用paddleOCR和rapidOCR引擎。以下时这两个docker的运行方法 paddleOCR使用 duolabmeng666的ppocr镜像 镜像大小约2.6G docker run -itd --name ppoc…...
使用React+ant Table 实现 表格无限循环滚动播放
数据大屏表格数据,当表格内容超出(出现滚动条)时,无限循环滚动播放,鼠标移入暂停滚动,鼠标移除继续滚动;数据量小没有超出时不需要滚动。 *使用时应注意,滚动区域高度父元素高度 - 表…...
Podman 和 Docker
Podman 和 Docker 都是容器化工具,用于创建、运行和管理容器。它们有很多相似之处,但也存在关键区别。下面从多个维度对比它们,并给出适用场景建议。 1. 核心区别 特性DockerPodman守护进程(Daemon)必须运行 dockerd …...

Neovim - 常用插件,提升体验(三)
文章目录 nvim-treelualineindent-blanklinetelescopegrug-far nvim-tree 官方文档:https://github.com/nvim-tree/nvim-tree.lua 以前我们都是通过 :e 的方式打开一个 buffer,但是这种方式需要记忆文件路径,因此这里可以通过 nvim-tree 插…...
C++单例模式教学指南
C单例模式完整教学指南 📚 目录 [单例模式基础概念][经典单例实现及问题][现代C推荐实现][高级话题:双重检查锁][实战应用与最佳实践][总结与选择指南] 1. 单例模式基础概念 1.1 什么是单例模式? 单例模式(Singleton Pattern&…...

SOC-ESP32S3部分:31-ESP-LCD控制器库
飞书文档https://x509p6c8to.feishu.cn/wiki/Syy3wsqHLiIiQJkC6PucEJ7Snib ESP 系列芯片可以支持市场上常见的 LCD(如 SPI LCD、I2C LCD、并行 LCD (Intel 8080)、RGB/SRGB LCD、MIPI DSI LCD 等)所需的各种时序。esp_lcd 控制器为上述各类 LCD 提供了一…...
如何区分虚拟货币诈骗与经营失败?
首席数据官高鹏律师团队编著 00后大学生杨启超在公有链上发行BFF虚拟币,因在24秒内撤回流动性导致他人损失5万USDT币,被河南南阳法院以诈骗罪判处有期徒刑4年6个月。庭审中,辩护律师手持合约地址记录据理力争:“公有链发币自由、…...
Flink 高可用集群部署指南
一、部署架构设计 1. 集群架构 graph TDClient([客户端]) --> JM1[JobManager 1]Client --> JM2[JobManager 2]Client --> JM3[JobManager 3]subgraph ZooKeeper集群ZK1[ZooKeeper 1]ZK2[ZooKeeper 2]ZK3[ZooKeeper 3]endsubgraph TaskManager集群TM1[TaskManager 1…...

【云安全】以Aliyun为例聊云厂商服务常见利用手段
目录 OSS-bucket_policy_readable OSS-object_public_access OSS-bucket_object_traversal OSS-Special Bucket Policy OSS-unrestricted_file_upload OSS-object_acl_writable ECS-SSRF 云攻防场景下对云厂商服务的利用大同小异,下面以阿里云为例 其他如腾…...

读文献先读图:GO弦图怎么看?
GO弦图(Gene Ontology Chord Diagram)是一种用于展示基因功能富集结果的可视化工具,通过弦状连接可以更直观的展示基因与GO term(如生物过程、分子功能等)之间的关联。 GO弦图解读 ①内圈连线表示基因和生物过程之间的…...