当前位置: 首页 > news >正文

transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)的计算过程

        cifar10数据集的众多demo中,在数据加载环节,transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)这条指令是经常看到的。这是一个 PyTorch 中用于图像数据标准化的函数调用,它将图像的每个通道的值进行标准化处理,使得数据的均值变为 (0.4914, 0.4822, 0.4465),标准差变为 (0.2023, 0.1994, 0.2010)。
        关于均值、均方差以及标准化函数transforms.Normalize()的文章太多了,这里记录一下计算过程。
        对于 CIFAR-10 数据集,均值和标准差的计算方法如下:
        1、收集数据集: 首先,你需要加载整个 CIFAR-10 数据集。CIFAR-10 数据集包含 60,000 张 32x32 的彩色图像,分为 10 个类别。
        2、计算每个通道的均值:
        
对于每个图像,将 RGB 三个通道的值提取出来。然后对所有图像的每个通道的像素值求和,然后除以总像素数(图像数量乘以每个图像的像素数)。
        3、计算每个通道的标准差:
        
对于每个图像,计算每个通道的像素值与该通道均值的差的平方。再对所有图像的每个通道的平方差求和,然后除以总像素数,最后取平方根。

import torch
from torchvision import datasets, transforms# 定义数据预处理
transform = transforms.Compose([transforms.ToTensor()
])# 加载CIFAR-10数据集
train_dataset = datasets.CIFAR10(root='./data', train=True, download=False, transform=transform)# 将数据集转换为Tensor
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=1, shuffle=False)# 初始化均值和标准差
mean = torch.zeros(3)
std = torch.zeros(3)# 计算均值和标准差
for images, _ in train_loader:for i in range(3):  # 遍历RGB三个通道mean[i] += images[:, i, :, :].mean()   # 计算每个通道的均值std[i] += images[:, i, :, :].std()     # 计算每个通道的标准差# 对三个通道的均值和标准差求平均
mean /= 3
std /= 3# 计算平均值
mean /= len(train_loader)
std /= len(train_loader)print(f'均值: {mean}')   # 均值: tensor([0.4914, 0.4822, 0.4465])
print(f'标准差: {std}')  # 标准差: tensor([0.2023, 0.1994, 0.2010])

上述代码稍加改造,就可用于自定义数据集的计算:

import torch
from torchvision import transforms
from torch.utils.data import Dataset, DataLoader
from PIL import Image
import os# 自定义数据集类
class CustomDataset(Dataset):def __init__(self, img_dir, transform=None):self.img_dir = img_dir   # 图片文件夹的路径self.transform = transform   # 数据预处理self.img_files = os.listdir(img_dir)  # 图片文件列表def __len__(self):   # 获取数据集大小return len(self.img_files)def __getitem__(self, idx):  # 获取图片数据img_path = os.path.join(self.img_dir, self.img_files[idx])image = Image.open(img_path).convert('RGB')if self.transform:image = self.transform(image)return image# 定义数据预处理
transform = transforms.Compose([transforms.ToTensor()
])# 创建自定义数据集实例
custom_dataset = CustomDataset(img_dir='自定义数据集的文件夹路径', transform=transform)# 创建数据加载器
custom_loader = DataLoader(custom_dataset, batch_size=1, shuffle=False)# 初始化均值和标准差
mean = torch.zeros(3)
std = torch.zeros(3)# 计算均值和标准差
for images in custom_loader:for i in range(3):  # 遍历RGB三个通道mean[i] += images[:, i, :, :].mean()  # 计算每个通道的均值std[i] += images[:, i, :, :].std()  # 计算每个填充的标准差# 计算平均值
mean /= len(custom_loader)
std /= len(custom_loader)print(f'均值: {mean}')
print(f'标准差: {std}')

http://www.lryc.cn/news/466950.html

相关文章:

  • Excel表格如何修改“打开密码”,简单几步,轻松搞定
  • pandas 数据分析实战
  • antd vue 输入框高亮设置关键字
  • python——扑克牌案列
  • Java最全面试题->Java基础面试题->JavaWeb面试题->Git/SVN面试题
  • 引进Menu菜单与新增验证上传图片功能--系统篇
  • 安装Python及pip使用方法详解
  • 利用Arcgis进行沟道形态分析
  • Excel:vba实现筛选出有批注的单元格
  • RabbitMQ 发布确认模式
  • 【面试题】什么是SpringBoot以及SpringBoot的优缺点
  • git区分大小写吗?如果不区分,那要如何设置?
  • Docker 安装使用
  • Linux Docker配置镜像加速
  • 了解CSS Typed OM
  • [ 钓鱼实战系列-基础篇-6 ] 一篇文章让你了解邮件服务器机制(SMTP/POP/IMAP)-2
  • 在 Docker 中搭建 PostgreSQL16 主从同步环境
  • SpringCloud无介绍快使用,sentinel服务熔断功能与持久化(二十四)
  • 判断浏览器环境,前端打开微信浏览器
  • 【算法笔记】前缀和算法原理深度剖析(超全详细版)
  • linux之网络子系统- 地址解析协议arp 源码分析和邻居通用框架
  • 经典动态规划问题:含手续费的股票买卖【从 O(n) 到 O(1) 的优化解析】
  • Python画笔案例-088 绘制 滚动的汉字
  • Redis 5.0 安装配置(Windows)
  • 金融行业:办公安全防护专属攻略
  • python如何基于numpy pandas完成复杂的数据分析操作?
  • Linux中定时任务调度工具——crontab
  • 思维+差分,CF 1884C - Medium Design
  • 简单介绍冯诺依曼体系
  • kernel32.dll下载地址:如何安全地恢复系统文件