基于pytorch的深度学习基础4——损失函数和优化器

四.损失函数和优化器

4.1 均值初始化

为减轻梯度消失和梯度爆炸,选择合适的权重初值。

十种初始化方法

Initialization Methods

  1. Xavie r均匀分布

  2. Xavie r正态分布

  3. Kaiming正态分布

  4. 均匀分布

  5. 正态分布

  6. 常数分布

  7. 正交矩阵初始化

  8. 单位矩阵初始化

  9. 稀疏矩阵初始化

4.2 损失函数

1、nn.CrossEntropyLoss

nn.CrossEntropyLoss(weight=None,

size_average=None,

ignore_index=-100,

reduce=None,

reduction='mean'')

功能: nn.LogSoftmax ()与nn.NLLLoss ()结合,进行

交叉熵计算

主要参数:

• w eigh t:各类别的loss设置权值

ignore _ind e x:忽略某个类别

redu c tion :计算模式,可为none/sum /m e an

none- 逐个元素计算

sum- 所有元素求和,返回标量

2、 nn.NLLLoss

功能:实现负对数似然函数中的负号功能

主要参数:

• weight:各类别的loss设置权值

• ignore_index:忽略某个类别

•reduction:计算模式,可为none/sum /m e an

none-逐个元素计算

nn.NLLLoss(weight=None,

size_average=None,

ignore_index=-100,

reduce=None,

reduction='mean')sum- 所有元素求和,返回标量

m e an-加权平均,返回标量

3、 nn.BCELoss

nn.BCELoss(weight=None,

size_average=None,

reduce=None,

reduction='mean')

功能:二分类交叉熵

注意事项:输入值取值在[0,1]

主要参数:

• weight:各类别的loss设置权值

• ignore_index:忽略某个类别

• reduction:计算模式,可为none/sum /m e an

none-逐个元素计算

4、 nn.BCEWithLogitsLoss

nn.BCEWithLogitsLoss(weight=None,

size_average=None,

reduce=None, reduction='mean',

pos_weight=None)

功能:结合Sigmoid与二分类交叉熵

注意事项:网络最后不加sigmoid函数

主要参数:

• pos _weight :正样本的权值

• weight:各类别的loss设置权值

•ignore_index:忽略某个类别

•reduction :计算模式,可为none/sum /mean

mean-加权平均,返回标量e aum

  1. nn.L1Loss

  2. nn.MSELoss

  3. nn.SmoothL1Loss

  4. nn.PoissonNLLLoss

  5. nn.KLDivLoss

  6. nn.MarginRankingLoss

  7. nn.MultiLabelMarginLoss

  8. nn.SoftMarginLoss

  9. nn.MultiLabelSoftMarginLoss

  10. nn.MultiMarginLoss

  11. nn.TripletMarginLoss

  12. nn.HingeEmbeddingLoss

  13. nn.CosineEmbeddingLoss

  14. nn.CTCLoss -所有元素求和,返回标量

4.3优化器 Optimizer

pytorch的优化器:管理并更新模型中可学习参数的值,使得模型输出更接近真实标签

导数:函数在指定坐标轴上的变化率

方向导数:指定方向上的变化率

梯度:一个向量,方向为方向导数取得最大值的方向

class Optimizer(object):

def init(self, params, defaults):

self.defaults = defaults

self.state = defaultdict(dict)

self.param_groups = []

param_groups = [{'params':

param_groups}]本属性

• defaults:优化器超参数

• state:参数的缓存,如mom en tum的缓存

• params_groups:管理的参数组

• _step_count:记录更新次数,学习率调整中使用

基本方法

• 1.zero_grad():清空所管理参数的梯度

pytorch特性:张量梯度不自动清零

class Optimizer(object):

def zero_grad(self):

for group in self.param_groups:

for p in group['params']:

if p.grad is not None:

p.grad.detach_()

p.grad.zero_()

  1. step():执行一步更新

  2. add_param_group():添加参数组

class Optimizer(object):

def add_param_group(self, param_group):

for group in self.param_groups:

param_set.update(set(group['params']))

self.param_groups.append(param_group)

4.state_dict():获取优化器当前状态信息字典

• 5.load_state_dict() :加载状态信息字典

class Optimizer(object):

def state_dict(self):

return {

'state': packed_state,

'param_groups': param_groups,

}

def load_state_dict(self, state_dict):

学习率

Learning Rate

梯度下降:

𝒘𝒊+𝟏 = 𝒘𝒊 − 𝒈(𝒘𝒊 )

𝒘𝒊+𝟏 = 𝒘𝒊 − LR * 𝒈(𝒘𝒊)

学习率(learning rate)控制更新的步伐

Momentum(动量,冲量):

结合当前梯度与上一次更新信息,用于当前更新

梯度下降:

𝒘𝒊+𝟏 = 𝒘𝒊 − 𝒍𝒓 ∗ 𝒈(𝒘𝒊 )

pytorch中更新公式:

𝒗𝒊 = 𝒎 ∗ 𝒗𝒊−𝟏 + 𝒈(𝒘𝒊 )

𝒘𝒊+𝟏 = 𝒘𝒊 − 𝒍𝒓 ∗ 𝒗𝒊

𝒗𝟏𝟎𝟎 = 𝒎 ∗ 𝒗𝟗𝟗 + 𝒈(𝒘𝟏𝟎𝟎)

= 𝒈(𝒘𝟏𝟎𝟎) + 𝒎 ∗ (𝒎 ∗ 𝒗𝟗𝟖 + 𝒈(𝒘𝟗𝟗))

= 𝒈(𝒘𝟏𝟎𝟎) + 𝒎 ∗ 𝒈(𝒘𝟗𝟗) + 𝒎𝟐 ∗ 𝒗𝟗𝟖

= 𝒈(𝒘𝟏𝟎𝟎) + 𝒎 ∗ 𝒈(𝒘𝟗𝟗) + 𝒎𝟐 ∗ 𝒈(𝒘𝟗𝟖) + 𝒎𝟑 ∗ 𝒗𝟗𝟕

1.optim.SGD

主要参数:

• params:管理的参数组

• lr:初始学习率

• momentum:动量系数,贝塔

• weight_decay:L2正则化系数

• nesterov:是否采用NAG

optim.SGD(params, lr=<object object>,

momentum=0, dampening=0,

weight_decay=0, nesterov=False)

优化器

Optimizer

  1. optim.SGD:随机梯度下降法

  2. optim.Adagrad:自适应学习率梯度下降法

  3. optim.RMSprop: Adagrad的改进

  4. optim.Adadelta: Adagrad的改进

  5. optim.Adam:RMSprop结合Momentum

  6. optim.Adamax:Adam增加学习率上限

  7. optim.SparseAdam:稀疏版的Adam

  8. optim.ASGD:随机平均梯度下降

  9. optim.Rprop:弹性反向传播

  10. optim.LBFGS:BFGS的改进

相关推荐
小雷FansUnion1 小时前
深入理解MCP架构:智能服务编排、上下文管理与动态路由实战
人工智能·架构·大模型·mcp
资讯分享周1 小时前
扣子空间PPT生产力升级:AI智能生成与多模态创作新时代
人工智能·powerpoint
思则变2 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
叶子爱分享2 小时前
计算机视觉与图像处理的关系
图像处理·人工智能·计算机视觉
鱼摆摆拜拜2 小时前
第 3 章:神经网络如何学习
人工智能·神经网络·学习
一只鹿鹿鹿2 小时前
信息化项目验收,软件工程评审和检查表单
大数据·人工智能·后端·智慧城市·软件工程
张较瘦_2 小时前
[论文阅读] 人工智能 | 深度学习系统崩溃恢复新方案:DaiFu框架的原位修复技术
论文阅读·人工智能·深度学习
cver1232 小时前
野生动物检测数据集介绍-5,138张图片 野生动物保护监测 智能狩猎相机系统 生态研究与调查
人工智能·pytorch·深度学习·目标检测·计算机视觉·目标跟踪
漫谈网络2 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
学技术的大胜嗷2 小时前
离线迁移 Conda 环境到 Windows 服务器:用 conda-pack 摆脱硬路径限制
人工智能·深度学习·yolo·目标检测·机器学习