前言

在进行tensor图片数据进行视觉时,一般会进行预处理操作,这个时候就需要用到ToTensor()和Normalize()这两个函数.


提示:以下是本篇文章正文内容,下面案例可供参考

一.ToTensor函数

1.ToTensor函数的作用

1.将shape为(H,W,C)的数据维度转变为(C,H,W),其中C表示通道数,H表示高度,W表示宽度。
2. 将输入数据归一化到(0,1)的范围内,其归一化方法为除以255进行缩放

2.代码实现

import torch
import torchvision
from   torchvision.transforms import transforms
import numpy as np'''tranforms.Compose将多个函数进行组合'''
tranforms_1 = transforms.Compose([transforms.ToTensor()])tensor1 = np.array([[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],[[1,2,3],[4,5,6],[7,8,9],[5,6,7]]],dtype = np.float32)
print(f'未转换数据前数据的维度为{tensor1.shape}')  #(4,4,3)
trans_tensor1 = tranforms_1(tensor1)
print(f'转换后数据的维度为{trans_tensor1.shape}')   #(3,4,4)

3.数据没有归一化问题

可以看到,在经过ToTensor()函数的处理之后,维度确实发生了变化,达到预期的效果,接下来再输出转换前的数据和转换后的数据。

print(tensor1[0]) #[[1. 2. 3.]#[4. 5. 6.]#[7. 8. 9.]#[5. 6. 7.]]
print(trans_tensor1[0])
#tensor([[1., 4., 7., 5.],#[1., 4., 7., 5.],#[1., 4., 7., 5.],# [1., 4., 7., 5.]])

可以发现,转换后的trans_tensor1虽然维度确实发现了变化,可是数据应该缩放到[0,1]的范围,但是数据本身却没有发生变化,进入到ToTensor()的实现函数查看原因

可以看到,传入的数据需要是字节类型的数据,否则会返回传入的数据本身。那么传入的数据类型究竟应该是什么呢?接下来使用cv函数读取图片并转换数据查看结果

import cv2
images = cv2.imread('../data/cat1.jpg')images_result = tranforms_1(images)
#(288, 352, 3) torch.Size([3, 288, 352])print(images.shape,images_result.shape)
print(images_result[0])
# tensor([[0.9765, 0.9961, 1.0000,  ..., 0.9647, 0.9647, 0.9647],
#         [0.9686, 0.9922, 1.0000,  ..., 0.9608, 0.9686, 0.9608],
#         [0.9255, 0.9647, 0.9922,  ..., 0.9765, 0.9843, 0.9765],
#         ...,
#         [0.0392, 0.3098, 0.4157,  ..., 0.2118, 0.2157, 0.2157],
#         [0.0588, 0.2627, 0.3098,  ..., 0.1608, 0.1608, 0.1608],
#         [0.0196, 0.0706, 0.0392,  ..., 0.0549, 0.0549, 0.0510]])print(images.dtype)  #unit8

在传入图片调用ToTensor()函数后,发现数据的维度发生了变化,数据也归一化,输出image的数据类型发现,为unit8,接着我们将前面的numpy数组的数据类型转变为unit8后发现,输出结果正常,因此传入的数据需要为unit8

tensor1 = np.array([[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],[[1,2,3],[4,5,6],[7,8,9],[5,6,7]]],dtype = np.uint8)#[[1 2 3]#[4 5 6]#[7 8 9]#[5 6 7]]
print(tensor1[0]) #tensor([[0.0039, 0.0157, 0.0275, 0.0196],#      [0.0039, 0.0157, 0.0275, 0.0196],#    [0.0039, 0.0157, 0.0275, 0.0196],#  [0.0039, 0.0157, 0.0275, 0.0196]])
print(trans_tensor1[0])

二.Normalize()函数

1.Normalize函数的作用

Normalize()函数的作用是将数据转换为标准高斯分布,每个通道都进行标准化,即每个通道的均值都变为0,标准差都变为1,这样可以加快模型的收敛。

2.代码实现

`'''均值mean=[0.485, 0.456, 0.406],标准差std=[0.229, 0.224, 0.225]这一组数据是由Imagenet训练集中抽样训练出来的'''
tranforms_2 = transforms.Compose([transforms.ToTensor(),transforms.Normalize
(mean = [0.485, 0.456, 0.406],
std = [0.229, 0.224, 0.225])])tensor1 = np.array([[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],[[1,2,3],[4,5,6],[7,8,9],[5,6,7]]],dtype = np.uint8)trans_tensor2 = tranforms_2(tensor1)
trans_tensor2

浅谈对transforms.ToTensor()和transforms.Normalize()函数的理解相关推荐

  1. python中zip的使用_浅谈Python中的zip()与*zip()函数详解

    前言 1.实验环境: Python 3.6: 2.示例代码地址:下载示例: 3.本文中元素是指列表.元组.字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表). zip(*iterables ...

  2. 浅谈一下个人基于IRIS后端业务开发框架的理解

    文章目录 浅谈一下个人基于IRIS后端业务开发框架的理解 现状 方案 具体实现 `Base` `Biz` `Data` `Filter` `Sql` `Imp`.`Ref` `Api` `Util` ...

  3. 浅谈一下对cocos2d-x中九宫格精灵的简单理解和使用

    浅谈一下对cocos2d-x中九宫格精灵的简单理解和使用 首先,使用cocos new命令创建了一个cocos2d-x的C++项目和Lua项目,在生成的HelloWorld中写测试代码. 1.C++代 ...

  4. transforms.ToTensor()与transforms.Normalize()函数解析

    1.transforms.ToTensor()作用 ToTensor()将shape为(H, W, C)的nump.ndarray或img转为shape为(C, H, W)的tensor,其将每一个数 ...

  5. 浅谈C++类中的默认成员函数

    概述 在C++中,类与C语言中的结构体类似,类与结构体的不同之处便是在其内部多了几个成员函数还有几个访问限定符,访问限定符有public(公共).protected(保护).private(私有),而 ...

  6. pytorch中的transforms.ToTensor和transforms.Normalize理解

  7. 浅谈Excel开发:五 Excel RTD函数

    上文介绍了Excel中的UDF函数,本文介绍一下同样重要的RTD函数.从Excel 2002开始,Excel引入了一种新的查看和更新实时数据的机制,即real-time data简称RTD函数,他是一 ...

  8. 浅谈.Net异步编程的前世今生----异步函数篇(完结)

    前言 上一篇我们着重讲解了TPL任务并行库,可以看出TPL已经很符合现代API的特性:简洁易用.但它的不足之处在于,使用者难以理解程序的实际执行顺序. 为了解决这些问题,在C# 5.0中,引入了新的语 ...

  9. 计算机在科技英语翻译中起的作用,浅谈科技英语翻译中英语词语的正确理解与表达...

    作者:苏雷江 摘要:在科技英语翻译中,如何正确的理解与表达英语词语对整个翻译过程起着至关重要的作用.本篇文章从词义的选择和词义的引申两个方面来具体阐述如何做到正确的理解与表达科技英语翻译中的英语词语. ...

最新文章

  1. javaweb:Cookie
  2. c#保存数据格式为.cvs_C#读取csv格式文件的方法
  3. 软件业的作业示意流程图
  4. git subtree 管理项目子模块
  5. C#出题库项目的总结(1)
  6. 51nod1363 最小公倍数之和
  7. 前期拍摄注意的简要几点,总结了一哈,与大家分享!
  8. 在Amazon S3 上架设静态网站
  9. 动态SQL和PL/SQL的EXECUTE IMMEDIATE选项
  10. oracle in table类型,Oracle Built-in Data Types(Oracle内置数据类型)
  11. 【信息学奥赛一本通】题解目录
  12. 高中数学知识点总结归纳之立体几何
  13. 2021-2027全球与中国SD WAN托管服务市场现状及未来发展趋势
  14. 慧尔视:以CRM为抓手,打造用数据说话的企业
  15. FTT NTT 分治FFT
  16. STM32输出PWM波形并实现呼吸灯
  17. Linux创建用户和删除用户
  18. html markdown 互相转换,Vue/Vue中Html和Markdown互相转换/README.md · 撒欢大魔王/LearningNotes - Gitee.com...
  19. ie浏览器缓存不能更新页面数据
  20. 怎样快速找到网站根目录

热门文章

  1. 基于ESP8266的STM32物联网开发板
  2. it-tidalwave-semantic-aux-1.0.5.jar下载
  3. 太高效了,全靠这款可视化报表工具,实用
  4. java基于微信小程序校园二手闲置商品交易跳蚤市场 uniapp 小程序
  5. 手势检测及手掌质心的运动轨迹(opencv)
  6. 根据起始点经纬度、距离、方位角计算目标点经纬度的方法
  7. 图床项目之后台框架设计
  8. 一文精通S4 HANA中的Business Partner
  9. 小王要购买一台式计算机的内存储器,计算机硬件练习及答案
  10. 计算机单位怎么解决办法,你单位的电脑坏了,但是之前有通知客户前来办理业务,现在由于系统崩溃,客户怨声载道,你是部门负责人,怎么处理?...