当前位置:   article > 正文

深度学习从零开始_安装d21

安装d21

在学习深度学习前,我们首先需要搭建一个软件开发平台,我们使用的平台是Pytorch加OpenCV,因此我们需要先安装这两个包。

一. 安装Pytorch以及OpenCV

1. 安装d2l包,方便调取《动手学深度学习》中经常使用的函数和类

在终端输入pip install d21==0.17.5

问题:安装d21包报错Could not find a version that satisfies the requirement d21==0.17.5 (from versions: none)

解决方法:在该源中找不到指定版本,需要手动切换版本下载。pip install -i https://pypi.douban.com/simple/ d2l

2. 安装vscode并添加pythonJupyter等扩展插件,选择合适的python解释器(这里没有使用虚拟环境,因此不用安装anaconda

3. 安装使用Juypter,按ctrl+shift+p,在界面上输入>create,选择Create: Jupyter Notebook,然后就进入到notebook中

打印hello world测试运行

4. 安装opencv

在终端运行pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python==4.5.1.48

问题:安装报错

解决方法:opencv版本与python不对应,需要安装对应版本的opencv,直接运行pip install opencv-python即可

(这里是之前已安装过的)

运行如下代码测试

  1. import cv2
  2. img = cv2.imread('D:/test/QQ.png')
  3. if img is None:
  4.     print('empty image')
  5.     exit()
  6. cv2.namedWindow('image')
  7. cv2.imshow('image', img)
  8. cv2.waitKey()
  9. cv2.destroyAllWindows()

问题:vscode报错no module named cv2,导入cv2包失败

解决方法:选择正确的解释器,即opencv安装的python版本。

5. 安装pytorch

在终端运行pip install torch-1.9.0+cu111-cp38-cp38-win_amd64.wdl

问题:安装报错

解决方法:进入pytorch官网https://pytorch.org/选择合适版本安装

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

(以下为已安装pytorch后显示已安装)

运行如下代码测试

  1. import torch # 如正常则静默
  2. a = torch.Tensor([1.]) # 如正常则静默
  3. a.cuda() # 如正常则返回"tensor([ 1.], device='cuda:0')"
  4. from torch.backends import cudnn # 如正常则静默
  5. print(cudnn.is_acceptable(a.cuda())) # 如正常则返回 "True"

 二、标量、向量、矩阵、Tensor

标量、向量、矩阵是我们在深度学习中会经常用到的数据结构,因此在开始学习前,我们需要首先掌握这三个数据结构的基本知识以及使用Tensor分别表示这三个数据结构以及对其的简单操作

  1. 标量用普通小写字母表示,使用tensor表示则为只有一个元素的张量,如torch.tensor(4.0)
  2. 向量用粗体小写字母表示,使用一维张量表示向量,向量长度只受机器内存限制,例torch.arange(2) ([0, 1, 2]),使用中括号访问向量中的元素,如x[1](1)
  3. 矩阵用粗体大写字母表示,为向量从一阶推广到二阶,用二维张量表示,如torch.arange(6).reshape(2, 3) ([0, 1, 2],[3, 4, 5]),矩阵的转置A.T

tensor基本机制和部分矩阵操作 :

1. Tensor广播机制

  1. x = torch.arange(3, 6).view(1, 3)
  2. print(x)
  3. y = torch.arange(4, 9).view(5, 1)
  4. print(y)
  5. print(x + y)

两个不同形状的Tensor进行运算的时候如果满足一定条件则会触发广播机制,                 使得两个Tensor变为相同的形状后再进行运算,这个条件是两个张量至少有一个张          量至少一个维度为1,剩下的维度还必须与另一个张量对应的维度相同,否则就无           法触发广播机制,运算会报错。

2. 矩阵求和运算

  1. # 创建一个2*3*4的矩阵
  2. A = torch.ones(2, 3, 4)
  3. print(A)
  4. # 在0轴上求和
  5. print(A.sum(axis = 0).size())
  6. # 在1轴上求和
  7. print(A.sum(axis = 1).size())
  8. # 在2轴上求和
  9. print(A.sum(axis = 2).size())

在0轴上求和则形状为(3,4)

在1轴上求和则形状为(2,4)

在2轴上求和则形状为(2,3)

即在哪个轴上求和则哪个轴消失,只剩剩下的轴

3. 矩阵在某一轴上求和后再与原矩阵运算

  1. # 创建5*2的矩阵,矩阵元素取值为0-9
  2. A = torch.arange(10, dtype = torch.float32).reshape(5, 2)
  3. # 创建5*1的矩阵,矩阵元素取值为2-6
  4. B = torch.arange(2, 7, dtype = torch.float32).reshape(5, 1)
  5. print(A)
  6. print(B)
  7. print(A / B)
  8. # 在1轴上求和
  9. print(A.sum(axis = 1))
  10. # 与原矩阵运算
  11. print(A / A.sum(axis = 1, keepdims=True))
  12. print(A / A.sum(axis = 1))

此代码最后一行运行会出现运行时错误The size of tensor a (2) must match the size of tensor b (5) at non-singleton dimension 1

出现这个错误的原因是A和A.sum(axis=1)的形状不匹配,而且不满足广播机制触发的条件(即两个张量中至少有一个张量的其中一个维度为1,

且另一个维度与另一个张量对应的维度相等),因此不能进行除运算,对A进行非降维求和即可实现A / A.sum(A / A.sum(axis = 1, keepdims=True)),如倒二行代码所示。

三、自动求梯度

在深度学习中,我们经常使用梯度下降法来优化模型参数,因此需要经常计算梯度。但梯度计算非常繁琐,且手动计算非常容易出错,因此我们使用Pytorch来自动求梯度

PyTorch提供的autograd包能够根据输入和前向传播过程自动构建计算图,并执行反向传播。

创建一个张量并设置requires_grad=True它将开始自动跟踪在该张量上的所有操作,使用.backward()即可完成所有梯度的计算,梯度会累加进.grad属性中

AutoGrad自动求梯度

  1. # 创建4*4的以1填充的矩阵,并开启自动求梯度
  2. x = torch.ones(4, 4, requires_grad=True)
  3. y = x + 3
  4. z = y ** 3
  5. # 计算矩阵z的平均值(对z进行降维成标量,以进行求和)
  6. out = z.mean()
  7. # 反向传播
  8. out.backward()
  9. # 打印梯度
  10. print(x.grad)

设置requires_grad=True后,该张量的每次计算都会被跟踪,再使用backward()即可   完成所有梯度的计算。在with torch.no_grad():语句内的计算则不会被跟踪,使用detach     函数也可使其之后的计算不再被跟踪,此外直接修改张量的值(X.data也不会被跟踪)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/79179
推荐阅读
相关标签
  

闽ICP备14008679号