pytorch批量计算数据集的均值和方差

news2024/9/25 17:22:49
from torchvision.transforms import ToTensor#用于把图片转化为张量
import numpy as np#用于将张量转化为数组,进行除法
from torchvision.datasets import ImageFolder#用于导入图片数据集

means = [0,0,0]
std = [0,0,0]#初始化均值和方差
transform=ToTensor()#可将图片类型转化为张量,并把0~255的像素值缩小到0~1之间
dataset=ImageFolder("./data/train",transform=transform)#导入数据集的图片,并且转化为张量
num_imgs=len(dataset)#获取数据集的图片数量
for img,a in dataset:#遍历数据集的张量和标签
    for i in range(3):#遍历图片的RGB三通道
        # 计算每一个通道的均值和标准差
        means[i] += img[i, :, :].mean()
        std[i] += img[i, :, :].std()
mean=np.array(means)/num_imgs
std=np.array(std)/num_imgs#要使数据集归一化,均值和方差需除以总图片数量
print(mean,std)#打印出结果

datasets.ImageFolder 通用的数据加载器 

    def __init__(
            self,
            root: str,
            transform: Optional[Callable] = None,
            target_transform: Optional[Callable] = None,
            loader: Callable[[str], Any] = default_loader,
            is_valid_file: Optional[Callable[[str], bool]] = None,
    ):


    Args:
        root (string): Root directory path.
        transform (callable, optional): A function/transform that  takes in an PIL image
            and returns a transformed version. E.g, ``transforms.RandomCrop``
        target_transform (callable, optional): A function/transform that takes in the
            target and transforms it.
        loader (callable, optional): A function to load an image given its path.
        is_valid_file (callable, optional): A function that takes path of an Image file
            and check if the file is a valid file (used to check of corrupt files)

     Attributes:
        classes (list): List of the class names sorted alphabetically.
        class_to_idx (dict): Dict with items (class_name, class_index).
        imgs (list): List of (image path, class_index) tuples

参数详解
root:图片存储的根目录,即各类别文件夹所在目录的上一级目录。
transform:对图片进行预处理的操作(函数),原始图片作为输入,返回一个转换后的图片。
target_transform:对图片类别进行预处理的操作,输入为 target,输出对其的转换。如果不传该参数,即对 target 不做任何转换,返回的顺序索引 0,1, 2…
loader:表示数据集加载方式,通常默认加载方式即可。
is_valid_file:获取图像文件的路径并检查该文件是否为有效文件的函数(用于检查损坏文件

返回的dataset都有以下三种属性:
self.classes:用一个 list 保存类别名称

self.class_to_idx:类别对应的索引,与不做任何转换返回的 target 对应

self.imgs:保存(img-path, class) tuple的 list

from torchvision.transforms import ToTensor#用于把图片转化为张量
from torchvision.datasets import ImageFolder#用于导入图片数据集

transform=ToTensor()#可将图片类型转化为张量,并把0~255的像素值缩小到0~1之间
dataset=ImageFolder("./data/train",transform=transform)#导入数据集的图片,并且转化为张量

print('类别',dataset.classes)
print('类别索引',dataset.class_to_idx)
print('图片列表',dataset.imgs)
print('数据集大小',len(dataset))

数据标准化——transforms.normalize()

功能:逐channel的对图像进行标准化(均值变为0,标准差变为1),可以加快模型的收敛
output = (input - mean) / std
mean:各通道的均值
std:各通道的标准差

from torchvision.transforms import ToTensor#用于把图片转化为张量
import numpy as np#用于将张量转化为数组,进行除法
from torchvision.datasets import ImageFolder#用于导入图片数据集
from torchvision import transforms
means = [0,0,0]
std = [0,0,0]#初始化均值和方差
transform=ToTensor()#可将图片类型转化为张量,并把0~255的像素值缩小到0~1之间
dataset=ImageFolder("./data/train",transform=transform)#导入数据集的图片,并且转化为张量
num_imgs=len(dataset)#获取数据集的图片数量
for img,a in dataset:#遍历数据集的张量和标签
    for i in range(3):#遍历图片的RGB三通道
        # 计算每一个通道的均值和标准差
        means[i] += img[i, :, :].mean()
        std[i] += img[i, :, :].std()
mean=np.array(means)/num_imgs
std=np.array(std)/num_imgs#要使数据集归一化,均值和方差需除以总图片数量
print('未归一化的结果',mean,std)#打印出结果

transform=transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(mean=mean ,std=std)
    # transforms.Normalize(mean=[0.53124684 ,0.44909474 ,0.3981565] ,std=[0.23371747 ,0.23109557 ,0.2231768 ])
])
means = [0,0,0]
std = [0,0,0]#初始化均值和方差
dataset=ImageFolder("./data/train",transform=transform)#导入数据集的图片,并且转化为张量
num_imgs=len(dataset)#获取数据集的图片数量
for img,a in dataset:#遍历数据集的张量和标签
    for i in range(3):#遍历图片的RGB三通道
        # 计算每一个通道的均值和标准差
        means[i] += img[i, :, :].mean()
        std[i] += img[i, :, :].std()
mean=np.array(means)/num_imgs
std=np.array(std)/num_imgs#要使数据集归一化,均值和方差需除以总图片数量
print('归一化后的结果',mean,std)#打印出结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UIVM项目验证—数据多通道整形器(MCDF)

1、项目介绍-MCDF MCDF(Multi-Channel Data Formatter)多通道数据整形器将上行多个通道数据存入FIFO,经过Arbiter仲裁,完成指定通道的数据打包,寄存器可以控制各个通道的开关、优先级以及数据包长度。 2、设计描述 CDF设计结构描述如下所示…

红队隧道应用篇之SSH端口转发突破内网(六)

前言 什么是SSH隧道 SSH隧道是使用SSH协议连接两台计算机之间的通道。它使用密钥加密数据传输,并允许计算机之间的安全连接。 通常,SSH隧道用于通过不安全的网络(例如互联网)连接到远程服务器。隧道提供了一种安全的方法来访问…

我眼中的并发编程

在并发编程中都避不开原子性,可见性,有序性问题。这三个问题都是人们抽象出来,而实际上对应的就是缓存一致性,处理器优化,指令重排序问题。 原子性: 就是一个操作中CPU不可以在中途展厅然后再调度&#xf…

读者写者模型自旋锁(了解)

文章目录读者写者模型:1. 基本理论消费者生产者模型的321原则2. 操作3.理解4. 优先级挂起等待特性的锁 VS 自旋锁线程访问临界资源花费的时间问题:线程如何得知会在临界资源中等待的时间呢?自旋锁的使用读者写者模型: 1. 基本理论…

Python实现FA萤火虫优化算法优化支持向量机回归模型(SVR算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法(Fire-fly algorithm,FA)由剑桥大学Yang于2009年提出 , 作…

ModBus协议学习

之前没接触过,记录一下抄的东西。 Modbus 一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,比较简单,比较容易实现。 先来简单分析一条MODBUS-RTU报文,例如:01 06 0…

Spring Boot 构建多租户SaaS平台核心技术指南

1. 概述 笔者从2014年开始接触SaaS(Software as a Service),即多租户(或多承租)软件应用平台;并一直从事相关领域的架构设计及研发工作。机缘巧合,在笔者本科毕业设计时完成了一个基于SaaS的高…

绘制一张透明背景的单色位图

在上一篇文章中,我留下了一个谜题:如何使用透明背景绘制一张单色位图。今天我们来揭晓谜底。 丑话说前头,我不是一名 GDI 方面的专家,所以,除了下面讲述的两种方法之外,可能还有我所不知道的更好的解决方案…

九、Map接口和常用方法

文章目录框架特点常用方法六大遍历方式练习框架 数据是K-V类型的我们之前学的几个Set底层也是封装了Map,但是Value部分用默认值,我们只使用Key部分 特点 注意:这里讲的是JDK8的Map接口特点 Map用于保存具有映射关系的数据:Key-…

c++类和对象

二、c类和对象 1.什么是类 c当中类是一个数据类型,封装了数据以及操作。个人理解:c类就是对事物的的抽象,c万物即可为类,和c语言的结构体一样,是一系列事物的共同属性和行为 2.什么是对象 对象就是类的具体化(实例化)…

git创建远程分支并关联本地分支

场景一: 本地、远程都没有分支 "v1.0.0" 1. 先查看确认一下,命令: git branch -a 2. 创建本地分支,命令: git checkout -b v1.0.0 3. 创建远程分支,并且本地分支关联远程分支,命令…

上海亚商投顾:沪指缩量跌0.44% 医药股全线反弹

上海亚商投顾前言:无惧大盘大跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪大小指数今日走势分化,沪指全天弱势震荡,创业板指盘中涨超1%,午后涨幅有所回落。…

2022-12-29 驱动-IO多路复用

IO多路复用的原理: 1>select和poll原理:将文件描述符添加到集合中,监测是否有准备就绪的文件描述符,将未准备就绪的文件描述符剔除集合,准备就绪的文件描述符实现相关操作 2>对于epoll函数原理:创建…

超融合一体流式引擎,打造分布式数据库新纪元

12月28日,“数智驱动 全栈赋能”亚信科技2022年度系列产品发布会“数据库专场”线上成功举办,亚信科技重磅发布“超融合一体流式引擎”的AntDB V7.2数据库,并分享了在通信、交通等行业的应用实践。 百行千业数智化转型风起云涌,企…

布局云计算的下一个主场,紫光云引领行业云三大趋势

早在2018年,中国信通院发布2018云计算白皮书并指出:行业云时代全面开启。4年后的2022年底,Gartner将行业云平台列入2023年十大战略技术趋势,Gartner预测到2027年将有超过50%的企业使用行业云平台加速其业务项目。可以说&#xff0…

数据结构----树

树的概念 1.树的定义:树是n(n>0)个结点的有限集合 当n0时,称为”空树“ 当n>0时,有且仅有一个称为”根“的特定结点,该结点没有前驱,但是却有一个或者多个后继结点。 除了根节点以外的n-1个结点可划分为多个有…

项目管理范围(下)

创建WBS 什么是WBS? WBS(Work Breakdown Structure) --- 工作分解结构 创建WBS是将项目的可交付成果和项目工作分解成较小的,更易于管理的组件的过程。 它包含哪些内容? 举例: 里程碑的例子:比如需求评审&#xff…

计算机SCI论文润色,更容易被录用吗? - 易智编译EaseEditing

SCI论文润色后投稿,相较于没有润色投稿,确实概率要大一些。 特别有些英语水平较差的作者,投稿的论文,没有润色之前,可能审稿人会不理解,或读不通。 润色后,可能帮助审稿人理解论文。 目前不少…

告别动态规划

一、动态规划的三大步骤 动态规划,无非就是利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。下面我们先来讲下做动态规划题很重要的三个步骤 第一步骤&#…

九、树结构基础

1、为什么需要树这种数据结构? 数组存储方式的分析 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动&…