20251024_PyTorch深度学习快速入门教程-小土堆
这个教程也不新,19年的了,有up主推荐,应该讲的不错,先看看
将的很细致 非常适合入门 内容实用 快速浏览
1
- Anaconda安装
conda install nb_conda,默认已安装conda install --use-local xxxx_pkg
- cuda、pytorch
python包文档工具
dir():有哪些工具help():工具的使用方法
5
数据加载
torch.utils.data.Dataset类:提供一种方式获取数据及labeltorch.utils.data.Dataloader类:为网络提供不同的数据形式
Tensorboard使用:
- 安装tensorboard
tensorboard.SummaryWriter:默认会存到runs目录
py
writer = SummaryWriter()
writer.add_image()
writer.add_scalar() # title v step
writer.add_graph() # 可用于可视化 模型结构对应的推理过程
writer.close()
# tensorboard --logdir xxx
# tensorboard ----port 6006 ----logdir ../
还有其他功能,可以系统的学习下 这个工具的使用;
Transforms的使用:
- torchvision提供的一个工具箱
PIL.Image.openopencv-python库,cv2.imread
py
transforms.Compose
transforms.ToTensor
transforms.Normalize
transforms.Resize
transforms.RandomCrop
torchvision.datasets.MNIST
Dataloader
- dataset
- batch_size
- shuffle
- num_workers
- drop_last
nn.Module的使用
- 搭建神经网络基本骨架
- nn.function提供了便捷的函数实现,可用于计算
请查阅参考文档,文档很详细;
Conv2d
- input
- in_channels
- out_channels:对应卷积核数量,输入的所有通道各自与一卷积核计算后求和,即一卷积核对应一输出通道,因此输出通道数对应卷积核数;
- kernel
- kernel_size
- stride
- padding
- dilation: controls the spacing between the kernel points;控制感受野的区域(较大的dilation值会减少卷积核覆盖的像素数量,降低计算量)
- bias:一般为True,表示增加偏置
池化层(对应上/下采样的层)
nn.MaxPool2d池化核- Ceil_model 默认为False,无法覆盖池化核的输入不计算结果;
- AdaptiveAvgPool2d
非线性激活,增强模型的非线性表达能力,进而增强模型的泛化能力
nn.ReLUnn.Sigmoid
其他层
nn.BatchNorm2d正则化,可以加快神经网络的训练速度- Transformer Layers
nn.Transformernn.TransformerEncodernn.TransformerDecodernn.TransformerEncoderLayernn.TransformerDecoderLayer
nn.Embeddingnn.Linearnn.Dropout防止过拟合nn.CosineSimilaritynn.MESLoss、nn.CrossEntropyLossnn.Sequential- 序号
- 指定key,输入
OrderedDict
torch.flatten()张量打平
再次强调:
查看文档的重要性;
torchvision.models中提供了丰富的模型可用使用,如resnet18;
Person Keypoint Detection任务;
22
损失函数:
- 均方差
- 交叉熵
反向传播:
- 梯度下降算法
loss.backward()- 一次loss计算 对应的是一个step,记录loss可以在epoch维度(多step loss的均值)或step维度;
优化器 torch.Optim
- 利用梯度设置更新参数的策略/算法
- 学习率lr
optimizer.zero_grad() # 梯度清零 防止梯度累积optimizer.step() # 更新参数
基于现有网络结构进行的一些修改:
py
vgg16 = torchsision.models.vgg16(pretrained=True)
# 新加1层
vgg16.classifier.add_module("add_linear", nn.Linear(1000, 10))
# 修改最后一层
vgg16.classifier[6] = nn.Linear(4096, 10)
模型的读取与保存:
py
# 方式1
torch.save(vgg16, "vgg16_test.pth") # 模型+参数(注意:模型结构的代码 可以不以初始化模型的方式进行调用而存在 但是 模型定义的类 需要参与编译)
torch.load("vgg16_test.pth")
# 方式2
torch.save(vgg16.state_dict(), "vgg16_test.pth") # 参数
# vgg16 = ... # 完成模型结构初始化
vgg16.load_state_dict(torch.load("vgg16_test.pth"))
训练套路
- pytorch官网提供的代码模版
py
dataset
dataloader
model
load
loss_function
optimizer
model.train 对特定层 如dropout batchnormal有用
writer
epoch
step
loss
add_scalar
model.eval/with torch.no_grad()
loss
add_scalar
eval_acc
save
GPU加速
- 修改点
- 网络模型
- 数据(data target)
- 损失函数
- 方式1:
- 调用
.cuda()后重新赋值
- 调用
- 方式2
.to(device)后重新赋值
py
device = torch.device("cpu")
device = torch.device("cuda")
device = torch.device("cuda:0")
device = torch.device("cuda" if torch.cuda.is_avaliable() else "cpu")