Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将CUDA张量转换为NumPy

将CUDA张量转换为NumPy
EN

Stack Overflow用户
提问于 2019-09-07 01:33:12
回答 2查看 11.8K关注 0票数 2

首先,我尝试了这些解决方案:1234,但对我来说没有用。

在对神经网络进行训练和测试之后,我试图给出一些例子来验证我的工作。我将方法命名为 predict ,将图像传递给它,以预测它属于哪个类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def predict(model, image_path, topk=5):
''' Predict the class (or classes) of an image using a trained deep learning model.
'''

output = process_image(image_path)
output.unsqueeze_(0)
output = output.cuda().float()

model.eval()

with torch.no_grad():
    score = model(output)
    prob, idxs = torch.topk(score, topk)

    # Convert indices to classes
    idxs = np.array(idxs)
    idx_to_class = {val:key for key, val in model.class_to_idx.items()}
    classes = [idx_to_class[idx] for idx in idxs[0]]

    # Map the class name with collected topk classes
    names = []
    for cls in classes:
        names.append(cat_to_name[str(cls)])

    return prob, names

然后是最后一步,显示基于神经网络训练的最终结果,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# TODO: Display an image along with the top 5 classes
x_pos, y_pos = predict(model, img_pil, topk=5)

ax_img = imshow(output)
ax_img.set_title(y_pos[0])

plt.figure(figsize=(4,4))
plt.barh(range(len(y_pos)), np.exp(x_pos[0]))
plt.yticks(range(len(y_pos)), y_pos)

plt.show()

错误是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-45-e3f9951e9804> in <module>()
----> 1 x_pos, y_pos = predict(model, img_pil, topk=5)
      2
      3 ax_img = imshow(output)
      4 ax_img.set_title(y_pos[0])
      5

1 frames
<ipython-input-44-d77500f31561> in predict(model, image_path, topk)
     14
     15         # Convert indices to classes
---> 16         idxs = np.array(idxs)
     17         idx_to_class = {val:key for key, val in model.class_to_idx.items()}
     18         classes = [idx_to_class[idx] for idx in idxs[0]]

/usr/local/lib/python3.6/dist-packages/torch/tensor.py in __array__(self, dtype)
    456     def __array__(self, dtype=None):
    457         if dtype is None:
--> 458             return self.numpy()
    459         else:
    460             return self.numpy().astype(dtype, copy=False)

TypeError: can't convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

如何解决这个问题?

我试图将idx更改为idxs = idxs.cpu().numpy(),错误是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TypeError                                 Traceback (most recent call last)
<ipython-input-62-e3f9951e9804> in <module>()
      5
      6 plt.figure(figsize=(4,4))
----> 7 plt.barh(range(len(y_pos)), np.exp(x_pos[0]))
      8 plt.yticks(range(len(y_pos)), y_pos)
      9

/usr/local/lib/python3.6/dist-packages/torch/tensor.py in __array__(self, dtype)
    456     def __array__(self, dtype=None):
    457         if dtype is None:
--> 458             return self.numpy()
    459         else:
    460             return self.numpy().astype(dtype, copy=False)

TypeError: can't convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-07 01:37:46

试着改变

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idxs = np.array(idxs)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
idxs = idxs.cpu().numpy()

和变化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.barh(range(len(y_pos)), np.exp(x_pos[0]))

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.barh(range(len(y_pos)), np.exp(x_pos[0].cpu().numpy()))
票数 5
EN

Stack Overflow用户

发布于 2021-05-03 10:19:13

因此,如果您在2021年来到这里,仍然有"TypeError:无法将CUDA张量转换为numpy。使用Tensor.cpu()首先复制张量以保存内存。

从这个站点尝试x.to("cpu").numpy()https://jbencook.com/pytorch-numpy-conversion/

所以像idxs = idxs.to("cpu").numpy().squeeze()这样的东西会起作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57832423

复制
相关文章
Pytorch cuda上的tensor转numpy[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/02
4260
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
11.4K0
pytorch和tensorflow的爱恨情仇之基本数据类型
自己一直以来都是使用的pytorch,最近打算好好的看下tensorflow,新开一个系列:pytorch和tensorflow的爱恨情仇(相爱相杀。。。)
西西嘛呦
2020/10/10
2.9K0
pytorch和tensorflow的爱恨情仇之基本数据类型
变量类型(cpu/gpu)
PyTorch中的数据类型为Tensor,Tensor与Numpy中的ndarray类似,同样可以用于标量,向量,矩阵乃至更高维度上面的计算。PyTorch中的tensor又包括CPU上的数据类型和GPU上的数据类型,一般GPU上的Tensor是CPU上的Tensor加cuda()函数得到。通过使用Type函数可以查看变量类型。系统默认的torch.Tensor是torch.FloatTensor类型。例如data = torch.Tensor(2,3)是一个2*3的张量,类型为FloatTensor; data.cuda()就将其转换为GPU的张量类型,torch.cuda.FloatTensor类型。
狼啸风云
2020/07/27
1.9K0
PyTorch张量操作详解
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
阿珍
2022/10/21
1.1K0
CUDA-入门(转)
CUDA,Compute Unified Device Architecture的简称,是由NVIDIA公司创立的基于他们公司生产的图形处理器GPUs(Graphics Processing Units,可以通俗的理解为显卡)的一个并行计算平台和编程模型。
祝你万事顺利
2019/06/03
1.6K0
numpy转tensorflow_pytorch numpy
.numpy()和.from_numpy()负责将tensor和numpy中的数组互相转换,共享共同内存,不共享地址 torch.tensor()复制数据,但不共享地址
全栈程序员站长
2022/09/27
4020
java map 转string_java-将Map <String,Object>转换为Map <String,String>
Map map = new HashMap(); //Object is containing String
全栈程序员站长
2022/08/25
12.3K0
一文读懂PyTorch张量基础(附代码)
本文介绍了PyTorch Tensor最基础的知识以及如何跟Numpy的ndarray互相转换。
数据派THU
2018/07/30
7290
一文读懂PyTorch张量基础(附代码)
Pytorch入门演练
Tensors(张量)类似于NumPy中的ndarray,另外它还可以使用GPU加速计算。
磐创AI
2019/01/02
5840
PyTorch 60分钟入门系列之PyTorch简介
Tensors类似于numpy的ndarray,但是带了一些附加的功能,例如可以使用GPU加速计算等等。
AI异构
2020/07/29
4660
基于numpy.einsum的张量网络计算
张量(Tensor)可以理解为广义的矩阵,其主要特点在于将数字化的矩阵用图形化的方式来表示,这就使得我们可以将一个大型的矩阵运算抽象化成一个具有良好性质的张量图。由一个个张量所共同构成的运算网络图,就称为张量网络(Tensor Network)。让我们用几个常用的图来看看张量网络大概长什么样子(下图转载自参考链接1):
DechinPhy
2021/05/21
1.8K0
Python - 将matplotlib图像转换为numpy.array 或 PIL.Image
matplotlib是python图像处理中让人又爱又恨的库。最近遇到了需要获取plt图像数据的需求,本文记录了将matplotlib图像转换为numpy.array 或 PIL.Image的方法。 众所周知,这个库处理图像会出现内存泄漏的问题,原想着将plt的图转出来用opencv存就好了,然而并没有,牢骚完毕。 转换思路 总体分为两步完成目标: 将plt或fig对象转为argb string的对象 将argb string对象图像转为array 或 Image 步骤一 区分对象为pl
为为为什么
2022/08/04
1.9K0
【colab pytorch】张量操作
张量命名是一个非常有用的方法,这样可以方便地使用维度的名字来做索引或其他操作,大大提高了可读性、易用性,防止出错。
西西嘛呦
2020/08/26
1.4K0
【colab pytorch】张量操作
numpy转torch.tensor_tensorflow numpy
要对tensor进行操作,需要先启动一个Session,否则,我们无法对一个tensor比如一个tensor常量重新赋值或是做一些判断操作,所以如果将它转化为numpy数组就好处理了。下面一个小程序讲述了将tensor转化为numpy数组,以及又重新还原为tensor:
全栈程序员站长
2022/11/07
2930
numpy矩阵转置
numpy矩阵转置只需要这样子: import numpy as np import fractions # 设置以分数形式显示 np.set_printoptions(formatter={'all': lambda x: str(fractions.Fraction(x).limit_denominator())}) # 定义矩阵 c = np.array([[-1/np.sqrt(2), 0, 1/np.sqrt(2)], [0, 1, 0], [1/np.sqrt(2), 0, 1/np.sqr
灯珑LoGin
2022/10/31
8220
tensorflow tensor转numpy
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/02
5570
pytorch入门教程 | 第一章:Tensor
1 pytorch安装 安装pytorch之前,需要安装好python,还没安装过python的宝宝请先移步到廖雪峰的python教程,待安装熟悉完之后,再过来这边。 我们接着讲。 打开pytorch
用户1332428
2018/03/08
1.7K0
pytorch入门教程 | 第一章:Tensor
如何使用Python将图像转换为NumPy数组并将其保存到CSV文件?
Python 是一种功能强大的编程语言,具有大量的库和模块。其中一个库是 NumPy,它用于数值计算和处理大型多维数组和矩阵。另一个用于Python图像处理的流行库是Pillow,它是Python Imaging Library(PIL)的一个分支。
很酷的站长
2023/08/11
4820
如何使用Python将图像转换为NumPy数组并将其保存到CSV文件?
点击加载更多

相似问题

无法将cuda:0设备类型张量转换为numpy

16

cuda张量的索引列表给出错误-“无法将cuda:0设备类型张量转换为numpy”

12

将张量转换为numpy数组

10

将Numpy Arrray转换为张量

266

如何将张量的numpy数组转换为张量?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文