20251024_PyTorch深度学习快速入门教程

20251024_PyTorch深度学习快速入门教程-小土堆

https://www.bilibili.com/video/BV1hE411t7RN/

这个教程也不新,19年的了,有up主推荐,应该讲的不错,先看看

将的很细致 非常适合入门 内容实用 快速浏览

1

  • Anaconda安装
    • conda install nb_conda,默认已安装
    • conda install --use-local xxxx_pkg
  • cuda、pytorch

python包文档工具

  • dir():有哪些工具
  • help():工具的使用方法

5

数据加载

  • torch.utils.data.Dataset类:提供一种方式获取数据及label
  • torch.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.open
  • opencv-python库,cv2.imread
py 复制代码
transforms.Compose
transforms.ToTensor
transforms.Normalize
transforms.Resize
transforms.RandomCrop

Torchvision中的数据集

  • 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.ReLU
  • nn.Sigmoid

其他层

  • nn.BatchNorm2d 正则化,可以加快神经网络的训练速度
  • Transformer Layers
    • nn.Transformer
    • nn.TransformerEncoder
    • nn.TransformerDecoder
    • nn.TransformerEncoderLayer
    • nn.TransformerDecoderLayer
  • nn.Embedding
  • nn.Linear
  • nn.Dropout 防止过拟合
  • nn.CosineSimilarity
  • nn.MESLossnn.CrossEntropyLoss
  • nn.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")
相关推荐
迎仔14 小时前
06-AI开发进阶
人工智能
陈天伟教授14 小时前
人工智能应用- 语言处理:01.机器翻译:人类语言的特点
人工智能·自然语言处理·机器翻译
Codebee14 小时前
OoderAgent 相比主流Agent框架的五大核心独特优势
人工智能
home_49814 小时前
与gemini关于神的对话
人工智能·科幻·神学
代码改善世界14 小时前
CANN深度解构:中国AI系统软件的原创性突破与架构创新
大数据·人工智能·架构
Fairy要carry14 小时前
面试-Torch函数
人工智能
aiguangyuan15 小时前
基于BERT的中文命名实体识别实战解析
人工智能·python·nlp
量子-Alex15 小时前
【大模型RLHF】Training language models to follow instructions with human feedback
人工智能·语言模型·自然语言处理
晚霞的不甘15 小时前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频
陈天伟教授15 小时前
人工智能应用- 语言处理:04.统计机器翻译
人工智能·自然语言处理·机器翻译