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)
到底为什么啊?求解答!!!