天辰平台注册登录导航站
 
 

pytorch之optim

浏览:次    发布日期:2024-05-26
阅读须知:前段时间到实验室干活儿,帮学长复现了几篇nlp的论文,花了几天草草了解了下pytorch,本专栏纯属个人理解+笔记,内容未必全面详实,若有详细了解pytorch的需求,建议查阅官方文档。

torch.optim模块中,包含了大部分现在已有的流行的优化方法。

使用:

optimizer=optim.Adam(model.parameters())

创建一个optimizer对象,这个对象会保存当前的状态,并根据梯度更新参数。

作用:

根据网络反向传播的梯度信息来更新网络的参数,以起到降低loss函数计算值,

从优化器的作用出发,要使得优化器能够起作用,需要两个主要东西:

  1. 优化器需要知道当前使用的是什么模型的参数空间。因此在训练文件中,正式开始训练前,需要把网络的参数放到优化器中。比如:optimizer=optim.Adam(model.parameters())。
  2. 需要知道反向传播的梯度信息。

使用流程:

首先,在创建优化器对象的时候,要传入网络模型的参数,并设置学习率等优化方法的参数。然后使用函数zero_grad将梯度置为零。接着调用函数backward来进行反向传播计算梯度。最后使用优化器的step函数来更新参数。

    1 	optimizer=optim.Adam(model.parameters())
    2 	fot epoch in range(num_epoches):
    3 		train_loss=0
    4 		for step,(seq, label) in enumerate(data_loader):
    5 			# 损失函数
    6 			loss=criterion(model(seq), label.to(device))
    7 			# 将梯度清零
    8 	        opimizer.zero_grad()
    9 	        # 损失函数backward进行反向传播梯度的计算
   10 	        loss.backward()
   11 	        train_loss +=loss.item()
   12 	        # 使用优化器的step函数来更新参数
   13 	        optimizer.step()
  1. SGD及其改进(加Momentum)
  2. 逐参数适应学习率方法,包括AdaGrad,RMSProp,Adam等

6种算法的介绍以及算法之间的比较:

blog.csdn.net/qq_365892

pytorch十种优化函数:

blog.csdn.net/shanglian

参数:

class Adam(Optimizer):
   #Implements Adam algorithm.  
    
    def __init__(self, params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,
                 weight_decay=0, amsgrad=False):
  

params(iterable)待优化参数的iterable或者是定义了参数组的dict

lr (float,可选):学习率(步长因子),默认le-3=0.001,控制了权重的更新比率.较大的值(如织0.3)在学习率更新前会有更快地初始学习,而较小的值如le-5会令训练收敛到更好的性能。

betas=[beta1,beta2],可选:用于计算梯度以及梯度平方的运行平均值的系数,默认为[0.9,0.999],beta1是一阶矩阵的指数衰减率,beta2是二阶矩阵的指数衰减率,该超参数在稀疏梯度(如在NLP或计算机视觉任务中)应该设置为接近1的数。

eps,epsion:该参数是非常小的数,为了增加数值计算的稳定性而加到分母里的项,默认le-8,为了防止在实现中除以零;

weight_decay,可选:权重衰减,L2乘法,默认0

特点:
1、结合了adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点;
2、对内存需求较小
3、为不同的参数计算不同的自适应学习率
4、也适用于大多非凸优化--适用于大叔据集和高维空间。







平台注册入口