tf.clip_by_global_norm详解
我的代码是: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详解相关推荐
- tf.unstack() 详解 —》理解为主
tensorflow中的tf.unstack(): 解释:这是一个对矩阵进行分解的函数,以下为关键参数解释: value:代表需要分解的矩阵变量(其实就是一个多维数组,一般为二维): axis:指明对 ...
- tf.cancat() 详解 —》理解为主
tensorflow 中用来拼接张量的函数tf.concat(),用法: tf.concat([tensor1, tensor2,...], axis) 代码详解-维度变化理解: # 参考:https ...
- tf.concat()详解
tensorflow中用来拼接张量的函数tf.concat(),用法: tf.concat([tensor1, tensor2, tensor3,...], axis) 先给出tf源代码中的解释: t ...
- Tensorflow中tf.ConfigProto()详解
参考Tensorflow Machine Leanrning Cookbook tf.ConfigProto()主要的作用是配置tf.Session的运算方式,比如gpu运算或者cpu运算 具体代码如 ...
- tf.where() 详解
tf.where(tensor) :tensor 为一个bool 型张量,where函数将返回其中为true的元素的索引. tf.where(tensor,a,b):a,b为和tensor相同维度的t ...
- tf.ConfigProto()详解
tf.ConfigProto()主要的作用是配置tf.Session的运算方式,比如gpu运算或者cpu运算 tf.ConfigProto一般用在创建session的时候,用来对session进行参数 ...
- tf.log()详解
tf.log(y) 计算元素 y 的自然对数, y=ex 计算出x 返回一个张量,与 y 具有相同的类型. tensor = tf.constant([[1.0,2.0,3.0],[1.0,2.0,3 ...
- tf.name_scope()详解【命名空间其实就是给几个变量包一层名字,方便变量管理】
命名空间其实就是给几个变量包一层名字,方便变量管理.函数是:tf.name_scope 另外,就像操作系统文件夹命名一样,不同的顶层文件夹下,可以有同名文件夹.这里,不同的命名空间下,可以有名字相同的 ...
- tf.transpose详解(能懂版)
看到网上大部分博客都没说清楚,就来写一篇 tf.transpose()官方例程: def transpose(a, perm=None, name="transpose"):&qu ...
最新文章
- cnblogs,我来了
- validator的Symbol Coverage没有100%
- 中科院大牛带你玩转Python数据分析,大厂offer轻松拿!
- python中的作用域_python作用域
- SAP Cloud for Customer的duplicate check最后是通过什么模型实现的
- 一篇故事看懂从 session-cookie 到 JWT 的技术演变
- php中文网是什么需要框架,框架是什么?
- mysql 数据增量备份_mysqlmysqldump数据备份和增量备份
- 易语言锐浪报表连接mysql_学习锐浪报表之MySQL连接字符串的实际操作步骤汇总...
- CF1399B Gifts Fixing
- 《别闹了,费曼先生》
- VirtualBox虚拟机中安装XP系统
- 单片机实验报告-片内外RAM的数据转移
- 【UE4 Plugin】5个必备的蓝图插件,极大提高开发效率
- 影视解说短视频如何吸引粉丝?三个要点助你吸粉引流
- 腾讯、京东、滴滴、字节跳动……15个大厂在数据治理和数据分析上的真实案例
- MacOS XPC的使用入门
- 华硕服务器系统安装win7系统教程,华硕光盘重装系统win7图文教程
- 如何改变图片的大小kb
- 全球首颗量子卫星炼成记:“墨子号”打造保密通信新产业