Python 绘制预测值会导致错误:';张量';对象没有属性';ndim&x27;
如何正确地编写代码来绘制此线性回归模型中的预测值 我使用本教程学习线性回归: 我能够成功地实现GPU。我的问题是绘制预测值。我试图寻找解决方案来学习如何将值保持为张量,但似乎我没有这样做的语法知识 我从这里开始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
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复制到主机内存。