梯度剪裁: torch.nn.utils.clip_grad_norm_()

梯度剪裁: torch.nn.utils.clip_grad_norm_()

一、原理

pytorch中梯度剪裁方法为 torch.nn.utils.clip_grad_norm_(parameters, max_norm, norm_type=2)1。三个参数:

parameters:希望实施梯度裁剪的可迭代网络参数
max_norm:该组网络参数梯度的范数上限
norm_type:范数类型

我们来逐段分析其实现代码:

def clip_grad_norm_(parameters, max_norm, norm_type=2):if isinstance(parameters, torch.Tensor):parameters = [parameters]parameters = list(filter(lambda p: p.grad is not None, parameters))max_norm = float(max_norm)norm_type = float(norm_type)

该部分处理了传入的三个参数。首先将parameters中的非空网络参数存入一个列表,然后将max_norm和norm_type类型强制为浮点数。

    if norm_type == inf:total_norm = max(p.grad.data.abs().max() for p in parameters)

该句对无穷范数进行了单独计算,即取所有网络参数梯度范数中的最大值,定义为total_norm:
在这里插入图片描述

    else:total_norm = 0for p in parameters:param_norm = p.grad.data.norm(norm_type)total_norm += param_norm.item() ** norm_typetotal_norm = total_norm ** (1. / norm_type)

对于其他范数,我们计算所有网络参数梯度范数之和,再归一化,即等价于把所有网络参数放入一个向量,再对向量计算范数。将结果定义为total_norm:
在这里插入图片描述

    clip_coef = max_norm / (total_norm + 1e-6)if clip_coef < 1:for p in parameters:p.grad.data.mul_(clip_coef)return total_norm

最后定义了一个“裁剪系数”变量clip_coef,为传入参数max_norm和total_norm的比值(+1e-6防止分母为0的情况)。如果max_norm > total_norm,即没有溢出预设上限,则不对梯度进行修改。反之则以clip_coef为系数对全部梯度进行惩罚,使最后的全部梯度范数归一化至max_norm的值。注意该方法返回了一个 total_norm,实际应用时可以通过该方法得到网络参数梯度的范数,以便确定合理的max_norm值。
在这里插入图片描述

二、使用方法

每一次迭代中,梯度处理的过程应该是:
在这里插入图片描述
因此 torch.nn.utils.clip_grad_norm_() 的使用应该在loss.backward() 之后,**optimizer.step()**之前:

...
loss = crit(...)
optimizer.zero_grad()
loss.backward()
torch.nn.utils.clip_grad_norm_(parameters=model.parameters(), max_norm=10, norm_type=2)
optimizer.step()
...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第六代Spartan FPGA迎接智能边缘互联新挑战

预计到2028年&#xff0c;物联网设备的数量将增加一倍以上&#xff0c;处理能力需求也将同步增长。设备数量的激增会推动产生对于更高数量I/O的需求、对更通用I/O的需求&#xff0c;以及对于边缘端安全解决方案的需求&#xff1b;处理能力需求的提升则需要更强且更有效率的处理…

勾八头歌之数据科学导论—数据采集实战

一、数据科学导论——数据采集基本概念 第1关&#xff1a;巧妇难为无米之炊 第2关&#xff1a;数据采集概念与内涵 二、数据科学导论——数据采集实战 第1关&#xff1a;单网页爬取 import urllib.request import csv import re# ********** Begin ********** # dataurllib.r…

java项目安全性与权限管理实践与探讨

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 身份验证和授权 二. 输入验证和过滤 2.1. 添加OW…

Spring MVC RequestToViewNameTranslator原理解析

在Spring MVC框架中&#xff0c;RequestToViewNameTranslator是一个接口&#xff0c;它用于根据HTTP请求的信息生成对应的视图名称。这一机制在构建动态视图名称的场景中非常有用&#xff0c;尤其是当视图名称需要根据请求参数或请求路径动态生成时。本文将详细解析RequestToVi…

电机应用-步进电机进阶驱动

步进电机梯形加减速 什么是梯形加减速 假设该装置使用步进电机实现物体X的移动&#xff0c;系统要求从A点出发&#xff0c;到B点停止&#xff0c;移动的时间越短越好且系统稳定。 根据步进电机的特性&#xff0c;最大程度加大电机转速&#xff08;提高脉冲频率&#xff09;&a…

10.Java---clone+内部类

一次浅拷贝的过程 打印结果: 一次深拷贝的过程 打印结果: 抽象类和接口的区别 外部类&内部类 1.内部类由static修饰时,不可以是变量 这样就是可以的,他就代表一个常量 2.怎么实例化内部类 当然不可以直接实例化啦! 是这么实例化的,看起来比我们平时麻烦了很多呢! …

SpringCloud OpenFeign 服务接口调用

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第四篇&#xff0c;即介绍 Feign 和 OpenFeign 服务接口调用。 二、概述 2.1 Feign 是什么 Feign 是一…

牛客网KY267 对称平方数1

题目 描述&#xff1a; 打印所有不超过256&#xff0c;其平方具有对称性质的数。如2&#xff0c;11就是这样的数&#xff0c;因为2*24&#xff0c;11*11121。 输入描述&#xff1a; 无任何输入数据 输出描述&#xff1a; 输出具有题目要求的性质的数。如果输出数据不止一组&…

C++程序设计-练手题集合【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下C程序设计中的练手题&#xff0c;以供大家期末复习和考研复习的时候使用。 C程序设计系列文章传送门&#xff1a; 第一章 面向对象基础 第四/五章 函数和类和对象 第六/七/八章 运算符重载/包含与继承/虚函数…

单例模式模板

//单例模板 template <typename T> class Singleton {//使用默认构造和析构函数Singleton() default;~Singleton() default; public://删除默认的移动、拷贝、赋值、取址Singleton(Singleton &&) delete;Singleton(const Singleton &) delete;void op…

hutool导入导出多sheet页的Excel

背景 有个功能需要导入导出多sheet页的Excel&#xff0c;以前用poi搞&#xff0c;想试下用hutool处理一下。接口已弄完&#xff0c;简单总结一下。 导入 controller 正常使用就行&#xff0c;header的参数用来确认租户 ApiOperation(value "导入字段分组excel",…

dolphin schedulerAPI调用(二)——创建任务

&#xff08;作者&#xff1a;陈玓玏&#xff09; API文档地址&#xff1a;http://192.168.3.100:21583/dolphinscheduler/swagger-ui/index.html?languagezh_CN&langcn#/task%20definition%20related%20operation/createTaskDefinitionUsingPOST_1 实际使用中&#x…

vue和js常识

计算属性computed是Vue.js中一种方便的属性类型&#xff0c;用于在模板中进行复杂计算和逻辑处理。它们的特点是具有缓存机制&#xff0c;只有在相关依赖发生改变时才会重新计算&#xff0c;避免不必要的重复计算。 Vue.js 中的基础单位是组件。Vue.js的应用通常由一个个组件构…

场的概念---数量场(标量场)和矢量场介绍理解

目录 一、场的概念 二、场的分类 三、数量场&#xff08;标量场&#xff09;的等值面 四、矢量场中的矢量线 矢量线方程推导&#xff1a; 一、场的概念 场在数学上是指一个向量到另一个向量或数的映射。场指物体在空间中的分布情况。场是用空间位置函数来表征的。在物理学…

热销商品-爬虫销量信息

技术部分详解 1、发送GET请求&#xff1a;使用requests库的get()方法发送GET请求来获取指定网页的内容。在这个例子中&#xff0c;使用了一个自定义的User-Agent&#xff0c;以模拟一个浏览器发送请求。 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) App…

雾锁王国专用服务器设置方法,基于阿里云1分钟开服!

阿里云雾锁王国服务器搭建教程是基于计算巢服务&#xff0c;3分钟即可成功创建Enshrouded游戏服务器&#xff0c;阿里云8核32G雾锁王国专用游戏服务器90元1个月、271元3个月&#xff0c;阿里云服务器网aliyunfuwuqi.com亲自整理雾锁王国服务器详细搭建教程&#xff1a; 一、前…

Golang封装一个request类支持socks和http代理

Golang封装一个request类支持socks和http代理 1. 需要需用国外服务器做代理的时候 2. 需要使用代理服务器做白名单的时候 3. 代码还支持重试机制 封装代码如下 package utilsimport ("bytes""crypto/tls""errors""fmt""io/iou…

全自动内衣洗衣机什么牌子好?热心推荐四款全能硬核的内衣洗衣机

内衣洗衣机这一产品是专为有特殊需求的人士所研发的&#xff0c;其的容量往往都比较小&#xff0c;并且体积也很小巧&#xff0c;安装都非常便捷&#xff0c;作为“家中第二台”补充式洗衣机被很多人推崇&#xff0c;可以作为贴身衣物的专用洗衣机&#xff0c;那么这种内衣洗衣…

Kutools For Excel | 新增 300+ 高级功能

Kutools For Excel 是一个便捷的 Excel 插件&#xff0c;具有 300 多种高级功能&#xff0c;可将各种复杂的任务简化为在 Excel 中的几次单击。 功能强大且用户友好的加载项将为 Excel 用户节省大量工作时间&#xff0c;并大大提高工作效率。支持 Excel 2021 / 2019 / 2016 / …

AIX上的MALLOCTYPE

您可以设置 AIX 中的 MALLOCTYPEwatson 环境变量&#xff0c;以用于 IBM JVM。对于大多数应用程序&#xff0c;因使用该变量而导致性能提升的可能性很低。 特别地&#xff0c;它将有益于所有在代码中大量使用 malloc 调用的应用程序。 Creating the archive (the shared objec…