1.在PyTorch 0.4.0之后,推荐使用tensor.item()
来获取标量张量的值
2.描述:Traceback (most recent call last): File "/home/xc/PycharmProjects/Liuyafei/test2.py", line 60, in <module> plt.plot(x_train.numpy(), predict, label='Fitting Line') TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
解决办法:这个错误是因为你试图将一个在GPU上的tensor转换为numpy数组,但是这是不可能的。你需要先将tensor转移到CPU上,然后再转换为numpy数组。你可以使用.cpu()
方法来实现这一点。修改后的代码如下:
plt.plot(x_train.cpu().numpy(), predict.cpu().numpy(), label='Fitting Line')
3.描述:
Traceback (most recent call last): File "/home/xc/PycharmProjects/Liuyafei/test2.py", line 59, in <module> plt.plot(x_train.numpy(), y_train.numpy(), 'ro', label='Original data') File "/home/xc/anaconda3/envs/share_env/lib/python3.8/site-packages/matplotlib/_api/__init__.py", line 222, in __getattr__ raise AttributeError( AttributeError: module 'matplotlib' has no attribute 'plot'
解决办法:你需要将import matplotlib as plt
更改为import matplotlib.pyplot as plt
,因为plot
函数是在pyplot
模块中定义的。修改后的代码如下:
import matplotlib.pyplot as plt
4.问题描述:Traceback (most recent call last): File "/home/xc/PycharmProjects/Liuyafei/Logistic/Logistic_test.py", line 77, in <module> plot_y = (-w0 * plot_x - b) / w1 TypeError: unsupported operand type(s) for -: 'numpy.ndarray' and 'Tensor'
解决办法:这个错误是因为在计算 plot_y
时,尝试将一个 numpy 数组(plot_x
)与一个 PyTorch 张量(w0
和 b
)进行运算。为了解决这个问题,你需要将 w0
、w1
和 b
转换为 numpy 数组,然后再进行计算。你可以使用 .detach().cpu().numpy()
方法将 PyTorch 张量转换为 numpy 数组。以下是修改后的代码:
# ...
w0, w1 = logistic_model.lr.weight[0]
w0 = w0.item()
w1 = w1.item()
b = logistic_model.lr.bias.data[0].item()
plot_x = np.arange(30, 100, 0.1)
plot_y = (-w0 * plot_x - b) / w1
plt.plot(plot_x, plot_y)
plt.show()
这样修改后,代码应该可以正常运行并显示逻辑回归模型的决策边界。
5.问题描述:Traceback (most recent call last): File "/home/xc/PycharmProjects/Liuyafei/Logistic/Logistic_test.py", line 57, in <module> loss = criterion(out, y) File "/home/xc/anaconda3/envs/share_env/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl return forward_call(*input, **kwargs) File "/home/xc/anaconda3/envs/share_env/lib/python3.8/site-packages/torch/nn/modules/loss.py", line 613, in forward return F.binary_cross_entropy(input, target, weight=self.weight, reduction=self.reduction) File "/home/xc/anaconda3/envs/share_env/lib/python3.8/site-packages/torch/nn/functional.py", line 3074, in binary_cross_entropy raise ValueError( ValueError: Using a target size (torch.Size([18])) that is different to the input size (torch.Size([18, 1])) is deprecated. Please ensure they have the same size.
解决方法:这个错误是因为在计算损失时,输入和目标的大小不匹配。在这个例子中,out
的大小是 [18, 1]
,而 y
的大小是 [18]
。为了解决这个问题,你需要将 y
转换为与 out
相同的形状。你可以使用 torch.unsqueeze()
函数来实现这一点。修改后的代码如下:
out = logistic_model(x)
y = y.unsqueeze(1) # Add a dimension to y to match the shape of out
loss = criterion(out, y)
6.Traceback (most recent call last):
File "/home/xc/PycharmProjects/Liuyafei/MNIST/net.py", line 18, in <module>
train_dataset = datasets.MNIST(
TypeError: __init__() got an unexpected keyword argument 'transforms'
这个错误是因为在创建MNIST数据集时,传入了一个不支持的关键字参数'transforms'。要解决这个问题,你需要将'transforms'参数替换为正确的参数名。在PyTorch中,MNIST数据集的正确参数名是'transform'。
7.