Pytorch常用层总结

填充

  • 一、🎈torch.nn
  • 二、🛠️ 层选择与参数配置原则
  • ⚠️ 注意事项

提示:以下是本篇文章正文内容,下面案例可供参考

一、🎈torch.nn

层类型 常用参数 参数选择建议与说明
Linear in_features, out_features, bias=True in_features/out_features 由数据维度和输出维度决定。bias 通常为 True
Conv1d in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1 kernel_size 常用 3 或 5。padding 可设为 kernel_size//2 以保持空间分辨率。
Conv2d in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1 in_channels 为输入通道数(如 RGB 图像为 3)。out_channels 通常逐渐增加(如 32, 64, 128)。kernel_size 常用 3x3 或 5x5。padding 常设为 1(对于 3x3 卷积核)以保持尺寸。
Conv3d in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1 用于视频、体积数据。参数选择逻辑类似 Conv2d,但计算量更大。
MaxPool1d kernel_size, stride=None, padding=0, dilation=1 kernel_size 常用 2 或 3,stride 默认同 kernel_size,用于下采样。
MaxPool2d kernel_size, stride=None, padding=0, dilation=1 常用 kernel_size=2, stride=2 将特征图尺寸减半。
Embedding num_embeddings, embedding_dim, padding_idx=None, max_norm=None num_embeddings 至少为词汇表大小。embedding_dim 常用 100-300。
ReLU inplace=False 最常用的激活函数。inplace=True 可节省内存,但需谨慎使用。
Sigmoid - 用于二分类问题的输出层或门控机制。
BatchNorm1d num_features, eps=1e-05, momentum=0.1 num_features 为输入通道数。epsmomentum 通常保持默认。
BatchNorm2d num_features, eps=1e-05, momentum=0.1 用于卷积层后,稳定训练、加速收敛。num_features 为输入通道数。
LayerNorm normalized_shape normalized_shape 指定要归一化的维度(常为特征维度)。对序列数据或小批量大小情况有效。
Dropout p=0.5 p 为丢弃概率,常用 0.1 到 0.5。训练时启用,评估时禁用。
LSTM input_size, hidden_size, num_layers=1, batch_first=False input_size 为输入特征维度。hidden_size 为隐藏状态维度。batch_first=True 可使输入输出为 (batch, seq, feature)
Transformer d_model, nhead, num_encoder_layers=6, num_decoder_layers=6 d_model 为特征维度,nhead 为注意力头数(需能被 d_model 整除)。层数可根据任务复杂度调整。
CrossEntropyLoss weight=None, reduction='mean' 用于多分类。weight 可调整类别权重处理不平衡数据。reduction 默认求平均。
AdaptiveAvgPool2d output_size 将任意尺寸输入池化为固定尺寸 output_size(如 (1, 1) 用于全局平均池化)。

二、🛠️ 层选择与参数配置原则

  1. 理解任务与数据 :选择层类型的首要依据是你的任务(如分类、检测、分割、序列建模)和数据形式(如图像、文本、音频)。
    • 图像 :常用 Conv2d, MaxPool2d, BatchNorm2d, ReLU
    • 文本/序列 :常用 Embedding, LSTM, Transformer, Linear
    • 视频/3D 数据 :考虑 Conv3d
  2. 通道数与维度设置
    • 卷积层 out_channels:通常从较小的数字开始(如 32、64),随网络深度逐渐增加(如 128、256、512)。这有助于网络逐步提取更复杂和抽象的特征。
    • 全连接层 in_features/out_featuresin_features 必须与前一层输出的展平大小匹配。out_features 根据任务设定,如分类任务中的类别数。
    • 嵌入层 embedding_dim:常见范围是 100 到 300,需权衡模型表达能力和计算成本。
    • LSTM/Transformer hidden_size/d_model:根据序列数据的复杂度和计算资源选择,如 128、256、512、768 等。
  3. 卷积核大小 kernel_size:最常用的是 3x3(平衡感受野和参数数量),其次是 1x1(用于调整通道数)、5x5(更大感受野)。一维卷积中也类似,如 3 或 5。
  4. 步长 stride 与填充 padding
    • stride=1(默认)保持空间尺寸,stride=2(或更大)用于下采样。
    • padding 通常设置为 kernel_size // 2(对于奇数的 kernel_size)以保持输入输出的空间维度一致。
  5. 归一化层选择
    • BatchNorm* 在卷积网络和批大小较大时非常有效。
    • LayerNorm 更适用于循环神经网络、Transformer 或批大小较小的情况。
  6. 激活函数选择
    • ReLU 最常用,计算简单且能缓解梯度消失。
    • Sigmoid 主要用于二分类输出层。
  7. Dropout 的 p:通常设置在 0.1 到 0.5 之间。较大的模型或数据较少时可能需要更高的丢弃率来防止过拟合。
  8. 使用 nn.Sequential:可以帮助你清晰地组织网络层,特别是当多个层经常按顺序一起出现时。

⚠️ 注意事项

  • 参数初始化 :PyTorch 层有默认初始化,但有时根据激活函数(如 He init 对于 ReLU 配合 nn.init.kaiming_normal_)进行特定初始化可能更好。
  • 设备放置 :使用 model.to(device)(如 'cuda''cpu')确保模型参数和输入数据在同一设备上。
  • 梯度检查:如果训练出现问题,可以检查特定层的梯度流。
  • 微调与迁移学习 :对于预训练模型,你可能会冻结 前面几层的参数(设置 param.requires_grad = False),只训练顶层或分类器。还可以为不同层设置不同的学习率,例如为 backbone 设置较小的学习率,为新建的分类层设置较大的学习率。

声明:

本文为本人的学习笔记,旨在记录和分享个人在学习过程中的心得体会和原创代码。由于本人刚入门,对相关知识的理解可能还存在不足之处,文章中难免会有错误或不准确的地方。在此,我诚挚地欢迎各位读者在阅读过程中,如果发现任何问题或有其他建议,随时在评论区或通过其他方式与我交流。我将虚心听取大家的意见,及时修正和改进文章内容,以便更好地学习和成长。感谢大家的关注和支持!


相关推荐
小殊小殊4 小时前
【论文笔记】LTX-Video极致速度的视频生成模型
图像处理·人工智能·深度学习
性感博主在线瞎搞4 小时前
【人工智能】神经网络的优化器optimizer(四):Adam自适应动量优化器
人工智能·深度学习·神经网络·性能优化·优化器
paid槮5 小时前
深度学习复习汇总
人工智能·深度学习
Light605 小时前
深度学习 × 计算机视觉 × Kaggle(上):从理论殿堂起步 ——像素、特征与模型的进化之路
人工智能·深度学习·计算机视觉·卷积神经网络·transformer·特征学习
机器学习之心6 小时前
未发表,三大创新!OCSSA-VMD-Transformer-Adaboost特征提取+编码器+集成学习轴承故障诊断
深度学习·transformer·集成学习·ocssa-vmd
Theodore_10226 小时前
机器学习(7)逻辑回归及其成本函数
人工智能·机器学习
大千AI助手6 小时前
GELU(高斯误差线性单元)激活函数全面解析
人工智能·深度学习·神经网络·激活函数·正态分布·gelu·高斯误差线性单元
彩云回7 小时前
LOESS回归
人工智能·机器学习·回归·1024程序员节
Ai173163915797 小时前
英伟达RTX 6000 Ada 和L40S 对比,哪个更适合做深度学习?
图像处理·人工智能·gpt·深度学习·神经网络·机器学习·电脑