pytorch写神经网络基础
2026/9/14 21:29:11 网站建设 项目流程

一、数据加载

二、神经网络层

1、激活层 nn.ReLU(inplace=False)

inplace:是否原地操作(节约内存)

2、全连接层 nn.Linear(in_features,out_features)

in_features:输入特征数

out_features:输出特征数

3、卷积层 nn.Conv2d(in_channels,out_channels,kernel_size,padding)

in_channels:输入通道数

out_channels:输出通道数

kernel_size:卷积核大小

padding:向外围的填充数

4、转置卷积层 nn.ConvTranspose2d,参数同卷积层

5、池化层

nn.MaxPool2d(kernel_size,stride)

kernel_size:池化窗口大小

stride:池化时的步长

6、自定义池化 nn.AdaptiveAvgPool2d(output_size)

output_size:输出大小

7、Dropout nn.Dropout(p)

p:丢弃概率

8、批量归一化 nn.BatchNorm2d(num_featrues)

num_features:输入通道数

9、nn.Upsample

10、nn.LSTM/nn.GRU

11、自注意力机制 nn.Transformer

12、nn.Sequential

13、nn.ModuleList

三、模式切换

model.train() : 训练模式,启用batchnorm和dropout等

model.eval() : 测试模式

四、抑制过拟合的方法总结

1、数据层面

数据增强:对训练样本进行随机变换,如随机水平翻转,随机裁剪,旋转,色彩抖动等

增加训练数据

2、模型层面

L2正则化:在损失函数中增加权重的平方和惩罚项,让权重趋于更小的值

Dropout:随机丢弃一部分神经元

简化网络结构:

权重初始化:Xavier或Kaiming等初始化方法

3、训练层面

早停法:当监控到训练时验证集准确率不再上升,停止训练并回到最佳模型

学习率调度,训练中降低学习率

标签平滑:不完全指定正确答案

集成学习:训练多个不同初始化的模型,将所有模型结果平均

五、优化器

优化器核心思想优点缺点适用场景
SGD最基础的梯度下降简单、泛化好收敛慢、需调学习率计算机视觉经典任务
SGD + Momentum加入“动量”,模拟惯性加速收敛、减少震荡仍需手动调参ResNet 训练标配
Adam自适应学习率 + 动量收敛快、对学习率不敏感有时泛化不如SGD大多数任务的默认选择
AdamWAdam + 正确的权重衰减泛化更好同上Transformer、现代模型
RMSprop自适应学习率适合非平稳目标使用较少RNN、强化学习
Adagrad累积梯度平方适合稀疏数据学习率会衰减到0NLP 稀疏特征
#SGD+Momentum,momentum=0时为纯SGD optimizer = optim.SGD(model.parameters(),lr=0.01,momentum=0.9,weight_decay=5e-4,nesterov=True) #Adam optimizer = optim.Adam(model.parameters(),lr=0.001,betas=(0.9, 0.999),eps=1e-8,weight_decay=5e-4) #AdamW optimizer = optim.AdamW(model.parameters(),lr=0.001,betas=(0.9, 0.999),eps=1e-8,weight_decay=0.01) #RMSprop optimizer = optim.RMSprop(model.parameters(),lr=0.001,alpha=0.99,eps=1e-8,momentum=0.9,weight_decay=5e-4) #Adagrad optimizer = optim.Adagrad(model.parameters(),lr=0.01,lr_decay=0,weight_decay=5e-4) #Adadelta optimizer = optim.Adadelta(model.parameters(),lr=1.0,rho=0.9,eps=1e-6,weight_decay=5e-4)

六、学习率调度

调度器学习率变化调用频率适用场景
StepLR阶梯下降每个epoch通用,简单
MultiStepLR多阶段下降每个epoch需要精细控制衰减点
ExponentialLR指数平滑下降每个epoch需要平滑衰减
CosineAnnealingLR余弦曲线每个epoch精细收敛,现代常用
ReduceLROnPlateau自适应下降每个epoch(传入指标)无法预判衰减时机
OneCycleLR先升后降每个batch快速训练,Super Convergence
#每step_size乘gamma scheduler = optim.lr_scheduler.StepLR(self.optimizer,step_size=10,gamma=0.1) #milestones的节点乘gamma scheduler = optim.lr_scheduler.MultiStepLR(optimizer, milestones=[10, 20, 30], gamma=0.1) #每个epoch乘gamma scheduler = optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.95) #余弦曲线 scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=30) #自适应下降 scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=5) scheduler.step(test_loss) #OneCycleLR,每个batch后使用,将学习率从很小升到很大再回到很小 scheduler = optim.lr_scheduler.OneCycleLR(optimizer, max_lr=0.01, total_steps=num_epochs * len(train_loader))

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询