1. 深度学习环境搭建

1.1 Ubuntu

常用的检查服务器环境的命令:

1.2 Anaconda

镜像配置

Conda环境管理命令

  • 创建环境:conda create -n deep_learning
  • 查看已有环境:conda env list
  • 选择一个环境:conda activate deep_learning
  • 退出当前环境:conda deactivate
  • 删除一个环境:conda env remove -n deep_learning

1.3 PyTorch

  1. 基于清华镜像安装pytorch环境:
    conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch

  2. 查看环境中pytorch版本:conda list | grep pytorch

  3. 测试pytorch是否安装成功,以及cuda是否可用:

1
2
3
4
5
>>> import torch
>>> torch.cuda.is_available()
True
>>> a=torch.ones(1).cuda()
>>> print(a)

常用命令和工具

  • 查看GPU占用情况:gpustat –I (gpustat 需要使用conda安装)
  • 查看驱动详情:watch -n 0.5 nvidia-smi
  • 选择要使用的显卡卡号:export CUDA_VISIBLE_DEVICES=‘2,3’

1.4 开发工具推荐

  • MobaXterm:远程连接工具,较 Xshell 而言,有更多的组件。
  • PyCharm
  • VS code
  • Jupyter

2. PyTorch 基本概念

机器学习的过程主要分成数据、网络、损失、随机梯度下降几个模块,这些模块在pytorch中的对应了不同包的实现。

2.1 DataLoader

DataLoader数据加载 & transforms数据预处理:

  • 指定文件夹为数据集目录,按照固定格式生成数据集;
  • Compose以多种transforms编组,对数据做预处理或者增强;
  • DataLoader则为每次从数据集中随机选取16个的方式进行选取。

2.2 Transforms

Transforms数据预处理:

  • 缩放到固定大小
  • 中心裁剪
  • 随机裁剪
  • 转成Tensor张量的类型

Transforms数据预处理效果:

2.3 Tensor

Tensor张量:Tensor的用法和Numpy中的ndarray非常相似,是PyTorch中重要的操作单元。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from torch import tensor

X=tensor([], requires_grad=True) 由数组生成tensor,并配置自动微分求导
X.shape 张量的尺寸
X.view() 张量尺寸的变形
X.permute(2,1,0) 张量的转置(指定第三维和第一维交换)
X.transpose(2,0,1) 张量的转置(把第三维交换到第一维)
torch.zeros() 全零张量
torch.ones() 全一张量
X.to(device) 指定张量转移到某一设备中
X.to(torch.float32) 张量中数据类型转成torch.float32型
X.cuda() 张量转移到GPU中
X.cpu() 张量转移到CPU中
X.detach().numpy() 张量取消微分并转成numpy数组

2.4 NN

torch.nn神经网络:

1
2
3
4
5
6
7
8
9
10
11
12
nn.Sequential()		序列形式用于组织网络中层级关系
nn.Conv2d() 针对二维数据的卷积网络
nn.BatchNorm2d() 批量归一化操作
nn.ReLU() ReLU非线性层
nn.Sigmoid() Sigmoid非线性层
nn.Flatten() 向量展平,即从三维拉成一维向量
nn.MaxPool2d() 最大池化层
nn.AvgPool2d() 平均池化层
nn.LSTM() 长短周期记忆网络
nn.RNN() 循环神经网络
nn.MultiheadAttention() 多头注意力结构
nn.Transformer() Transfomer编解码结构

2.5 CrossEntropyLoss

torch.nn.loss损失函数:

  • nn.L1Loss():L1绝对值损失
  • nn.SmoothL1Loss:区间平滑的L1损失
  • nn.MSELoss():L2均方误差损失
  • nn.CrossEntropyLoss():交叉熵损失

2.6 Optim

torch.optim优化函数:

  • optim.Adam:自适应动量估计优化法
  • optim.SGD:随机梯度下降法

3. 编写图像分类代码

3.1 基本流程

有监督的深度学习的基本流程:

3.2 准备数据

每个类别各200张图片,并划分成训练集和测试集,分别为160张图片和40张图片,
训练集总共有320张图片,测试集则共有80张图片。

皮卡丘数据集:

可达鸭数据集:

数据集划分:

3.3 网络模型设计

以卷积的方式,设计一个五层的卷积特征提取网络,在每一层都进行一次下采样,将提取到的特征使用全连接的神经网络进行计算,得到最终的二分类预测。

3.4 代码实现

以课程代码为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
## 实现皮卡丘和可达鸭的分类





























4. 学习和编程经验分享

4.1 VS Code 配置

  1. 安装远程连接插件
  1. 配置远程服务器,并远程访问工程目录
  1. 代码调试

4.2 实验经验

  1. 训练挂载到后台,有效防止ssh超时导致的训练终断:
    nohup python -u track.py > …/logs/log_20220613.log 2>&1 &
  2. 挂载到后台的日志,也可以实时查看训练进展:
    tail -fn 100 …/logs/log_20220613.log
  3. 在~/.bashrc中配置一些命令别名,可以节省很多输入命令的时间例如:
    alias “nsw”="watch -n 0.5 nvidia-smi”
    alias “gst”=“gpustat –I”
    alias “ll”="ls -alh“
  4. 要熟悉Linux下的文件系统,以及相对和绝对两种路径的区别:
    绝对路径以”/”开头,相对路径以”…/”开头。
    绝对路径从root目录出发,相对路径从当前目录出发。
  5. 在windows本机安装git,不仅可以用于版本控制,还提供了一个git bash环境方便使用shell命令和脚本。
  6. 将本机和服务器之间配置免密登录,可以省去每次登录输入密码的时间,对VsCode也同样有效。
  7. 在学校服务器上下载代码的时候,可以下载到挂载的数据盘上,数据盘空间很大不会因为磁盘没有空间而导致训练终断。(数据盘的位置一般是/DATA或/data)

4.3 常用科研工具

  1. 阅读文章的工具: ReadPaper、WPS
  2. 数据集下载和SOTA排名:超神经、Paperswithcode
  3. 下载论文的代码:Paperswithcode、Github
  4. Linux命令速查手册
  5. Python开发文档:
  6. 镜像网站:
  7. 神经网络在线模拟可视化

4.4 Other