权值初始化
Xavier初始化
方差一致性:保持数据尺度维持在恰当范围,通常方差为 1
10种初始化方法
Xavier 均匀分布
Xavier 正态分布
Kaiming 均匀分布
Kaiming 正态分布
均匀分布
正态分布
常数分布
正交矩阵初始化
单位矩阵初始化
稀疏矩阵初始化
损失函数
损失函数:衡量模型输出与真实标签的差异
nn.CrossEntropyLoss
功能:nn.LogSoftmax 与 nn.NLLLoss 结合 ,进行交叉熵计算
主要参数:
weight :各类别的 loss 设置权值
ignore_index :忽略某个类别
reduction :计算模式,可为 none/sum/mean
none逐个元素计算
sum所有元素求和,返回标量
mean加权平均,返回标量
nn.NLLLoss
功能:实现负对数似然函数中的 负号功能
主要参数:
weight :各类别的 loss 设置权值
ignore_index :忽略某个类别
reduction :计算模式,可为 none/sum/mean
none逐个元素计算
sum所有元素求和,返回标量
mean加权平均,返回标量
nn.BCELoss
功能:二分类交叉熵
注意事项:输入值取值在[0,1]
主要参数:
weight :各类别的 loss 设置权值
ignore_index :忽略某个类别
reduction :计算模式,可为 none/sum/mean
nn.BCEWithLogitsLoss
功能:结合Sigmoid 与 二分类交叉熵
注意事项:网络最后不加sigmoid 函数
主要参数:
pos_weight :正样本的权值
weight :各类别的 loss 设置权值
ignore_index :忽略某个类别
reduction :计算模式,可为 none/sum/mean
其他loss
nn.L1Loss
计算 inputs 与 target 之差的绝对值
nn.MSELoss
功能:计算 inputs 与 target 之差的平方
nn.SmoothL1Loss
nn.PoissonNLLLoss
功能:泊松分布的负对数似然损失函数
nn.KLDivLoss
功能:计算KLD divergence KL 散度,相对熵
注意事项:需提前将输入计算 log probabilities
如通过nn.logsoftmax
nn.MarginRankingLoss
功能:计算两个向量之间的相似度 ,用于排序任务
特别说明:该方法计算两组数据之间的差异,返回一个 n*n的 loss 矩阵
nn.MultiLabelMarginLoss
多标签分类函数
nn.SoftMarginLoss
功能:计算二分类的 logistic 损失
nn.MultiLabelSoftMarginLoss
功能:SoftMarginLoss 多标签版本
nn.MultiMarginLoss
功能:计算多分类的折页损失
nn.TripletMarginLoss
功能:计算三元组损失,人脸验证中常用
nn.HingeEmbeddingLoss
功能:计算两个输入的相似性,常用于非线性embedding 和半监督学习
nn.CosineEmbeddingLoss
功能:采用余弦相似度计算两个输入的相似性
nn.CTCLoss
计算 CTC 损失,解决时序类数据的分类 Connectionist Temporal Classification
优化器
pytorch的优化器: 管理 并 更新 模型中可学习参数的值,使得模型输出更接近真实标签
e.g.
optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9) optimizer = optim.Adam([var1, var2], lr = 0.0001
基本属性:
defaults :优化器超参数
state :参数的缓存,如 momentum 的缓存
params_groups :管理的参数组
step_count :记录更新次数,学习率调整中使用
基本方法
zero_grad ():清空所管理参数的梯度
pytorch特性: 张量梯度不自动清零
step()step():执行一步更新
add_param_group ():添加参数组
state_dict ():获取优化器当前状态信息 字典
load_state_dict ():加载状态信息字典
十种优化器
optim.SGD :随机梯度下降法
optim.Adagrad :自适应学习率梯度下降法
optim.RMSprop Adagrad 的改进
optim.Adadelta Adagrad 的改进
optim.Adam RMSprop 结合 Momentum
optim.Adamax Adam 增加学习率上限
optim.SparseAdam :稀疏版的 Adam
optim.ASGD :随机平均梯度下降
optim.Rprop :弹性反向传播
optim.LBFGS BFGS 的改进
学习率调整策略
classLRScheduler
主要属性:
optimizer :关联的优化器
last_epoch :记录 epoch 数
base_lrs :记录初始学习率
主要方法:
step() 更新 下一个 epoch 的学习率
StepLR
功能:等间隔调整学习率
主要参数:
step_size :调整间隔数
gamma :调整系数
MultiStepLR
功能:按给定间隔调整学习率
主要参数:
milestones :设定调整时刻数
gamma :调整系数
ExponentialLR
功能:按指数衰减调整学习率
主要参数:
gamma :指数的底
CosineAnnealingLR
功能:余弦周期调整学习率
主要参数:
T_max :下降周期
eta_min :学习率下限
ReduceLRonPlateau
功能:监控指标,当指标不再变化则调整
主要参数:
mode min/max 两种模式
factor :调整系数
patience :“耐心”,接受几次不变化
cooldown :“冷却时间”,停止监控一段时间
verbose :是否打印日志
min_lr :学习率下限
eps :学习率衰减最小值
LambdaLR
功能:自定义调整策略
主要参数:
lr_lambda: function or list
学习率调整小结
有序调整: Step 、 MultiStep 、 Exponential 和 CosineAnnealing
自适应调整: ReduceLROnPleateau
自定义调整: Lambda
学习率初始化
设置较小数: 0.01 、 0.001 、 0.0001
r :学习率下限
eps :学习率衰减最小值
LambdaLR
功能:自定义调整策略
主要参数:
lr_lambda: function or list
学习率调整小结
有序调整: Step 、 MultiStep 、 Exponential 和 CosineAnnealing
自适应调整: ReduceLROnPleateau
自定义调整: Lambda
学习率初始化
设置较小数: 0.01 、 0.001 、 0.0001
搜索最大学习率: 《 Cyclical Learning Rates for Training Neural Networks 》