深度神经网络是一种目前被广泛使用的工具,可以用于图像识别、分类,物体检测,机器翻译等等。深度学习(DeepLearning)是一种学习神经网络各种参数的方法。因此,我们将要介绍的深度学习,指的是构建神经网络结构,并且运用各种深度学习算法训练网络参数,进而解决各种任务。本文从PyTorch环境配置开始。PyTorch是一种Python接口的深度学习框架,使用灵活,学习方便。还有其他主流的深度学习框架,例如Caffe,TensorFlow,CNTK等等,各有千秋。笔者认为,初期学习还是选择一种入门,不要期望全都学会。须知,发力集中才能深入挖掘。乱花渐欲迷人眼,选择适合自己的,从一而终,相信会对科研大有裨益!
一、查看 cuda 版本
在命令行中输入 nvcc --version
nvcc --version
注:电脑环境此前安装好了 cuda,可参考下述教程安装cuda
https://blog.csdn.net/weixin_43848614/article/details/117221384
以python3.8为例,当然其他版本也适用。
经验:
安装cuda10.2(又写作cu102)版本对应的三个组件,是比较稳妥的
国内源容易在安装时自动替换为cpu版本,因此从pytorch官网下载较稳妥
建议使用pip安装,conda安装很可能会安装为cpu版本
点击网址,下载相关镜像文件:https://download.pytorch.org/whl/cu102
首先选择torch,ctrl + F 搜索 [cu102-cp38-cp38-win] 这里cu102 是我们下载的 CUDA 10.2 版本,cp38-cp38 是说我们的 Python 版本是 3.8。如果要安装python3.9那将cp3.8改为cp3.9即可。
whl文件是一个压缩包,包含了所需的所有安装文件和元数据。它其中的文件是编译过得到的二进制文件,而不是C++ 源码。如果是后者,显然系统还需要 C++ 的编译器才能运行文件。
单击即可下载,这里torch版本为1.10.0,我们要去官网查找该版本对应的torchvision 和torchaudio版本。ctrl + F 搜索 [pip install torch==1.10.0] 并且对应cuda为10.2。
因此torchvision需要安装0.11.0版本,torchaudio需要安装0.10.0版本。
在之前的网址中选择torchaudio,ctrl + F 搜索 [cu102-cp38-cp38-win],选择版本为0.10.0的。高亮处单击下载。
同理在之前的网址中选择torchvision,ctrl + F 搜索 [cu102-cp38-cp38-win],选择版本为0.11.0的。高亮处单击下载。
下载了3个.whl文件,建议都安装到同一个文件夹下,比如D:\pytorch_whl
下载完成后,将三个镜像文件放入一个文件夹,推荐创建一个新的虚拟环境安装。
pip 方式的创建虚拟环境见下方链接内容
https://blog.csdn.net/weixin_43848614/article/details/131906596
本人习惯使用pip方式,如果安装 Anaconda 的话,使用conda的命令创建虚拟环境。
Anaconda 操作:
默认大家都安装好Anaconda了。在开始菜单中搜索anaconda Prompt,点击进入。
创建python虚拟环境:
conda create -n your_env_name python=x.x
这里your_env_name表示你即将安装的虚拟环境的名字,x.x表示python版本。我这里设置名称为gym_gpu,安装的python版本为3.8,于是输入 conda create -n gym_gpu python=3.8 后回车:
conda activate your_env_name
pip install F:\pytorch_whl\torch-1.10.0+cu102-cp38-cp38-win_amd64.whl
pip install F:\pytorch_whl\torchaudio-0.10.0+cu102-cp38-cp38-win_amd64.whl
pip install F:\pytorch_whl\torchvision-0.11.0+cu102-cp38-cp38-win_amd64.whl
安装过程耐心等待,中间会从安装某些比较大的第三方库。安装结束后需要测试是否成功安装gpu版本的pytorch。
#接着检查cuda,cudnn版本
#首先进入python的交互模式
#python交互模式,直接输入python即可进入
#接着输入下述代码
python
import torch #导入pytorch库
print(torch.cuda.is_available()) #查看是否有cuda
print(torch.backends.cudnn.is_available()) #查看是否有cudnn
print(torch.cuda_version) #打印cuda的版本
print(torch.backends.cudnn.version()) #打印cudnn的版本
#结果如下图
PyG 全称是PyTorch-Geometric,是一个PyTorch基础上的一个库,专门用于图形式的数据,可以加速图学习算法的计算过程,比如稀疏化的图等。
接上文内容,在安装 pytorch 后安装 PyG
进入下述网址后,下载 torch_scatter 、torch_sparse 、torch_cluster 、torch_spline_conv 四个包:
https://data.pyg.org/whl/torch-1.10.0%2Bcu102.html
下载后将四个包放置在同一个文件夹。
可以使用绝对路径安装,也可以cd 安装包的位置后,使用pip安装(注:)
cd /d D:\XXX\XX\ # 安装包所存的位置
pip install torch_scatter-2.0.5-cp38-cp38-win_amd64.whl
pip install torch_sparse-0.6.7-cp38-cp38-win_amd64.whl
pip install torch_cluster-1.5.7-cp38-cp38-win_amd64.whl
pip install torch_spline_conv-1.2.0-cp38-cp38-win_amd64.whl
pip install torch-geometric
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch_geometric.nn import MessagePassing
from torch_geometric.utils import softmax, add_remaining_self_loops
class GATConv(MessagePassing):
def __init__(self, in_feats, out_feats, alpha, drop_prob=0.0):
super().__init__(aggr="add")
self.drop_prob = drop_prob
self.lin = nn.Linear(in_feats, out_feats, bias=False)
self.a = nn.Parameter(torch.zeros(size=(2*out_feats, 1)))
self.leakrelu = nn.LeakyReLU(alpha)
nn.init.xavier_uniform_(self.a)
def forward(self, x, edge_index):
edge_index, _ = add_remaining_self_loops(edge_index)
# 计算 Wh
h = self.lin(x)
# 启动消息传播
h_prime = self.propagate(edge_index, x=h)
return h_prime
def message(self, x_i, x_j, edge_index_i):
# 计算a(Wh_i || wh_j)
e = torch.matmul((torch.cat([x_i, x_j], dim=-1)), self.a)
e = self.leakrelu(e)
alpha = softmax(e, edge_index_i)
alpha = F.dropout(alpha, self.drop_prob, self.training)
return x_j * alpha
if __name__ == "__main__":
conv = GATConv(in_feats=3, out_feats=3, alpha=0.2)
x = torch.rand(4, 3)
edge_index = torch.tensor(
[[0, 1, 1, 2, 0, 2, 0, 3], [1, 0, 2, 1, 2, 0, 3, 0]], dtype=torch.long)
x = conv(x, edge_index)
print(x.shape)
如果你的电脑此前已经安装好了 pytorch,使用下述步骤进行安装
python -c "import torch; print(torch.__version__)"
python -c "import torch; print(torch.version.cuda)"
pip install pyg-lib torch-scatter torch-sparse -f https://data.pyg.org/whl/torch-${TORCH}+${CUDA}.html
把 ${TORCH} 换成 pytorch 的主版本号.次版本号.0。不要管补丁版本!比如你的 pytorch 版本是 1.13.1,这里只需要填 1.13.0 . 其实你可以先访问这个网址,看看它是不是存在。
软件包的命名方式:主版本号.次版本号.补丁版本号。
把 ${CUDA} 换成 cuda 版本或者 cpu。我在这里遇到了另一个坑。我是在 amazon SageMaker Studio Lab里运行的 jupyter lab,开的是 CPU 实例,因此GPU是不可用的(可以用 torch.cuda.is_available()查看)。
命令示例:
pip install pyg-lib torch-scatter torch-sparse -f https://data.pyg.org/whl/torch-1.13.0+cpu.html
安装完毕后,再安装 torch-geometric 即可。
pip install torch-geometric
参考:
https://blog.csdn.net/zzlyw/article/details/78674543
https://zhuanlan.zhihu.com/p/612181449
https://repo.anaconda.com/archive/