Python 绘制预测值会导致错误:';张量';对象没有属性';ndim&x27;

Python 绘制预测值会导致错误:';张量';对象没有属性';ndim&x27;,python,numpy,matplotlib,pytorch,Python,Numpy,Matplotlib,Pytorch,如何正确地编写代码来绘制此线性回归模型中的预测值 我使用本教程学习线性回归: 我能够成功地实现GPU。我的问题是绘制预测值。我试图寻找解决方案来学习如何将值保持为张量,但似乎我没有这样做的语法知识 我从这里开始 epochs = 100 for epoch in range(epochs): epoch += 1 # Convert numpy array to torch Variable if torch.cuda.is_available(): i

如何正确地编写代码来绘制此线性回归模型中的预测值

我使用本教程学习线性回归:

我能够成功地实现GPU。我的问题是绘制预测值。我试图寻找解决方案来学习如何将值保持为张量,但似乎我没有这样做的语法知识

我从这里开始

epochs = 100
for epoch in range(epochs):
    epoch += 1

    # Convert numpy array to torch Variable
    if torch.cuda.is_available():
        inputs = (torch.from_numpy(x_train).cuda())
        labels = (torch.from_numpy(y_train).cuda())
    else:
        inputs = (torch.from_numpy(x_train))
        labels = (torch.from_numpy(y_train))

    # Clear gradients w.r.t. parameters
    optimizer.zero_grad()

    # Forward to get output
    outputs = model(inputs)

    # Calculate Loss
    loss = criterion(outputs, labels)

    # Getting gradients w.r.t. parameters
    loss.backward()

    # Updating parameters
    optimizer.step()

    # Logging
    print('epoch {}, loss {}'.format(epoch, loss.item()))
在这里进行预测,我选择使用cuda

predicted = model(Variable(torch.from_numpy(x_train).requires_grad_().cuda()))

print("Predicted")
print(predicted)
print("Output")
print(y_train)

plt.clf()

# Get predictions

#predicted = model(Variable(torch.from_numpy(x_train).requires_grad_().cuda()))

# Plot true data
plt.plot(x_train, y_train, 'go', label='True data', alpha=0.5)
无法打印错误后,在此调用该错误

# Plot predictions
plt.plot(x_train, predicted, '--', label='Predictions', alpha=0.5)

# Legend and plot
plt.legend(loc='best')
plt.show()
错误提示:

Traceback (most recent call last):
  File "D:/Test with GPU/Linear regression.py", line 101, in <module>
    plt.plot(x_train, predicted, '--', label='Predictions', alpha=0.5)
  File "D:\Anaconda3\envs\gputest\lib\site-packages\matplotlib\pyplot.py", line 2795, in plot
    is not None else {}), **kwargs)
  File "D:\Anaconda3\envs\gputest\lib\site-packages\matplotlib\axes\_axes.py", line 1666, in plot
    lines = [*self._get_lines(*args, data=data, **kwargs)]
  File "D:\Anaconda3\envs\gputest\lib\site-packages\matplotlib\axes\_base.py", line 225, in __call__
    yield from self._plot_args(this, kwargs)
  File "D:\Anaconda3\envs\gputest\lib\site-packages\matplotlib\axes\_base.py", line 391, in _plot_args
    x, y = self._xy_from_xy(x, y)
  File "D:\Anaconda3\envs\gputest\lib\site-packages\matplotlib\axes\_base.py", line 271, in _xy_from_xy
    if x.ndim > 2 or y.ndim > 2:
AttributeError: 'Tensor' object has no attribute 'ndim'
回溯(最近一次呼叫最后一次):
文件“D:/testwithGPU/Linear regression.py”,第101行,在
plt.绘图(x_序列,预测,'--',标签='预测',α=0.5)
文件“D:\Anaconda3\envs\gputest\lib\site packages\matplotlib\pyplot.py”,第2795行,在plot中
不是别的{},**kwargs)
文件“D:\Anaconda3\envs\gputest\lib\site packages\matplotlib\axes\\u axes.py”,第1666行,在绘图中
行=[*self.\u获取行(*args,data=data,**kwargs)]
文件“D:\Anaconda3\envs\gputest\lib\site packages\matplotlib\axes\\ u base.py”,第225行,在u调用中__
从自身获得的收益。_plot_args(本,kwargs)
文件“D:\Anaconda3\envs\gputest\lib\site packages\matplotlib\axes\\ u base.py”,第391行,在绘图参数中
x、 y=自。_xy_自_xy(x,y)
文件“D:\Anaconda3\envs\gputest\lib\site packages\matplotlib\axes\\ u base.py”,第271行,在\u xy\u中
如果x.ndim>2或y.ndim>2:
AttributeError:“Tensor”对象没有属性“ndim”

plt.plot
函数期望其输入为
numpy
数组,而不是
torch.tensor

您可以使用以
numpy
数组的形式查看张量的内部数据

试一试

带火炬的
。无梯度()
plt.plot(x_train,predicted.cpu().numpy(),'--',label='predicts',alpha=0.5)

plt.plot
函数期望其输入为
numpy
数组,而不是
torch.tensor

您可以使用以
numpy
数组的形式查看张量的内部数据

试一试

带火炬的
。无梯度()
plt.plot(x_train,predicted.cpu().numpy(),'--',label='predicts',alpha=0.5)

Ndim是matplotlib所需的属性

import matplotlib.pyplot as plt   
torch.Tensor.ndim = property(lambda x: len(x.size()))
N = 42
t = torch.rand(N)
plt.plot(t)
plt.show()
plt.close()
但Pytork在1.2版之前都没有张量的

这部分
torch.Tensor.ndim=property(lambda x:len(x.size())
您可以添加,并且可以毫无问题地绘制PyTorch张量


Ndim是matplotlib所需的属性

import matplotlib.pyplot as plt   
torch.Tensor.ndim = property(lambda x: len(x.size()))
N = 42
t = torch.rand(N)
plt.plot(t)
plt.show()
plt.close()
但Pytork在1.2版之前都没有张量的

这部分
torch.Tensor.ndim=property(lambda x:len(x.size())
您可以添加,并且可以毫无问题地绘制PyTorch张量


我试着把它放进去,但它只告诉我:'numpy.ndarray'对象没有属性'cpu',然后我取下cpu,它告诉我:'numpy.ndarray'对象没有属性'numpy',最后我去掉了除with语句之外的所有内容,我得到了相同的错误:'Tensor'对象没有属性'ndim'@AdrienDridri请查看我的编辑。我想我理解你的问题:你的x是numpy数组,而y是张量。它对你非常有用!从中学到了很多!我试着把它放进去,但它只告诉我:'numpy.ndarray'对象没有属性'cpu',然后我取下了cpu,它告诉我:'numpy.ndarray'对象没有属性'numpy',最后我取下了除了with语句之外的所有内容,得到了相同的错误:'Tensor'对象没有属性'ndim'@AdrienDridri请查看我的编辑。我想我理解你的问题:你的x是numpy数组,而y是张量。它对你非常有用!从中学到了很多!我觉得我离你更近了,谢谢你提供的信息,它帮助我了解了一些新的东西。我现在有一个错误:TypeError:无法将CUDA张量转换为numpy。首先使用Tensor.cpu()将Tensor复制到主机内存。我觉得我离主机内存更近了,感谢您提供的信息,它帮助我理解了一些新的东西。我现在有一个错误:TypeError:无法将CUDA张量转换为numpy。首先使用Tensor.cpu()将Tensor复制到主机内存。