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")
相关推荐
小程故事多_801 小时前
OpenClaw工具引擎架构全解析,AI Agent的“双手”如何落地实操
人工智能·架构·aigc·ai编程·openclaw
qq_452396231 小时前
【AI 架构师】第十篇:Agent 工业化部署 —— 从 FastAPI 到云端全链路监控
网络·人工智能·ai·fastapi
前端摸鱼匠1 小时前
【AI大模型春招面试题11】什么是模型的“涌现能力”(Emergent Ability)?出现条件是什么?
人工智能·算法·ai·自然语言处理·面试·职场和发展
新缸中之脑1 小时前
如何合法地逆向SynthID
人工智能
剑穗挂着新流苏3122 小时前
115_PyTorch 实战:从零搭建 CIFAR-10 完整训练与测试流水线
人工智能·pytorch·深度学习·神经网络
Veggie262 小时前
【Java深度学习】PyTorch On Java 系列课程 第八章 17 :模型评估【AI Infra 3.0】[PyTorch Java 硕士研一课程]
java·人工智能·深度学习
链上杯子3 小时前
《2026 LangChain零基础入门:用AI应用框架快速搭建智能助手》第8课(完结篇):小项目实战 + 部署 —— 构建网页版个人知识库 AI 助手
人工智能·langchain
东方不败之鸭梨的测试笔记3 小时前
AI生成测试用例方案
人工智能·测试用例
笨手笨脚の4 小时前
AI 基础概念
人工智能·大模型·prompt·agent·tool
飞睿科技4 小时前
解析 ESP-AirPuff 泡芙一号的 ESP32-P4 大模型 AI 智能体方案
人工智能