Pytorch学习笔记-03 模型创建

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: Pytorch学习笔记-03 模型创建

模型创建步骤



两要素:


构建子模块


init()


拼接子模块


forward()


nn.Module



nn.Module


parameters : 存储管理 nn.Parameter 类

modules : 存储管理 nn.Module 类

buffers :存储管理缓冲属性,如 BN 层中的 running_mean


总结


一个 module 可以包含多个子 module

一个 module 相当于一个运算,必须实现 forward() 函数

每个 module 都有 8 个字典管理它的属性


模型容器 Containers


Sequential

nn.Sequential是 nn.module 的容器,用于 按顺序 包装一组网络层


顺序性 :各网络层之间严格按照顺序构建

自带 forward()forward():自带的 forward 里,通过 for 循环依次执行前向传播运算


ModuleList

nn.ModuleList


append() 在 ModuleList 后面 添加 网络层

extend():拼接 两个 ModuleList

insert() 指定在 ModuleList 中位置 插入 网络层


ModuleLDict

nn.ModuleDict

是 nn.module 的容器,用于包装一组网络层,以 索引 方式调用网络层

主要方法:


clear() 清空 ModuleDict

items() 返回可迭代的键值对 (key value pairs)

keys() 返回字典的键 (key)

values() 返回字典的值 (values)

pop() 返回一对键值,并从字典中删除


总结

nn.Sequential 顺序性 ,各网络层之间严格按顺序执行,常用于 block 构建

nn.ModuleList 迭代性 ,常用于大量重复网构建,通过 for 循环实现重复构建

nn.ModuleDict 索引性 ,常用于可选择的网络层


卷积层


nn.Conv2d

功能:对多个二维信号进行二维卷积

主要参数:


in_channels :输入通道数

out_channels :输出通道数,等价于卷积核个数

kernel_size :卷积核尺寸

stride :步长

padding :填充个数

dilation :空洞卷积大小 (用于增大感受野

groups :分组卷积设置( 模型压缩

bias :偏置

卷积维度:一般情况下 ,卷积核在几个维度上滑动,就是几维卷积


转置卷积

转置卷积又称为反卷积Deconvolution 和部分跨越卷积 Fractionallystrided Convolution ) 用于 对图像进行上采样 UpSample


池化


池化运算:对信号进行收集 ”并 总结 ”,类似水池收集水资源,因而得名池化层


nn.MaxPool2d

功能:对二维信号(图像)进行最大值池化

主要参数:


kernel_size :池化核尺寸

stride :步长

padding :填充个数

dilation :池化核间隔大小

ceil_mode :尺寸向上取整

return_indices :记录池化像素索引


nn.AvgPool2d

功能:对二维信号(图像)进行平均值池化

主要参数:


kernel_size :池化核尺寸

stride :步长

padding :填充个数

ceil_mode :尺寸向上取整

count_include_pad :填充值用


nn.MaxUnpool2d

功能:对二维信号(图像)进行最大值池化上采样

主要参数:


kernel_size :池化核尺寸

stride :步长

padding :填充个数


激活函数


激活函数对特征进行非线性变换,赋予多层神经网络具有深度 的意义


nn.Sigmoid

特性:


输出值在 ( 0,1),符合概率

导数范围是 [0, 0.25)易导致梯度消失

输出为非 0 均值,破坏数据分布

nn.tanh

特性:


输出值在 (-1,1),数据符合 0 均值

导数范围是 (0,1) 易导致梯度消失

nn.ReLU

特性:


输出值均为正数,负半轴导致死神经元

导数是 1, 缓解梯度消失,但易引发梯度爆炸

nn.LeakyReLU

negative_slope : 负半轴斜率


nn.PReLU

init : 可学习斜率


nn.RReLU

lower : 均匀分布下限


特性:


输出值均为正数,负半轴导致死神经元

导数是 1, 缓解梯度消失,但易引发梯度爆炸

nn.LeakyReLU

negative_slope : 负半轴斜率


nn.PReLU

init : 可学习斜率


nn.RReLU

lower : 均匀分布下限

upper 均匀分布上限

目录
打赏
0
0
0
0
8
分享
相关文章
基于昇腾用PyTorch实现传统CTR模型WideDeep网络
本文介绍了如何在昇腾平台上使用PyTorch实现经典的WideDeep网络模型,以处理推荐系统中的点击率(CTR)预测问题。
211 66
用PyTorch从零构建 DeepSeek R1:模型架构和分步训练详解
本文详细介绍了DeepSeek R1模型的构建过程,涵盖从基础模型选型到多阶段训练流程,再到关键技术如强化学习、拒绝采样和知识蒸馏的应用。
99 3
用PyTorch从零构建 DeepSeek R1:模型架构和分步训练详解
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
PyTorch中的`nn.AdaptiveAvgPool2d()`函数用于实现自适应平均池化,能够将输入特征图调整到指定的输出尺寸,而不需要手动计算池化核大小和步长。
436 1
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
Pytorch学习笔记(九):Pytorch模型的FLOPs、模型参数量等信息输出(torchstat、thop、ptflops、torchsummary)
本文介绍了如何使用torchstat、thop、ptflops和torchsummary等工具来计算Pytorch模型的FLOPs、模型参数量等信息。
694 2
Pytorch学习笔记(六):view()和nn.Linear()函数详解
这篇博客文章详细介绍了PyTorch中的`view()`和`nn.Linear()`函数,包括它们的语法格式、参数解释和具体代码示例。`view()`函数用于调整张量的形状,而`nn.Linear()`则作为全连接层,用于固定输出通道数。
230 0
Pytorch学习笔记(六):view()和nn.Linear()函数详解
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
这篇博客文章详细介绍了PyTorch中的nn.MaxPool2d()函数,包括其语法格式、参数解释和具体代码示例,旨在指导读者理解和使用这个二维最大池化函数。
303 0
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
本文介绍了PyTorch中的BatchNorm2d模块,它用于卷积层后的数据归一化处理,以稳定网络性能,并讨论了其参数如num_features、eps和momentum,以及affine参数对权重和偏置的影响。
487 0
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
Pytorch学习笔记(二):nn.Conv2d()函数详解
这篇文章是关于PyTorch中nn.Conv2d函数的详解,包括其函数语法、参数解释、具体代码示例以及与其他维度卷积函数的区别。
619 0
Pytorch学习笔记(二):nn.Conv2d()函数详解
Transformer模型变长序列优化:解析PyTorch上的FlashAttention2与xFormers
本文探讨了Transformer模型中变长输入序列的优化策略,旨在解决深度学习中常见的计算效率问题。文章首先介绍了批处理变长输入的技术挑战,特别是填充方法导致的资源浪费。随后,提出了多种优化技术,包括动态填充、PyTorch NestedTensors、FlashAttention2和XFormers的memory_efficient_attention。这些技术通过减少冗余计算、优化内存管理和改进计算模式,显著提升了模型的性能。实验结果显示,使用FlashAttention2和无填充策略的组合可以将步骤时间减少至323毫秒,相比未优化版本提升了约2.5倍。
111 3
Transformer模型变长序列优化:解析PyTorch上的FlashAttention2与xFormers

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等