很早前就想弄这东西,正好有空。
这个东西可以很方便的缩放指定层或指定Tensor的梯度。与调整对应变量的学习率一个效果。
Stylegan 里面 MapNet 使用了另外一种基于权重缩放的 学习率缩放方式,算了,效果差不多。

有两个方便的方法可以实现。

  1. 使用 Tensor.register_hook 来调整
import torchx = torch.ones(1, dtype=torch.float32, requires_grad=True)y = x + 0
y.backward()
# 可以看到 x.grad 值为1
print(x.item(), y.item(), x.grad.item())del x.grady = x + 0
y.register_hook(lambda g: g*0.1)
y.backward()
# 可以看到 x.grad 值为0.1,成功缩放梯度
print(x.item(), y.item(), x.grad.item())
  1. 写一个反传算子来实现
import torch
import torch.autogradclass GradScaleOp(torch.autograd.Function):@staticmethoddef forward(ctx, x, scale):scale = torch.as_tensor(scale, dtype=x.dtype, device=x.device)ctx.save_for_backward(scale)return x@staticmethoddef backward(ctx, grad_output):s, = ctx.saved_tensorsreturn grad_output * s, Nonegradscale = GradScaleOp.applyx = torch.ones(1, dtype=torch.float32, requires_grad=True)y = x + 0
y.backward()
# 可以看到 x.grad 值为1
print(x.item(), y.item(), x.grad.item())del x.grady = x + 0
y = gradscale(y, 0.1)
y.backward()
# 可以看到 x.grad 值为0.1,成功缩放梯度
print(x.item(), y.item(), x.grad.item())

pytorch GradScale 梯度缩放算子相关推荐

  1. 梯度消失、梯度爆炸、过拟合问题之神经网络应对方案:数据预处理、批量归一化、非饱和激活函数、梯度缩放和梯度裁剪、权重初始化、提前终止、集成学习、l1l2、Dropout

    数据预处理.批量归一化Batch Normalization.非饱和激活函数.梯度缩放(Gradient Scaling)和梯度裁剪(Gradient Clipping).权重初始化(Xavier+H ...

  2. pytorch得到梯度计算结果

    借助pytorch可以很方便的计算梯度,但需要明确的是: 只有float类型的Tensor才可以 只有最后是一个标量才可以求导,就是最后的值只有大小,不能自带方向 文章目录 逐步计算梯度 完整代码 参 ...

  3. Pytorch(5)-梯度反向传播

    自动求梯度 1. 函数对自变量x求梯度--ax^2+b 2. 网络对参数w求梯度- loss(w,x) 3. 自动求梯度的底层支持--torch.autograd 3.1 Variable 3.1.1 ...

  4. OpenCV--033_2: 图像梯度--Sobel算子

    索贝尔算子(Sobel operator) 主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值.在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量. So ...

  5. 数字图像处理:(1)图像梯度以及算子应用

    1.数学意义上的梯度 在理解图像梯度是什么的时候,我们首先要回忆一下以前学习过得梯度是什么? 见链接: https://blog.csdn.net/m0_37957160/article/detail ...

  6. bert pytorch源码_【PyTorch】梯度爆炸、loss在反向传播变为nan

    点击上方"MLNLP",选择"星标"公众号 重磅干货,第一时间送达 作者丨CV路上一名研究僧 知乎专栏丨深度图像与视频增强 地址丨https://zhuanla ...

  7. pytorch的梯度计算以及backward方法

    基础知识 tensors: tensor在pytorch里面是一个n维数组.我们可以通过指定参数reuqires_grad=True来建立一个反向传播图,从而能够计算梯度.在pytorch中一般叫做d ...

  8. 11-图像梯度-Sobel算子

    图像梯度是指图像某像素在x和y两个方向上的变化率(与相邻像素比较),是一个二维向量,由2个分量组成,X轴的变化.Y轴的变化 . 其中X轴的变化是指当前像素右侧(X加1)的像素值减去当前像素左侧(X减1 ...

  9. 深度学习笔记--pytorch从梯度下降到反向传播BP到线性回归实现,以及API调用和手写数据集的实现

    梯度下降和反向传播 目标 知道什么是梯度下降 知道什么是反向传播 1. 梯度是什么? 梯度:是一个向量,导数+变化最快的方向(学习的前进方向) 回顾机器学习 收集数据 x x x ,构建机器学习模型 ...

最新文章

  1. List 为什么可以实例化ArrayList
  2. 例题3-6 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
  3. LeetCode: 106. Construct Binary Tree from Inorder and Postorder Traversal
  4. 上周新闻回顾:Vista麻烦不断 Office波澜再起(2.26-3.4)
  5. hihocoder #1333 : 平衡树·Splay2
  6. python 列表生成式
  7. 无意中发现的,自己看吧
  8. 后端:50 个 经典 Spring 面试题,值得收藏!
  9. c# 检测cpu使用率[测试通过]
  10. 你有进一步深入理解二分查找吗?
  11. linux 内核参数分析,linux 内核参数VM调优 之 参数调节和场景分析
  12. 更改android的avd的存储路径
  13. 前端页面预览word_html页面在线预览word
  14. 小米电视怎么外接电视盒子?具体操作如下
  15. https 双向认证基本配置学习
  16. DXP2004 warning / error/注意事项
  17. 计算机am3代表,拨开重重迷雾 AMD处理器历代接口解谜
  18. SQL server中提示对象名无效
  19. 电脑如何长截屏截图_持续集成截屏视频-DNRTV上的Jay Flowers和I
  20. java 上传zip压缩文件并且解压

热门文章

  1. (环境搭建+复现)CVE-2020-1472 NetLogon 域内提权漏洞
  2. 怎样将pdf压缩得很小?如何把pdf压缩到最小?怎么把pdf压缩到最小?如何把pdf文档压缩变小?怎么将pdf文档压缩至更小?怎么把pdf压缩到最小方法软件网站有哪些?
  3. pdf怎么压缩文件到最小?如何将pdf文档怎么压缩最小?软件工具在线网站哪个好?
  4. 行测-图形推理-5-一笔画类
  5. 原生JavaScript实现连连看游戏
  6. python rgb转换为gray
  7. 电网负荷调度三维组态软件V2.0
  8. 使用linux的gpio点亮imx6ull的led灯
  9. 最新美团-青龙——5-25
  10. apmserv mysql5.1启动失败,win10系统无法正常运行apmserv显示apache和mysql启动失败怎么办...