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

TypeError: can‘t convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory fiRuntimeError:Expectedobjectoftypetorch.cuda.FloatTensorbutfoundtypetorch.FloatTensorforargument#4’mat1’意思是:如果想把CUDAtensor格式的数据改成numpy时,需要先将其转换成cpufloat-tensor随后再转到numpy格式。numpy不能读取CU…

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

Jetbrains全系列IDE稳定放心使用

运行程序如下:

import numpy as np
import torch
from torch import nn
from torch.autograd import Variable
import matplotlib.pyplot as plt


class LinearRegression(nn.Module):
    def __init__(self):
        super(LinearRegression,self).__init__()
        self.linear = nn.Linear(1,1)
    def forward(self, x):
        out = self.linear(x)
        return out
x_train = np.array([[3.3],[4.4],[5.5],[6.710],[6.93],[4.168],[9.779],[6.182],[7.59],[2.167],[7.042],[10.791],[5.313],[7.997],[3.1]],dtype=np.float32)
y_train = np.array([[1.7],[2.76],[2.09],[3.19],[1.694],[1.573],[3.366],[2.596],[2.53],[1.221],[2.827],[3.465],[1.65],[2.904],[1.3]],dtype=np.float32)
x_train = torch.from_numpy(x_train)
y_train = torch.from_numpy(y_train)
num_epochs = 1000
if torch.cuda.is_available():
    print("GPU1")
    model = LinearRegression().cuda()
else:
    print("CPU1")
    model = LinearRegression()

criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(),lr=1e-3)


for epoch in  range(num_epochs):
    if torch.cuda.is_available():
        print('GPU2')
        inputs = Variable(x_train).cuda()
        target = Variable(y_train).cuda()
    else:
        print("CPU2")
        inputs = Variable(x_train)
        target = Variable(y_train)
    # forward
    out = model(inputs)
    loss = criterion(out,target)
    # backward
    optimizer.zero_grad()  # 梯度归零
    loss.backward()   # 反向传播
    optimizer.step()  # 更新参数
    # if (epoch+1) % 20 ==0:
    #     print('Epoch[{}/{}], loss:{:,6f}'.format(epoch+1,num_epochs,loss.data[0]))


model.eval()

predict = model(Variable(x_train.cuda()))  
predict = predict.data.numpy()
plt.plot(x_train.numpy(),y_train.numpy(),'ro',label='Original data')
plt.plot(x_train.numpy(),predict,label='Fitting Line')
plt.show()

这行报错:predict = predict.data.numpy()

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

意思是:如果想把CUDA tensor格式的数据改成numpy时,需要先将其转换成cpu float-tensor随后再转到numpy格式。 numpy不能读取CUDA tensor 需要将它转化为 CPU tensor
predict.data.numpy() 改为predict.data.cpu().numpy()即可

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

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

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


相关推荐

  • R6010 -abort() has been called错误分析及其解决方法

    R6010 -abort() has been called错误分析及其解决方法

    2022年1月30日
    70
  • django 自定义过滤器_mvc自定义过滤器

    django 自定义过滤器_mvc自定义过滤器前言虽然DTL给我们内置了许多好用的过滤器。但是有些时候还是不能满足我们的需求。因此Django给我们提供了一个接口,可以让我们自定义过滤器,实现自己的需求。自定义过滤器首先在某个app中,创建

    2022年8月7日
    6
  • 激光测距的原理与应用[通俗易懂]

    激光测距的原理与应用[通俗易懂]激光,英文名称为LightAmplificationbyStimulatedEmissionofRadiation(简称LASER),意思为原子受激辐射的光,故称激光,激光的产生原理,是原子中的电子吸收能量后从低能级跃迁到高能级,再从高能级回落到低能级的时候,所释放的能量以光子的形式放出,被引诱(激发)出来的光子束(激光)。激光与普通光源相比,具有单色性、高亮度、方向性等优势,被广泛应用于工业生产和科研实验等各个领域,激光测距便是其中应用较为广泛的一项技术。1.激光测距技术的特点激光测距

    2022年6月2日
    39
  • mysql查询前5条记录_各个数据库中,查询前n条记录的方法「建议收藏」

    mysql查询前5条记录_各个数据库中,查询前n条记录的方法「建议收藏」SQL查询前10条的方法为:1.selecttopX*fromtable_name–查询前X条记录,可以改成需要的数字,比如前10条。2.selecttopX*fromtable_nameorderbycolum_namedesc–按colum_name属性降序排序查询前X条记录,“orderby”后紧跟要排序的属性列名,其中desc表示降序,asc表示升序…

    2025年10月6日
    4
  • wifi linux驱动_嵌入式系统Android移植

    wifi linux驱动_嵌入式系统Android移植背景:需要更换wifi厂家提供的驱动程序,此驱动不是insmod测试程序,而是需要编译进内核,开机自动挂载的。insmod挂载驱动通常是将驱动源码,使用对应的交叉编译工具链编为xx.ko的文件,手动insmodxx.ko进行使用。1:将驱动源码放入内核目录下的/drivers/net/wireless/realtek目录。2:查看驱动源码目录下的Kconfig和Makefile是否齐全,…

    2022年9月24日
    6
  • java二分查找法查找数组指定元素(Java字符串排序)

    二分查找递归实现与循环实现代码:/***二分查找*1.二分查找又称折半查找,它是一种效率较高的查找方法。*2.二分查找要求:(1)必须采用顺序存储结构(2).必须按关键字大小有序排列*3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后*将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,…

    2022年4月14日
    105

发表回复

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

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