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.MESLoss、nn.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")
相关推荐
jimmyleeee26 分钟前
Agent安全之七:当智能体之间开始“互相信任”------深入理解 OWASP ASI07 不安全的智能体间通信
人工智能·安全
二哈赛车手26 分钟前
新人笔记---hermes定时功能设计,具体讲解以及可优化点
java·人工智能·笔记·spring·ai·typescript
Fluxproxy27 分钟前
大模型批量数据采集:AI 自动化工作流搭建实战
大数据·人工智能·自动化
AAwangzong30 分钟前
AI时代RPA技术解析:如何构建兼顾流程执行与智能决策的自动化平台?
人工智能·经验分享·rpa·智能体
达达表哥37 分钟前
AI综合站商业分发系统v3.1纯净版发布 附完整安装教程(排版修正版)
人工智能
众壹新能源科技1 小时前
逆变器直流开关柜温度监测与预防:红外巡检发现3个120度热点
运维·人工智能·自动化
NeoGressAI外贸数字化1 小时前
外贸独立站robots.txt怎么写:6个AI爬虫放行规则
人工智能·爬虫
米软科技1 小时前
数字化转型:多元化集团如何构建高效的AI数字化中台?
大数据·人工智能
幼儿园蛋小黄1 小时前
从 STM32N647 的 AI 部署入门嵌入式:一条可落地的学习路线
人工智能·stm32·学习
Leo.yuan1 小时前
Dora企业级Data Agent应用指南:存量BI复用、私有化部署与权限管理
大数据·人工智能