梯度剪裁: 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,一经查实,立即删除!

相关文章

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

一、数据科学导论——数据采集基本概念 第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…

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

步进电机梯形加减速 什么是梯形加减速 假设该装置使用步进电机实现物体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 是一…

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

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

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…

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

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

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

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

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

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

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

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

【Linux】调试工具 - gdb

目录 一、gdb概述&#xff1a; 二、list&#xff08;查看源文件代码&#xff09;&#xff1a; 三、run&#xff08;运行程序&#xff09;&#xff1a; ​四、断点相关操作&#xff1a; 1、查看断点&#xff1a; 2、在指定行设置断点&#xff1a; 3、在函数入口处设置断…

[计算机效率] 便笺的使用

2.4 便笺 便笺程序是一种方便用户记录、查看和编辑便签的简单应用程序。在Windows系统中&#xff0c;便笺通常作为系统自带的实用工具之一&#xff0c;可以帮助用户快速创建、编辑和组织便签&#xff0c;以便随时记录重要的信息、任务或提醒事项。 便笺程序通常具有以下特点&a…

阿里云企业2核4G5M服务器ECS u1性能测评

阿里云服务器ECS u1实例&#xff0c;2核4G&#xff0c;5M固定带宽&#xff0c;80G ESSD Entry盘优惠价格199元一年&#xff0c;性能很不错&#xff0c;CPU采用Intel Xeon Platinum可扩展处理器&#xff0c;购买限制条件为企业客户专享&#xff0c;实名认证信息是企业用户即可&a…

Metasploit(MSF)使用教程(以ms17_010永恒之蓝为例)

一.Metasploit简介&#xff1a; Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework&#xff0c;简称MSF。是一个免费、可下载的框架&#xff0c;通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数2000多个已知软件漏洞的专业级漏洞攻击工…

如何运用惟客数据CDP客户数据平台构建好用户画像?

​惟客数据CDP是一个企业级客户数据资产平台&#xff0c;能够跨平台整合全域客户数据&#xff0c;统一客户身份&#xff0c;实时全景客户画像&#xff0c;基于大数据计算和挖分析提供深度客户洞察&#xff0c;实现精细化运营和精准营销。部署更轻更快&#xff0c;快速实现企业数…

API接口数据集接口pytorch api接口获取数据

API是应用程序的开发接口&#xff0c;在开发程序的时候&#xff0c;我们有些功能可能不需要从到到位去研发&#xff0c;我们可以拿现有的开发出来的功能模块来使用&#xff0c;而这个功能模块&#xff0c;就叫做库(libary)。比如说&#xff1a;要实现数据传输的安全&#xff0c…

10分钟读懂Diffusion:图解Diffusion扩散模型

数据派THU 本文通过图解的方式让大家快速了解 Diffusion 原理。 [ 导读 ]想必大家都听说过——图像领域大火的深度生成模型Diffusion Model&#xff0c;为了让大家快速了解 Diffusion 原理&#xff0c;这篇文章我们通过图解的方式。希望对你有所帮助&#xff0c;让你在学习和应…

3D Gaussian Splatting for Real-Time Radiance Field Rendering(慢慢啃,还是挺复杂的)

三个关键要素 从相机配准的过程中得到的稀疏点云开始&#xff0c;使用3D Gaussian表示场景; 3D Gaussian: 是连续体积辐射场能够防止不必要的空空间优化。对 3D Gaussion进行交叉优化和密度控制: 优化各向异性血方差对场景精确表示。使用快速可视感知渲染算法来进行快速的训练…

CVE-2024-27199 JetBrains TeamCity 身份验证绕过漏洞2

漏洞简介 TeamCity Web 服务器中发现了第二个身份验证绕过漏洞。这种身份验证旁路允许在没有身份验证的情况下访问有限数量的经过身份验证的端点。未经身份验证的攻击者可以利用此漏洞修改服务器上有限数量的系统设置&#xff0c;并泄露服务器上有限数量的敏感信息。 项目官网…