PyTorch | 学习笔记2

一.损失函数

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之差的平方

二.优化器Optimizer

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层

四.Normalization

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)

你可能感兴趣的:(深度学习,pytorch,深度学习)