1.损失函数概念
衡量模型输出与真实标签的差异
nn.CrossEntropyLoss
功能:nn.LogSoftmax()与nn.NLLLoss()结合,进行交叉熵计算
weight:各类别的loss设置权值
ignore_index:忽略某个类别
reduction:计算模式,可为none/sum/mean
2.交叉熵损失函数
交叉熵 = 信息熵 + 相对熵
3.NLL/BCE/BCEWithLogits Loss
nn.NLLLosss
功能:实现负对数似然函数中的负号功能
nn.BCELoss
功能:二分类交叉熵
nn.BCEWithLogitsLoss
功能:结合sigmoid与二分类交叉熵
4.nn.L1Loss
功能:计算inputs与target之差的绝对值
5.nn.MSELoss
功能:计算inputs与target之差的平方
1.什么是优化器
管理并更新模型中可学习参数的值,使得模型输出更接近真实标签
基本方法
zero_grad():清空所管理参数的梯度
step():执行一步更新
add_param_group():添加蚕数组
state_dict():获取优化器当前状态信息字典
load_state_dict():加载状态信息字典
2.Momentum(动量,冲量)
结合当前梯度与上一次更新信息,用于当前更新
3.SGD
params:管理的参数组
lr:初始学习率
momentum:动量系数,贝塔
weight_decay:L2正则化系数
nesterov:是否采用NAG
4.学习率调整策略
学习率控制更新的步伐
①StepLR
功能:等间隔调整学习率
②MultiStepLR
功能:按给定间隔调整学习率
③ExponentialLR
功能:按指数衰减调整学习率
④CosineAnnealingLR
功能:余弦周期调整学习率
⑤ReduceRonPlateau
功能:监控指标,当指标不再变化则调整
⑥LambdaLR
功能:自定义调整策略
⑦总结
有序调整:Step,MultiStep,Exponential,CosineAnnealing
自适应调整:ReduceLROnPleateau
自定义调整:Lambda
Regularization:减小方差的策略
误差 = 偏差 + 方差 + 噪声
偏差度量了学习算法的期望预测与真是结果的偏离程度,即刻画了学习算法本身的拟合能力
方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响
噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界
L2 Regularization = weight decay(权值衰减)
Dropout:随机失活
随机:dropout probability
失活:weight = 0
数据尺度变化:测试时,所有权重乘以1 - drop_prob
nn.Dropout
功能:Dropout层
Why Normalization?
Internal Covariate Shift(ICS):数据尺度/分布异常,导致训练困难
常见的Normalization
Batch Normalization(BN)
Layer Normalization(LN)
Instance Normalization(IN)
Group Normalization(GN)
1.Batch Normalization:批标准化
批:一批数据,通常为mini-batch
标准化:0均值,1方差
_BatchNorm
nn.BatchNorm1d
nn.BatchNorm2d
nn.BatchNorm3d
2.Layer Normalization
nn.LayerNorm
起因:BN不适用于变长的网络,如RNN
思路:逐层计算均值和方差
注意事项
不再有running_mean和running _var
gamma和beta是逐元素的
3.Instance Normalization
nn.InstanceNrom
起因:BN在图像生成中不适用
思路:逐instance(channel)计算均值和方差
4.Group Normalization
nn.GroupNorm
起因:小batch样本中,BN估计的值不准
思路:数据不够,通道来凑
应用场景:大模型(小batch size)任务
1.序列化与反序列化
模型的保存与加载又称为序列化与反序列化
torch.save
torch.load
2.模型保存与加载的两种方式
法1:保存整个Module
torch.save(net,path)
法2:保存模型参数(推荐)
state_dict = net.state_dict()
torch.save(state_dict,path)
3.模型断点续训练
可以解决因某种意外的原因导致模型训练的终止而要重新训练的问题
transfer learning:机器学习分支,研究源域的知识如何应用到目标域
model finetune:模型的迁移学习
1.步骤
获取预训练模型参数
加载模型(load_state_dict)
修改输出层
2.训练方法
固定预训练的参数(requires_grad = False;lr = 0)
Features Extractor较小学习率(params_group)