Reference: 动手学深度学习(Dive into Deep Learning,D2L.ai)与其b站教程
本文作为自己的备忘录,主要记录DL相关算法及应用。代码实现基于PyTorch框架。
环境安装相关
介绍如何给系统和conda换源,以及下载GPU版的Pytorch。
镜像源
由于Great Firewall的存在,我们一般很难通过官方方法安装对应环境(下载速度太慢甚至无法连接)。为了解决下载问题,国内的一些服务器会搭建镜像源,将国外网站的软件包或数据库复制到国内服务器上,以方便国内用户访问;故我们使用软件时也可以将下载源头换成一些镜像源。
这里以中科大镜像源为例,请自行查看帮助中的PyPI、conda、Ubuntu等换源教程,并下载miniconda以方便管理虚拟环境。偷个懒先
下载Pytorch与CUDA
p.s. Python环境为3.9即可(更高版本的Python可能与CUDA不兼容,原因未知)
若需要使用Nvidia GPU,您需要先下载显卡驱动和驱动对应的CUDA(驱动版本和CUDA版本一定要对应上)。用nvcc -V查看CUDA是否安装成功。
下载Pytorch时,若使用官方指引则可能无法访问源;参照阿里云镜像源,将官方指引中的https://download.pytorch.org/whl换成https://mirrors.aliyun.com/pytorch-wheels即可。
综上,我们的安装指令为(此处安装的是CUDA13.0版本):pip install torch torchvision torchaudio --index-url https://https://mirrors.aliyun.com/pytorch-wheels/cu130
安装jupyter
下载jupyter notebook:
pip install jupyter notebook
为了跑通d2l教程的代码,可以使用如下指令下载代码和jupyter记事本。
mkdir d2l-zh && cd d2l-zh
curl https://zh-v2.d2l.ai/d2l-zh-2.0.0.zip -o d2l-zh.zip
unzip d2l-zh.zip && rm d2l-zh.zip
运行jupyter notebook,就能在localhost:8888上愉快地看教程跑代码啦
Pytorch的一些操作
本章节记录Pytorch库的一些方法与技巧。当字典用,等到需要再回来翻翻
自动微分
torch.tensor类似于numpy的数组,但它可以计算、存储梯度。根据求导链式法则,torch可以根据变量的关系创建计算图。我们创建一个tensor,再设一个函数用来计算梯度:
import torch
x = torch.arange(4.0)
x.requires_grad_(True) #设置x是否需要梯度,等同于torch.arange(4.0,requires_grad=True)
#此时 x = tensor([1. ,2. ,3. ,4.])
y = 2 * torch.dot(x,x) #这样y是x的函数
y.backward() #反向向x传播梯度
x.grad() #输出:tensor([ 0., 4., 8., 12.])
# 可以清空x的梯度。
x.grad_zero_()
注意:torch无法计算高维张量的梯度。需要把它转换为标量才可backward()
y = 2 * x * x #这里的*是按分量求积,结果为向量
y.backward()
# RuntimeError: grad can be implicitly created only for scalar outputs,只能对标量结果创建梯度
y.sum().backward() #对y的分量求和后再传播
x.grad()
#此时 x = tensor([0., 2., 4., 6.])
有时也可以把中间变量分离开来,当作新的自变量。要做到这一点,则需要“切断”中间变量与自变量之间的梯度传播:
x.grad.zero_()
y = x * x
u = y.detach() #u相对于y的区别就是从原来的计算图分开,阻止梯度流向x
z = u * x
z.sum().backward()
x.grad == u #tensor([True, True, True, True])