入门Pytorch时的一些报错

Anaconda是一个很好的可以管理python环境的工具,推荐大家结合pycharm使用。

我入门时是参照up我的土堆的Pytorch教程来安装学习的,其中也遇到了一些问题。

1. torch.cuda.is_available结果显示False

import torch 
torch.cuda.is_available

用anaconda安装python环境和pytorch,运行以上代码,结果为True说明pytorch是在用GPU运行,但我的是False,明明我安装的GPU版本并且GPU驱动也更新了。

(因为我之前没有装anaconda,所以电脑上本身就有python环境,用电脑本身的环境装的pytorch运行torch.cuda.is_available的结果是True,所以我就很奇怪)

回忆我本地和anaconda上环境的区别,一个是本地是python3.8、anaconda的python3.6,二是本地安装时我使用了pip安装命令,anaconda则使用了conda命令。

我在anaconda上重新安装了python3.8的版本,没有效果,于是再用pip命令安装了一次,结果就成功了。

pip命令和conda有什么区别呀?头痛。。。

2.warn(f"Failed to load image Python extension: {e}")

如果你有出现一下类似的错误:

 那就是由于pytorch和torchvision版本不兼容导致的。可以在anaconda上pip list查看一下自己的版本:

 

 我们到pytorch官网:Start Locally | PyTorch

根据自己的机器环境选择合适的选项,获取安装命令:

 重新安装之前,先执行pip3 uninstall torch torchivision将原来已经安装的版本卸载掉。

可以执行一下pip3 uninstall torchivision,再单独卸载一下torchivision。

执行从官网上获取的命令

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117

在运行程序就不会报错了。

顺便一提,我当时版本是匹配的,但不知道为啥还是报错了。我按以上的步骤重新安装了一下就没事了(虽然版本还是之前的版本。。)

3.torchvision.transforms.ToTensor()需要中间值???

还是在跟着小土堆的视频学习的时候

运行以下代码

# 数据集和transforms结合
import torchvision

dataset_transform = torchvision.transforms.Compose([torchvision.transforms.ToTensor])

train_set = torchvision.datasets.CIFAR10(root="./dataset_transform", train=True, transform=dataset_transform, download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset_transform", train=False, transform=dataset_transform, download=True)


img, target = test_set[0]
print(img)

有以下报错:

D:\PyCharm\Anaconda3\envs\pytorch\python.exe D:/pycharmprojection/conda_test/dataset_torchvision_test.py
Files already downloaded and verified
Files already downloaded and verified
Traceback (most recent call last):
  File "D:/pycharmprojection/conda_test/dataset_torchvision_test.py", line 11, in <module>
    img, target = test_set[0]
  File "D:\PyCharm\Anaconda3\envs\pytorch\lib\site-packages\torchvision\datasets\cifar.py", line 118, in __getitem__
    img = self.transform(img)
  File "D:\PyCharm\Anaconda3\envs\pytorch\lib\site-packages\torchvision\transforms\transforms.py", line 95, in __call__
    img = t(img)
TypeError: __init__() takes 1 positional argument but 2 were given

简直莫名其妙,西八!!!

问题出在torchvision.transforms.ToTensor上,要先声明一个变量tensor_trans(名字随意),令tensor_trans = torchvision.transforms.ToTensor(),然后把下一句改成dataset_transform = torchvision.transforms.Compose([tensor_trans])

改正后代码如下:

# 数据集和transforms结合
import torchvision

tensor_trans = torchvision.transforms.ToTensor()
dataset_transform = torchvision.transforms.Compose([tensor_trans])

train_set = torchvision.datasets.CIFAR10(root="./dataset_transform", transform=dataset_transform, train=True, download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset_transform", transform=dataset_transform, train=False, download=True)

img, target = test_set[0]
print(img)

到底为什么啊?求解答!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值