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 为输入通道数。eps 和 momentum 通常保持默认。 |
| 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) 用于全局平均池化)。 |
二、🛠️ 层选择与参数配置原则
- 理解任务与数据:选择层类型的首要依据是你的任务(如分类、检测、分割、序列建模)和数据形式(如图像、文本、音频)。
- 图像:常用
Conv2d,MaxPool2d,BatchNorm2d,ReLU。 - 文本/序列:常用
Embedding,LSTM,Transformer,Linear。 - 视频/3D 数据:考虑
Conv3d。
- 图像:常用
- 通道数与维度设置:
- 卷积层
out_channels:通常从较小的数字开始(如 32、64),随网络深度逐渐增加(如 128、256、512)。这有助于网络逐步提取更复杂和抽象的特征。 - 全连接层
in_features/out_features:in_features必须与前一层输出的展平大小匹配。out_features根据任务设定,如分类任务中的类别数。 - 嵌入层
embedding_dim:常见范围是 100 到 300,需权衡模型表达能力和计算成本。 - LSTM/Transformer
hidden_size/d_model:根据序列数据的复杂度和计算资源选择,如 128、256、512、768 等。
- 卷积层
- 卷积核大小
kernel_size:最常用的是 3x3(平衡感受野和参数数量),其次是 1x1(用于调整通道数)、5x5(更大感受野)。一维卷积中也类似,如 3 或 5。 - 步长
stride与填充padding:stride=1(默认)保持空间尺寸,stride=2(或更大)用于下采样。padding通常设置为kernel_size // 2(对于奇数的kernel_size)以保持输入输出的空间维度一致。
- 归一化层选择:
BatchNorm*在卷积网络和批大小较大时非常有效。LayerNorm更适用于循环神经网络、Transformer 或批大小较小的情况。
- 激活函数选择:
ReLU最常用,计算简单且能缓解梯度消失。Sigmoid主要用于二分类输出层。
- Dropout 的
p值:通常设置在 0.1 到 0.5 之间。较大的模型或数据较少时可能需要更高的丢弃率来防止过拟合。 - 使用
nn.Sequential:可以帮助你清晰地组织网络层,特别是当多个层经常按顺序一起出现时。
⚠️ 注意事项
- 参数初始化:PyTorch 层有默认初始化,但有时根据激活函数(如 He init 对于 ReLU 配合
nn.init.kaiming_normal_)进行特定初始化可能更好。 - 设备放置:使用
model.to(device)(如'cuda'或'cpu')确保模型参数和输入数据在同一设备上。 - 梯度检查:如果训练出现问题,可以检查特定层的梯度流。
- 微调与迁移学习:对于预训练模型,你可能会冻结前面几层的参数(设置
param.requires_grad = False),只训练顶层或分类器。还可以为不同层设置不同的学习率,例如为 backbone 设置较小的学习率,为新建的分类层设置较大的学习率。
声明:
本文为本人的学习笔记,旨在记录和分享个人在学习过程中的心得体会和原创代码。由于本人刚入门,对相关知识的理解可能还存在不足之处,文章中难免会有错误或不准确的地方。在此,我诚挚地欢迎各位读者在阅读过程中,如果发现任何问题或有其他建议,随时在评论区或通过其他方式与我交流。我将虚心听取大家的意见,及时修正和改进文章内容,以便更好地学习和成长。感谢大家的关注和支持!
