我的代码是:grads, _ = tf.clip_by_global_norm ( tf.gradients(self.cost, self.tvars ) , config.max_grad_norm )  

Gradient Clipping的引入是为了处理梯度爆炸的问题。当在一次迭代中权重的更新过于迅猛的话,很容易导致“损失散度”。Gradient Clipping的直观作用就是让权重的更新限制在一个合适的范围。

主要过程:
(1)先设置一个clip_gradient(clip_norm或max_grad_norm)
(2)在前向传播与反向传播之后,我们会得到每个权重的梯度diff,(本文的梯度是由tf.gradients(self.cost, self.tvars)计算而来),这时不像通常那样直接使用这些梯度进行权重更新,而是先求所有权重梯度的平方和再求根号sumsq_diff(global_norm),若clip_gradient > global_norm ,就不进行截取,如果global_norm > clip_gradient,则求缩放因子scale_factor = clip_gradient / global_norm。这个scale_factor在(0,1)之间。
(3)最后将所有的权重梯度乘以这个缩放因子,这时得到的梯度才是最后的梯度信息。

  • 这样就保证了在一次迭代更新中,所有权重的梯度的平方和在一个设定范围以内,这个范围就是clip_gradient。
  • 函数返回截取过的梯度张量列表和一个所有张量的全局范数global_norm。
  • 函数原型:tf.clip_by_global_norm(t_list, clip_norm, use_norm=None, name=None) ,t_list是梯度列表
  • t_list的更新公式:t_list[i] * clip_gradient / max(global_norm, clip_gradient)
  • global_norm = sqrt(sum([l2norm(t)**2 for t in t_list])) 

PS:若global_norm=Infinity(无穷),则返回的梯度列表是nan,来提示有错误

tf.clip_by_global_norm详解相关推荐

  1. tf.unstack() 详解 —》理解为主

    tensorflow中的tf.unstack(): 解释:这是一个对矩阵进行分解的函数,以下为关键参数解释: value:代表需要分解的矩阵变量(其实就是一个多维数组,一般为二维): axis:指明对 ...

  2. tf.cancat() 详解 —》理解为主

    tensorflow 中用来拼接张量的函数tf.concat(),用法: tf.concat([tensor1, tensor2,...], axis) 代码详解-维度变化理解: # 参考:https ...

  3. tf.concat()详解

    tensorflow中用来拼接张量的函数tf.concat(),用法: tf.concat([tensor1, tensor2, tensor3,...], axis) 先给出tf源代码中的解释: t ...

  4. Tensorflow中tf.ConfigProto()详解

    参考Tensorflow Machine Leanrning Cookbook tf.ConfigProto()主要的作用是配置tf.Session的运算方式,比如gpu运算或者cpu运算 具体代码如 ...

  5. tf.where() 详解

    tf.where(tensor) :tensor 为一个bool 型张量,where函数将返回其中为true的元素的索引. tf.where(tensor,a,b):a,b为和tensor相同维度的t ...

  6. tf.ConfigProto()详解

    tf.ConfigProto()主要的作用是配置tf.Session的运算方式,比如gpu运算或者cpu运算 tf.ConfigProto一般用在创建session的时候,用来对session进行参数 ...

  7. tf.log()详解

    tf.log(y) 计算元素 y 的自然对数, y=ex 计算出x 返回一个张量,与 y 具有相同的类型. tensor = tf.constant([[1.0,2.0,3.0],[1.0,2.0,3 ...

  8. tf.name_scope()详解【命名空间其实就是给几个变量包一层名字,方便变量管理】

    命名空间其实就是给几个变量包一层名字,方便变量管理.函数是:tf.name_scope 另外,就像操作系统文件夹命名一样,不同的顶层文件夹下,可以有同名文件夹.这里,不同的命名空间下,可以有名字相同的 ...

  9. tf.transpose详解(能懂版)

    看到网上大部分博客都没说清楚,就来写一篇 tf.transpose()官方例程: def transpose(a, perm=None, name="transpose"):&qu ...

最新文章

  1. cnblogs,我来了
  2. validator的Symbol Coverage没有100%
  3. 中科院大牛带你玩转Python数据分析,大厂offer轻松拿!
  4. python中的作用域_python作用域
  5. SAP Cloud for Customer的duplicate check最后是通过什么模型实现的
  6. 一篇故事看懂从 session-cookie 到 JWT 的技术演变
  7. php中文网是什么需要框架,框架是什么?
  8. mysql 数据增量备份_mysqlmysqldump数据备份和增量备份
  9. 易语言锐浪报表连接mysql_学习锐浪报表之MySQL连接字符串的实际操作步骤汇总...
  10. CF1399B Gifts Fixing
  11. 《别闹了,费曼先生》
  12. VirtualBox虚拟机中安装XP系统
  13. 单片机实验报告-片内外RAM的数据转移
  14. 【UE4 Plugin】5个必备的蓝图插件,极大提高开发效率
  15. 影视解说短视频如何吸引粉丝?三个要点助你吸粉引流
  16. 腾讯、京东、滴滴、字节跳动……15个大厂在数据治理和数据分析上的真实案例
  17. MacOS XPC的使用入门
  18. 华硕服务器系统安装win7系统教程,华硕光盘重装系统win7图文教程
  19. 如何改变图片的大小kb
  20. 全球首颗量子卫星炼成记:“墨子号”打造保密通信新产业

热门文章

  1. win32 010 使用masm32
  2. LaTex - PPT 模板-1 (亲测可用)
  3. linux 加固检测脚本,Linux系统检测和防护脚本
  4. 智能微电网的核心技术
  5. Java web网站访问量的计数
  6. flume系列之:flume基于kafka.topics和kafka.topics.regex两种方式匹配Kafka Topic
  7. Hot Research Topics
  8. Python(1-10章)知识点
  9. U盘重装Win7系统教程
  10. 谈谈像素以及微信小程序的 rpx