torch的拼接函数-ag凯发k8国际
ag凯发k8国际
收集整理的这篇文章主要介绍了
torch的拼接函数_从零开始深度学习pytorch笔记(13)—— torch.optim
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
前文传送门:
从零开始深度学习pytorch笔记(1)——安装pytorch
从零开始深度学习pytorch笔记(2)——张量的创建(上)
从零开始深度学习pytorch笔记(3)——张量的创建(下)
从零开始深度学习pytorch笔记(4)——张量的拼接与切分
从零开始深度学习pytorch笔记(5)——张量的索引与变换
从零开始深度学习pytorch笔记(6)——张量的数学运算
从零开始深度学习pytorch笔记(7)—— 使用pytorch实现线性回归
从零开始深度学习pytorch笔记(8)—— 计算图与自动求导(上)
从零开始深度学习pytorch笔记(9)—— 计算图与自动求导(下)
从零开始深度学习pytorch笔记(10)—— dataset类
从零开始深度学习pytorch笔记(11)—— dataloader类
从零开始深度学习pytorch笔记(12)—— nn.module在该系列的上一篇,我们讲解了nn.module类,本篇我们来聊聊torch.optim。在机器学习和深度学习中,我们在训练阶段通常要不断修改调整参数,使得损失函数最小化,优化算法是一种调整模型参数更新的策略。torch.optim是一个实现各种优化算法的包,大多数常见的的算法都能够直接通过这个包来调用,例如随机梯度下降,加入了动量的随机梯度下降等等。为了使用torch.optim,你需要构建一个optimizer对象。然后,你可以设置optimizer的参数选项,比如学习率,权重衰减,等等。这个对象能够保持当前参数状态并基于计算得到的梯度进行参数更新。optimizer = optim.sgd(model.parameters(), lr = 0.01, momentum=0.9)optimizer = optim.adam([var1, var2], lr = 0.0001)所有的optimizer都实现了step()方法,这个方法会更新所有的参数。它能按两种方式来使用:(1)optimizer.step()这是大多数optimizer所支持的简化版本。一旦梯度被如backward()之类的函数计算好后,我们就可以调用这个函数。#例如:for input, target in dataset: optimizer.zero_grad() output = model(input) loss = loss_fn(output, target) loss.backward() optimizer.step()以上代码的含义是,在每次循环数据集迭代时,首先将优化器初始化清空梯度,然后执行前向传播,计算损失值,误差反向传播,最后更新参数。(2)optimizer.step(closure)一些优化算法例如conjugate gradient和lbfgs需要重复多次计算函数,因此你需要传入一个闭包去允许它们重新计算你的模型。这个闭包应当清空梯度, 计算损失,然后返回。#例如:for input, target in dataset: def closure(): optimizer.zero_grad() output = model(input) loss = loss_fn(output, target) loss.backward() return loss optimizer.step(closure)我们介绍几种优化算法和使用的方法:随机梯度下降:stochastic gradient descent (sgd)sgd算法是从样本中随机抽出一组,训练后按梯度更新一次,然后再抽取一组,再更新一次,在样本量及其大的情况下,可能不用训练完所有的样本就可以获得一个损失值在可接受范围之内的模型了。opt_sgd = torch.optim.sgd(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=false)参数:params (iterable) – 待优化参数的iterable或者是定义了参数组的dictlr (float) – 学习率momentum (float, 可选) – 动量因子(默认:0)weight_decay (float, 可选) – 权重衰减(l2惩罚)(默认:0)dampening (float, 可选) – 动量的抑制因子(默认:0)nesterov (bool, 可选) – 使用nesterov动量(默认:false)动量梯度下降:momentum此时的梯度不再只是当前数据的梯度,而是有一定权重的之前的梯度。要是当前时刻的梯度与历史时刻梯度方向相似,这种趋势在当前时刻则会加强;要是不同,则当前时刻的梯度方向减弱。opt_momentum = torch.optim.sgd(params, lr=, momentum=0.9, dampening=0, weight_decay=0, nesterov=false)参数:params (iterable) – 待优化参数的iterable或者是定义了参数组的dictlr (float) – 学习率momentum (float, 可选) – 动量因子(默认:0)weight_decay (float, 可选) – 权重衰减(l2惩罚)(默认:0)dampening (float, 可选) – 动量的抑制因子(默认:0)nesterov (bool, 可选) – 使用nesterov动量(默认:false)adagrad优化学习率adagrad使学习率适应不同的梯度:梯度越大越陡峭学习率越小,希望步子迈小一点(不希望越过最低点所以步子要小一点),梯度越小越平坦学习率越大希望步子迈大一点。随着时间的推移步长会衰减到0。opt_adagrad = torch.optim.adagrad(params, lr=0.01, lr_decay=0, weight_decay=0)参数:params (iterable) – 待优化参数的iterable或者是定义了参数组的dictlr (float, 可选) – 学习率(默认: 1e-2)lr_decay (float, 可选) – 学习率衰减(默认: 0)weight_decay (float, 可选) – 权重衰减(l2惩罚)(默认: 0)rmsprop(root mean square prop)因为adagrad算法会出现提前停止的现象,所以在rmsprop算法中解决了这个问题,它采用指数加权平均的思想,只将最近的梯度进行累加计算平方。opt_rmsprop = torch.optim.rmsprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=false)参数:params (iterable) – 待优化参数的iterable或者是定义了参数组的dictlr (float, 可选) – 学习率(默认:1e-2)momentum (float, 可选) – 动量因子(默认:0)alpha (float, 可选) – 平滑常数(默认:0.99)eps (float, 可选) – 为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)centered (bool, 可选) – 如果为true,计算中心化的rmsprop,并且用它的方差预测值对梯度进行归一化weight_decay (float, 可选) – 权重衰减(l2惩罚)(默认: 0)adamopt_adam = torch.optim.adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)参数:params (iterable) – 待优化参数的iterable或者是定义了参数组的dictlr (float, 可选) – 学习率(默认:1e-3)betas (tuple[float, float], 可选) – 用于计算梯度以及梯度平方的运行平均值的系数(默认:0.9,0.999)eps (float, 可选) – 为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)weight_decay (float, 可选) – 权重衰减(l2惩罚)(默认: 0)例子:optimizer = torch.optim.sgd(model.parameters(), lr=0.1, momentum=0.9)optimizer.zero_grad()loss_fn(model(input), target).backward()optimizer.step()sgd 是最普通的优化器, 也可以说没有加速效果, 而 momentum 是 sgd 的改良版, 它加入了动量原则. 后面的 rmsprop 又是 momentum 的升级版. 而 adam 又是 rmsprop 的升级版。并不是越先进的优化器, 结果越佳. 我们在自己的试验中可以尝试不同的优化器, 找到那个最适合你数据/网络的优化器。本文主要给出了在pytorch中如何使用这些优化算法,并给出了可调的参数,之后有机会可以仔细讲讲这几个优化算法的数学原理。欢迎关注公众号学习之后的深度学习连载部分~历史文章推荐阅读:从零开始学自然语言处理(六)—— 命名实体识别从零开始学自然语言处理(五)—— 词性标注从零开始学自然语言处理(四)—— 做 nlp 任务文本 id 化与预训练词向量初始化方法从零开始学自然语言处理(三)——手把手带你实现word2vec(skip-gram)从零开始学自然语言处理(二)——手把手带你用代码实现word2vec从零开始学自然语言处理(一)—— jieba 分词你不知道的python环境管理技巧,超级好用!python快速安装库的靠谱办法你只会用python的pip安装包?别错过这些好用功能!扫码下图关注ag凯发k8国际不会让你失望!喜欢记得点再看哦,证明你来看过~总结
以上是ag凯发k8国际为你收集整理的torch的拼接函数_从零开始深度学习pytorch笔记(13)—— torch.optim的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: