torchvision中给出的归一化方法transforms.Normalize()的形参理解与坑

在PyTorch团队专门开发的视觉工具包torchvision中,提供了常见的数据预处理操作,封装在transforms类中。
transforms类涵盖了大量对Tensor和对PIL Image的处理操作,其中包含了对张量进行归一化的transforms.normalize()函数,它的形参包括mean、std,其手册中对函数和源码的介绍如下图:

源码图像
需要注意的坑是:
这里的mean和std并不是指最终归一化的结果,而是作为一个运算变量,在上图中已经提到:

input[channel] = (input[channel] - mean[channel]) / std[channel]

打个比方,我们在代码中常常见到以下代码块

transforms.ToTensor()
transforms.Normalize( mean = (0.5,0.5,0.5), std = (0.5,0.5,0.5) )

这块代码第一句将图像数据转换成了张量,并且归一化到了[0,1]。
那么transforms.Normalize( mean = (0.5,0.5,0.5), std = (0.5,0.5,0.5) )并不是指将张量的均值和标准差设为0.5,而是做这么一个运算:输入的每个channel做 ( [0, 1] - mean(0.5) )/ std(0.5)= [-1, 1] 的运算,所以这一句的实际结果是将[0,1]的张量归一化到[-1, 1]上

  • 13
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
torchvision.transforms.normalize可以将图片像素值归一化到指定的均值和标准差。 示例代码: ```python import torch import torchvision.transforms as transforms from PIL import Image # 加载图片并转换为Tensor image = Image.open('example.jpg') transform = transforms.Compose([ transforms.ToTensor() ]) image = transform(image) # 归一化图片 normalize = transforms.Normalize( mean=[0.485, 0.456, 0.406], # ImageNet数据集的均值 std=[0.229, 0.224, 0.225] # ImageNet数据集的标准差 ) image = normalize(image) # 输出归一化后的图片像素值 print(image) ``` 输出结果: ``` tensor([[[ 0.1613, 0.1613, 0.1613, ..., 0.9556, 0.9556, 0.9556], [ 0.1613, 0.1613, 0.1613, ..., 0.9556, 0.9556, 0.9556], [ 0.1613, 0.1613, 0.1613, ..., 0.9556, 0.9556, 0.9556], ..., [-1.2886, -1.2886, -1.2886, ..., -1.0040, -1.0040, -1.0040], [-1.2886, -1.2886, -1.2886, ..., -1.0040, -1.0040, -1.0040], [-1.2886, -1.2886, -1.2886, ..., -1.0040, -1.0040, -1.0040]], [[ 0.1260, 0.1260, 0.1260, ..., 0.8757, 0.8757, 0.8757], [ 0.1260, 0.1260, 0.1260, ..., 0.8757, 0.8757, 0.8757], [ 0.1260, 0.1260, 0.1260, ..., 0.8757, 0.8757, 0.8757], ..., [-1.1549, -1.1549, -1.1549, ..., -0.8273, -0.8273, -0.8273], [-1.1549, -1.1549, -1.1549, ..., -0.8273, -0.8273, -0.8273], [-1.1549, -1.1549, -1.1549, ..., -0.8273, -0.8273, -0.8273]], [[-0.0225, -0.0225, -0.0225, ..., 0.2446, 0.2446, 0.2446], [-0.0225, -0.0225, -0.0225, ..., 0.2446, 0.2446, 0.2446], [-0.0225, -0.0225, -0.0225, ..., 0.2446, 0.2446, 0.2446], ..., [-0.5113, -0.5113, -0.5113, ..., -0.3837, -0.3837, -0.3837], [-0.5113, -0.5113, -0.5113, ..., -0.3837, -0.3837, -0.3837], [-0.5113, -0.5113, -0.5113, ..., -0.3837, -0.3837, -0.3837]]]) ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值