热门标签 | 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



    推荐阅读
    • binlog2sql,你该知道的数据恢复工具
      binlog2sql,你该知道的数据恢复工具 ... [详细]
    • 使用Matlab创建动态GIF动画
      动态GIF图可以有效增强数据表达的直观性和吸引力。本文将详细介绍如何利用Matlab软件生成动态GIF图,涵盖基本代码实现与高级应用技巧。 ... [详细]
    • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
    • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
    • 本文介绍了如何利用OpenCV库进行图像的边缘检测,并通过Canny算法提取图像中的边缘。随后,文章详细说明了如何识别图像中的特定形状(如矩形),并应用四点变换技术对目标区域进行透视校正。 ... [详细]
    • 本文探讨了如何将Python对象转换为字节流,以实现文件保存、数据库存储或网络传输的需求。主要介绍了利用pickle模块进行序列化的具体方法。 ... [详细]
    • 本文将详细探讨 Python 编程语言中 sys.argv 的使用方法及其重要性。通过实际案例,我们将了解如何在命令行环境中传递参数给 Python 脚本,并分析这些参数是如何被处理和使用的。 ... [详细]
    • Zabbix自定义监控与邮件告警配置实践
      本文详细介绍了如何在Zabbix中添加自定义监控项目,配置邮件告警功能,并解决测试告警时遇到的邮件不发送问题。 ... [详细]
    • 本文详细探讨了在Java中如何将图像对象转换为文件和字节数组(Byte[])的技术。虽然网络上存在大量相关资料,但实际操作时仍需注意细节。本文通过使用JMSL 4.0库中的图表对象作为示例,提供了一种实用的方法。 ... [详细]
    • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
    • H5技术实现经典游戏《贪吃蛇》
      本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
    • 本文介绍了多维缩放(MDS)技术,这是一种将高维数据映射到低维空间的方法,通过保持原始数据间的关系,以便于可视化和分析。文章详细描述了MDS的原理和实现过程,并提供了Python代码示例。 ... [详细]
    • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
    • 本文探讨了如何在Python中将具有相同值的元素分组到矩阵中,这是一个在数据分析和处理中常见的需求。 ... [详细]
    • JUnit下的测试和suite
      nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
    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社区 版权所有