基于pytorch的深度学习底子4——丧失函数和优化器

打印 上一主题 下一主题

主题 848|帖子 848|积分 2544

四.丧失函数和优化器
4.1 均值初始化
为减轻梯度消失和梯度爆炸,选择合适的权重初值。
十种初始化方法
Initialization Methods
1. Xavie r均匀分布
2. Xavie r正态分布

4. Kaiming正态分布
5. 均匀分布
6. 正态分布
7. 常数分布
8. 正交矩阵初始化
9. 单元矩阵初始化
10. 稀疏矩阵初始化
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

5. nn.L1Loss
6. nn.MSELoss
7. nn.SmoothL1Loss
8. nn.PoissonNLLLoss
9. nn.KLDivLoss
10. nn.MarginRankingLoss
11. nn.MultiLabelMarginLoss
12. nn.SoftMarginLoss
13. nn.MultiLabelSoftMarginLoss
14. nn.MultiMarginLoss
15. nn.TripletMarginLoss
16. nn.HingeEmbeddingLoss
17. nn.CosineEmbeddingLoss
18. 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_()
2. step():执行一步更新

3. 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
梯度下降:
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

三尺非寒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表