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")
相关推荐
邦爷的AI架构笔记1 分钟前
踩坑3天后,我把公司的AI接口全换成了多模型路由——GPT-6和Claude Opus 4.7同时上线的这周
人工智能·后端
威迪斯特4 分钟前
项目解决方案:某连锁餐饮集团AI后厨与运营安全建设解决方案
人工智能·安全·项目解决方案·ai实时分析·智能餐饮管理·ai视频识别·智能视频分析硬件
上海锝秉工控26 分钟前
总线编码器:工业自动化的“智慧神经”
大数据·人工智能·自动化
海海不掉头发26 分钟前
小白入门大模型强化学习博客
人工智能
信创DevOps先锋27 分钟前
2025项目管理工具生态革命:AI重构协作边界与国产化崛起
人工智能·重构
互联网科技看点31 分钟前
AtlasX Protocol 获 200 万美元种子轮融资
大数据·人工智能·区块链
观远数据43 分钟前
AI优先的BI试点新玩法:如何用自然语言分析重构业务决策流程
大数据·人工智能·数据挖掘
福客AI智能客服43 分钟前
人工智能客服平台:智能客服系统如何重构企业服务效率
人工智能
ShineWinsu1 小时前
告别重复造轮子:Codex写脚本
人工智能
ChoSeitaku1 小时前
NO.3|接入ChatGPT|Gemini|Ollama本地接入DeepSeek
人工智能·chatgpt