热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

torchvision.transforms.ToTensor详解|使用transforms.ToTensor()出现用户警告|图像的HWC代表什么

看看torchvision.transforms.ToTensor做了什么:把一个取值范围是[0,255]的PIL.Image或者shape为(H,W,C)的numpy.ndarr

看看torchvision.transforms.ToTensor做了什么:

简单来说就是把PIL.Image或ndarray从 (H x W x C)形状转换为 (C x H x W) 的tensor。

如果


  • 转换前numpy.ndarray的dtype = np.uint8

  • 转换前的PIL.Image是L, LA, P, I, F, RGB, YCbCr, RGBA, CMYK, 1 格式
  • 还会将数值从 [0, 255] 归一化到[0,1]

    不符合上边条件的话就不会归一化。


  • [h, w, c]:数组中最外层即hight,表示图像像素有几行;第二层元素width,表示图像像素几列,最后一层元素为每一个通道的数值。

  • [c, h, w]:数组中第一层元素为图像有一个通道,第二层元素为某个通道上的一行像素,第三层为该通道上某列的像素值。
    举个栗子:
  • import numpy as np
    from torchvision import transforms

    data = np.random.randint(0, 255, size=6)
    img = data.reshape(2,1,3)
    print(img)
    img_tensor = transforms.ToTensor()(img) # 转换成tensor
    print(img_tensor)




  • ndarray最外边一层是每行像素,一共两行;中间一层是每列像素值,一共两列;最里层是三通道即RGB值。



  • tensor最外层是有几个通道,三通道则表示RGB;第二层中为每列有几个像素值;第三层为每行几个像素值。




  • UserWarning

    弄清楚原理, 那来看看我今天遇到的一个用户警告。


    D:\Program Files\python\python3.8\lib\site-packages\torchvision\datasets\mnist.py:498: UserWarning: The given NumPy array is not writeable, and PyTorch does not support non-writeable tensors. This means you can write to the underlying (supposedly non-writeable) NumPy array using the tensor. You may want to copy the array to protect its data or make it writeable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at …\torch\csrc\utils\tensor_numpy.cpp:180.)
    return torch.from_numpy(parsed.astype(m[2], copy=False)).view(*s)


    大致意思是:
    D:\\Program Files\\python\\python3.8\\lib\\site packages\\torchvision\\dataset\\mnist.py:498:UserWarning:说:
    给定的NumPy数组不可写,并且PyTorch不支持不可写的张量。这意味着你可以使用张量写入底层(假定不可写)NumPy数组。在将数组转换为张量之前,可能需要复制数组以保护其数据或使其可写。
    在本程序的其余部分,此类警告将被抑制。(在…\torch\csc\utils\tensor\u numpy.cpp:180处内部触发。)
    返回return torch.from_numpy(parsed.astype(m[2], copy=False)).view(*s)

    看了看别人的说法一般都是说这玩意儿可以直接处理numpy的数组,你不需要转换成tensor。但是怎么不让他显示这个警告呢。

    找到上边那个地址下的mnist文件。找到498行,把return torch.from_numpy(parsed.astype(m[2], copy=False)).view(*s)copy的false改成true即可。

    来源:LolitaAnn



    推荐阅读
    • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
      本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
    • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
    • 深度学习中的Vision Transformer (ViT)详解
      本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
    • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
    • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
    • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
    • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
    • 成功安装Sabayon Linux在thinkpad X60上的经验分享
      本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
    • Go Cobra命令行工具入门教程
      本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
    • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
    • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
      本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
    • Android系统源码分析Zygote和SystemServer启动过程详解
      本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
    • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
    • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
    • 本文整理了Java中org.apache.pig.backend.executionengine.ExecException.<init>()方法的一些代码 ... [详细]
    author-avatar
    海滨2502940147
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有