Python Day41
Task:
1.数据增强
2.卷积神经网络定义的写法
3.batch归一化:调整一个批次的分布,常用与图像数据
4.特征图:只有卷积操作输出的才叫特征图
5.调度器:直接修改基础学习率
卷积操作常见流程如下:
- 输入 → 卷积层 → Batch归一化层(可选) → 池化层 → 激活函数 → 下一层
2.Flatten -> Dense (with Dropout,可选) -> Dense (Output)
1. 数据增强(Data Augmentation)
- 作用:通过人工扩展训练数据集,提升模型泛化能力,防止过拟合。
- 常见方法(图像领域):
- 几何变换:旋转、翻转、缩放、裁剪、平移。
- 颜色变换:亮度、对比度、饱和度调整。
- 噪声注入:高斯噪声、椒盐噪声。
- 高级方法:Mixup、CutMix、AutoAugment(自动搜索增强策略)。
2. 卷积神经网络(CNN)定义写法
以PyTorch为例的典型结构:
import torch.nn as nnclass CNN(nn.Module):def __init__(self, num_classes=10):super(CNN, self).__init__()self.features = nn.Sequential(nn.Conv2d(3, 16, kernel_size=3, padding=1), # 输入通道3,输出16nn.BatchNorm2d(16), # BatchNorm层nn.ReLU(),nn.MaxPool2d(2, 2), # 池化层nn.Conv2d(16, 32, kernel_size=3, padding=1),nn.BatchNorm2d(32),nn.ReLU(),nn.MaxPool2d(2, 2))self.classifier = nn.Sequential(nn.Flatten(), # 展平多维特征图nn.Linear(32 * 8 * 8, 128), # 假设展平后大小为32*8*8nn.Dropout(0.5), # Dropout层nn.Linear(128, num_classes))def forward(self, x):x = self.features(x)x = self.classifier(x)return x
3. Batch归一化(Batch Normalization, BN)
- 作用:对每个批次的输入进行标准化(均值0、方差1),加速训练并缓解梯度消失。
- 公式:
[
\hat{x} = \frac{x - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} \quad \text{,} \quad y = \gamma \hat{x} + \beta
]- (\mu_B, \sigma_B):批次均值/方差;(\gamma, \beta):可学习参数。
- 注意事项:
- 训练与推理时行为不同(推理时使用全局统计量)。
- 对batch size敏感(小batch可能效果差)。
4. 特征图(Feature Map)
- 定义:卷积层输出的张量,每个通道对应一个滤波器提取的特征。
- 特点:
- 空间维度(高/宽)可能因步长或填充改变。
- 深度维度等于滤波器数量(如
nn.Conv2d(16, 32, ...)
输出深度32)。
5. 学习率调度器(LR Scheduler)
- 作用:动态调整学习率以平衡训练速度与稳定性。
- 常见类型:
- StepLR:每隔固定epoch衰减。
- CosineAnnealingLR:余弦退火调整。
- ReduceLROnPlateau:基于验证指标动态调整。
- PyTorch示例:
optimizer = torch.optim.Adam(model.parameters(), lr=0.001) scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=5, gamma=0.1) # 每个epoch调用 scheduler.step()
卷积操作标准流程补充
-
卷积块(可重复堆叠):
- 卷积层 → BN层 → 激活函数 → 池化层
(顺序可调,如某些设计将激活置于BN后)
- 卷积层 → BN层 → 激活函数 → 池化层
-
分类头:
Flatten()
→ 全连接层(+Dropout)→ 输出层
(现代网络可能用全局平均池化替代Flatten)
-
扩展设计:
- 残差连接(ResNet):解决深层网络梯度消失。
- 分组卷积(如MobileNet):减少计算量。