pytorch中AdaGrad优化器源码解读
1. AdaGrad算法
花书中截图,随便找了一张。
2.源码
def step(self, closure=None):"""Performs a single optimization step.Arguments:closure (callable, optional): A closure that reevaluates the modeland returns the loss."""loss = Noneif closure is not None:with torch.enable_grad():loss = closure()for group in self.param_groups:for p in group['params']:if p.grad is None:continuegrad = p.grad # 梯度state = self.state[p]state['step'] += 1if group['weight_decay'] != 0:if p.grad.is_sparse:raise RuntimeError("weight_decay option is not compatible with sparse gradients")# grad = grad + weight*gradgrad = grad.add(p, alpha=group['weight_decay'])# 更新学习率时,采用随step递增后的lr# clr = lr/[1-(step-1)*decay)]clr = group['lr'] / (1 + (state['step'] - 1) * group['lr_decay'])if grad.is_sparse: # 判断稀疏性grad = grad.coalesce() # the update is non-linear so indices must be uniquegrad_indices = grad._indices()grad_values = grad._values()size = grad.size()def make_sparse(values):constructor = grad.newif grad_indices.dim() == 0 or values.dim() == 0:return constructor().resize_as_(grad)return constructor(grad_indices, values, size)state['sum'].add_(make_sparse(grad_values.pow(2)))std = state['sum'].sparse_mask(grad)std_values = std._values().sqrt_().add_(group['eps'])p.add_(make_sparse(grad_values / std_values), alpha=-clr)else:# state['sum']为累计平方梯度# s = s+ value*grad*gradstate['sum'].addcmul_(grad, grad, value=1)# std = sqrt(sum)+ epsstd = state['sum'].sqrt().add_(group['eps'])# 应用更新# p(t)=p(t-1) - clr*grad/stdp.addcdiv_(grad, std, value=-clr)return loss
Pytorch源码与花书中图略有不同,区别在于,源码中学习率增加decay。
pytorch中AdaGrad优化器源码解读相关推荐
- THOR:MindSpore 自研高阶优化器源码分析和实践应用
摘要:这篇文章跟大家分享下THOR的实践应用.THOR算法的部分内容当前已经在MindSpore中开源 本文分享自华为云社区<MindSpore 自研高阶优化器源码分析和实践应用>,原文作 ...
- tensorflow中Adagrad优化器运用
tensorflow中Adagrad优化器运用 Adagrad优化器引用API:tensorflow.keras.optimizers.Adagrad 代码实现: #Adagrad v_w += tf ...
- 一文详解Pytorch中的优化器Optimizer
本文将结合源码与代码示例详细解析Optimizer的五大方法. 1. 前言 优化器主要用在模型训练阶段,用于更新模型中可学习的参数.torch.optim提供了多种优化器接口,比如Adam.RAdam ...
- 【从线性回归到 卷积神经网络CNN 循环神经网络RNN Pytorch 学习笔记 目录整合 源码解读 B站刘二大人 绪论(0/10)】
深度学习 Pytorch 学习笔记 目录整合 数学推导与源码详解 B站刘二大人 目录传送门: 线性模型 Linear-Model 数学原理分析以及源码详解 深度学习 Pytorch笔记 B站刘二大人( ...
- CloudSim介绍和使用,CloudSim下载,CloudSim在IDEA中配置,CloudSim源码解读
CloudSim介绍和使用 1. CloudSim简介: 2. CloudSim提供了以下新的特点: (1)支持大型云计算的基础设施的建模与仿真: (2)一个自足的支持数据中心.服务代理人.调度和分配 ...
- xxl-job源码解读:调度器schedule
xxl-job源码解读:调度器schedule 本文基于xxl-job的2.3.1版本 基本说明 基本原理概述 调用器主要的用于判断定时任务的执行时间,按时调用触发器(trigger),再由触发器去获 ...
- redis源码解读二
上一篇解读了一下SDS,本来觉得完了,但之后想想感觉少点什么,现在我们从使用的角度去梳理一下,大家想想对于字符串, 我们经常使用的有哪几个方法呢?这些方法又是怎么实现的? 在研究上面的几个方法之前我们 ...
- pytorch学习十 ---- 优化器
1.什么是优化器? 首先我们回忆一下机器学习的五大模块:数据.模型.损失函数.优化器.迭代训练 在损失函数中我们会得到一个loss值,即真实标签与预测标签的差异值,对于loss我们通常会采用pytor ...
- Pytorch框架之优化器 Optimizer
Pytorch框架之优化器 Optimizer 基本用法 优化器主要是在模型训练阶段对模型可学习参数进行更新, 常用优化器有 SGD,RMSprop,Adam等 优化器初始化时传入传入模型的可学习参数 ...
最新文章
- internal heap limit reached问题的解决
- oracle pivoting insert 用法简介
- PyTorch随笔-0
- android 解决String.format多语言存在的问题
- 创维37K05HR黑屏有声音故障维修
- Android测试写入文本Log
- 在Firefox 58中,WebAssembly组件性能提升了10倍
- 惠普打印机只打印一半_惠普打印机如何安装 惠普打印机加墨方法【介绍】
- 纽微特纪事:吾是如何被架空的(各位引以为戒)
- 各厂商服务器存储默认管理口登录信息(默认IP、用户名、密码)收集
- python+selenium从excel读取成语到谷歌搜索得到搜索结论数
- wps怎么关闭修改痕迹_WPS文字中如何保留修改痕迹
- 华为交换机基于IP地址划分VLAN配置实验
- 别再让「聪明」害了00后!
- 医学影像后处理服务器系统,医学影像后处理的应用
- 【blue bridge cup】笔记
- python re正则匹配_python—RE正则表达式
- Linux下烧写工具DNW和USB驱动安装
- int8 和 uint8 区别
- 客户端加密服务器端解密文件,RSA(客户端加密/服务器解密)