Pytorch中tensor和numpy互相转换[通俗易懂]

Pytorch中tensor和numpy互相转换[通俗易懂]https://blog.csdn.net/AugustMe/article/details/113841470

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

从numpy中导入tensor

torch.from_numpy(data)
或
torch.from_numpy(data).to(a.device)

也可以用torch.tensor(data), 但torch.from_numpy更加安全,使用tensor.Tensor在非float类型下会与预期不符

以前是整型,导入就是整型。以前是浮点型,导入就是浮点型

Pytorch中tensor和numpy互相转换[通俗易懂]

Pytorch中tensor和numpy互相转换[通俗易懂]

注意,torch.from_numpy()这种方法互相转的Tensor和numpy对象共享内存,所以它们之间的转换很快,而且几乎不会消耗资源。这也意味着,如果其中一个变了,另外一个也会随之改变。

Pytorch中tensor和numpy互相转换[通俗易懂]

图片的numpy转tensor

注意,读取图片成numpy array的范围是[0,255]是uint8

           而转成tensor的范围就是[0,1.0], 是float

所以图片的numpy转tensor有些不一样

如果是直接按照上面的方法 x = torch.from_array(x), 得到的tensor值是0-255的

得到0-1.0的话

import torchvision.transforms as transforms
import matplotlib.pyplot as plt
 
img = plt.imread('wave.jpg')
print(img.shape)   # numpy数组格式为(H,W,C)
 
img_tensor = transforms.ToTensor()(img)  # tensor数据格式是torch(C,H,W)
print(img_tensor.size())
import torchvision.transforms as transforms
import cv2
 
img = cv2.imread('image/000001.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
print(img.shape)   # numpy数组格式为(H,W,C)
 
img_tensor = transforms.ToTensor()(img)  # tensor数据格式是torch(C,H,W)
print(img_tensor.size())

而且同时还会把(h,w,c)转成(c,h,w)

tensor转numpy

b = a.numpy()

b = a.clone().detach().cpu().numpy()

 注意,torch.from_numpy()这种方法互相转的Tensor和numpy对象共享内存,所以它们之间的转换很快,而且几乎不会消耗资源。这也意味着,如果其中一个变了,另外一个也会随之改变。

Pytorch中tensor和numpy互相转换[通俗易懂]

图片的tensor转numpy

如果tensor是0-1.0的话

x = x.mul(255).add_(0.5).clamp_(0, 255).permute(1, 2, 0).to('cpu', torch.uint8).numpy()

如果tensor是0-255的话

x = x.permute(1, 2, 0).to('cpu', torch.uint8).numpy()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180503.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • k8s实战系列: 1-再谈为什么需要Kubernetes[通俗易懂]

    k8s实战系列: 1-再谈为什么需要Kubernetes[通俗易懂]k8s系列:再谈为什么需要Kubernetes容器解决了什么?又遇到了什么问题容器,到底是怎么一回事儿?在Docker出现之前,最为流行的是PaaS项目。PaaS项目被大家接纳的一个主要原因,就是它提供了一种名叫“应用托管”的能力。像CloudFoundry这样的PaaS项目,最核心的组件就是一套应用的打包和分发机制。更好地模拟本地服务器环境,能带来更好的“上云”体验。CloudFoundry会调用操作系统的Cgroups和Namespace机制为每一个应用单独创建一

    2022年5月21日
    39
  • 在线写java代码

    在线写java代码前言蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力、培训、出国、大公司的经历,还有很多很好的朋友。但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员,可惜我错过了,我用这五年时间和很多程序员一样在困惑和迷茫中找不到出路!路其实一直都在那里,只是我们看不到而已!以前我一直被公司和技术牵着走,并不是自己在选择技术,而是不自觉地被推到了这个位置上。想想有多少人对于自己将来要从事的职业和技术类型进行过深入思考和比较呢?当我跳出编码后,我开始思考和程序及程序员职

    2022年7月8日
    25
  • 目录列表工具–FtpList.exe

    目录列表工具–FtpList.exe

    2021年7月24日
    57
  • idea maven创建springboot项目_springboot项目

    idea maven创建springboot项目_springboot项目前言:如今springboot越来越火,越来越多的公司选择使用springboot作为项目的开发框架,其设计目的就是用来简化spring项目的搭建和开发过程,省略了传统spring、springmvc项目繁琐的配置,可以让开发人员快速上手。下面详细说明下如何使用idea创建我们的第一个springboot项目:首先打开idea主界面选择CreateNewProject在弹…

    2022年10月13日
    2
  • Python assert 断言函数「建议收藏」

    使用assert断言是学习python一个非常好的习惯,pythonassert断言句语格式及用法很简单。在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃,这时候就需要assert断言的帮助。本文主要是讲assert断言的基础知识。pythonassert断言的作用pythonassert断言是声明其布尔值必须为真的判定,如果发生异

    2022年4月12日
    45
  • CentOS7安装MySQL8.0图文教程

    CentOS7安装MySQL8.0图文教程1.下载MySQL所需要的安装包      网址:https://dev.mysql.com/downloads/mysql/2.SelectOperatingSystem:选择RedHat,CentOS是基于红帽的,SelectOSVersion:选择linux73.选择RPMBundle点击Download4.点击 Noth…

    2022年6月14日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号