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")
相关推荐
ZhengEnCi几秒前
05-自注意力机制详解 🧠
人工智能·pytorch·深度学习
前端程序媛-Tian16 分钟前
前端 AI 提效实战:从 0 到 1 打造团队专属 AI 代码评审工具
前端·人工智能·ai
weixin_4171970522 分钟前
DeepSeek V4绑定华为:一场飞行中换引擎的国产算力革命
人工智能·华为
翼龙云_cloud1 小时前
阿里云代理商:阿里云深度适配DeepSeek V4让中小企业 AI零门槛上云
人工智能·阿里云·云计算·ai智能体·deepseek v4
MATLAB代码顾问1 小时前
DeepSeek R1:国产开源推理大模型的崛起与实践
人工智能
__Wedream__1 小时前
ICMR2024 | 当对比学习遇上知识蒸馏:轻量超分模型压缩新框架
人工智能·深度学习·计算机视觉·知识蒸馏·超分辨率重建·对比学习
aneasystone本尊1 小时前
OpenClaw 快速入门:从安装到第一次对话
人工智能
aneasystone本尊1 小时前
OpenClaw 接入第一个通道:Telegram
人工智能
IT_陈寒1 小时前
Redis这个内存杀手,差点让我们运维半夜追杀我
前端·人工智能·后端
私人珍藏库1 小时前
【Android】聆听岛[特殊字符]聚合全网音乐[特殊字符]免费听歌下载神器[特殊字符] 聚合音乐平台|无损母带下载|歌词封面同步|免费无广告听歌工具
android·人工智能·工具·软件·多功能