以下这些函数可以用于解决梯度消失或梯度爆炸问题上。

1. tf.clip_by_value

tf.clip_by_value(
t,
clip_value_min,
clip_value_max,
name=None
)

Returns:A clipped Tensor.

输入一个张量t,把t中的每一个元素的值都压缩在clip_value_min和clip_value_max之间。小于min的让它等于min,大于max的元素的值等于max。

例子:

import tensorflow as tf;
import numpy as np; A = np.array([[1,1,2,4], [3,4,8,5]]) with tf.Session() as sess:
print sess.run(tf.clip_by_value(A, 2, 5)) >>>
[[2 2 2 4]
[3 4 5 5]]

2. tf.clip_by_norm

tf.clip_by_norm(
t,
clip_norm,
axes=None,
name=None
)

Returns:A clipped Tensor.

指对梯度进行裁剪,通过控制梯度的最大范式,防止梯度爆炸的问题,是一种比较常用的梯度规约的方式。

  • t: 输入tensor,也可以是list
  • clip_norm: 一个具体的数,如果\(l_2 \, norm(t)≤clip\_norm\), 则t不变化;否则\(t=\frac{t*clip\_norm}{l_2norm(t)}\)

注意上面的t可以是list,所以最后做比较的时候是将t的二范式和clip_norm作比较。看下面的例子:

a = np.array([2.,5.])
b = tf.clip_by_norm(a, 5)
with tf.Session() as sess:
print(sess.run(tf.norm(a)))
print(sess.run(b)) >>>
5.3851647
[1.8569534 4.6423836]

3. tf.clip_by_average_norm

tf.clip_by_average_norm(
t,
clip_norm,
name=None
)

Returns:A clipped Tensor.

其实和tf.clip_by_norm类似,只不过把\(l_2\,norm(t)\)改成了\(l_2\,norm_avg(t)=\frac{1}{n} \, l_2\,norm(t)\),\(n\)表示t的元素个数。

例子

a = np.array([3, 4]).astype('float32')
e = tf.clip_by_average_norm(a, 1)
with tf.Session() as sess:
print(sess.run(e)) >>>
[1.2 1.6]

验证一下:\(\frac{3*1}{\frac{1}{2}\sqrt{3^2+4^2}}=\frac{3}{2.5}=1.2\)。

4. tf.clip_by_global_norm

tf.clip_by_global_norm(
t_list,
clip_norm,
use_norm=None,
name=None
)

Returns:

  • list_clipped: A list of Tensors of the same type as list_t.
  • global_norm: A 0-D (scalar) Tensor representing the global norm.

注意这里的t_list是a tuple or list of tensors。

global_norm计算公式如下:

\[global\_norm=\sqrt{\sum_i^n{l_2\,norm(t[i])^2}}
\]

如果global_norm>clip_norm,则t_list中所有元素若如下计算:

\[t\_list[i]=\frac{t\_list[i]*clip\_norm}{max(global\_norm,clip\_norm)}
\]

微信公众号:AutoML机器学习

MARSGGBO♥原创

如有意合作或学术讨论欢迎私戳联系~
邮箱:marsggbo@foxmail.com


2018-12-2

TensorFlow学习笔记之--[tf.clip_by_global_norm,tf.clip_by_value,tf.clip_by_norm等的区别]的更多相关文章

  1. TensorFlow学习笔记之--[compute_gradients和apply_gradients原理浅析]

    I optimizer.minimize(loss, var_list) 我们都知道,TensorFlow为我们提供了丰富的优化函数,例如GradientDescentOptimizer.这个方法会自 ...

  2. tensorflow学习笔记——使用TensorFlow操作MNIST数据(2)

    tensorflow学习笔记——使用TensorFlow操作MNIST数据(1) 一:神经网络知识点整理 1.1,多层:使用多层权重,例如多层全连接方式 以下定义了三个隐藏层的全连接方式的神经网络样例 ...

  3. Tensorflow学习笔记2:About Session, Graph, Operation and Tensor

    简介 上一篇笔记:Tensorflow学习笔记1:Get Started 我们谈到Tensorflow是基于图(Graph)的计算系统.而图的节点则是由操作(Operation)来构成的,而图的各个节 ...

  4. Tensorflow学习笔记2019.01.22

    tensorflow学习笔记2 edit by Strangewx 2019.01.04 4.1 机器学习基础 4.1.1 一般结构: 初始化模型参数:通常随机赋值,简单模型赋值0 训练数据:一般打乱 ...

  5. Tensorflow学习笔记2019.01.03

    tensorflow学习笔记: 3.2 Tensorflow中定义数据流图 张量知识矩阵的一个超集. 超集:如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S ...

  6. 深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识

    深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识 在tf第一个例子的时候需要很多预备知识. tf基本知识 香农熵 交叉熵代价函数cross-entropy 卷积神经网络 s ...

  7. 深度学习-tensorflow学习笔记(2)-MNIST手写字体识别

    深度学习-tensorflow学习笔记(2)-MNIST手写字体识别超级详细版 这是tf入门的第一个例子.minst应该是内置的数据集. 前置知识在学习笔记(1)里面讲过了 这里直接上代码 # -*- ...

  8. tensorflow学习笔记(4)-学习率

    tensorflow学习笔记(4)-学习率 首先学习率如下图 所以在实际运用中我们会使用指数衰减的学习率 在tf中有这样一个函数 tf.train.exponential_decay(learning ...

  9. tensorflow学习笔记(3)前置数学知识

    tensorflow学习笔记(3)前置数学知识 首先是神经元的模型 接下来是激励函数 神经网络的复杂度计算 层数:隐藏层+输出层 总参数=总的w+b 下图为2层 如下图 w为3*4+4个   b为4* ...

  10. tensorflow学习笔记(2)-反向传播

    tensorflow学习笔记(2)-反向传播 反向传播是为了训练模型参数,在所有参数上使用梯度下降,让NN模型在的损失函数最小 损失函数:学过机器学习logistic回归都知道损失函数-就是预测值和真 ...

随机推荐

  1. KMP之计算Next数组

    KMP的Next数组:模式串的前缀与后缀的“相交”长度 KMP算法步骤: 1.先算next数组 2.若失配(此时模式串下标为j),利用Next数组求出失配后滑动的新位置 a.Next[j] \geq ...

  2. MYSQL Innodb逻辑存储结构

    转载于网络 这几天在读<MySQL技术内幕 InnoDB存储引擎>,对 Innodb逻辑存储结构有了些了解,顺便也记录一下: 从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放 ...

  3. mysql写shell小技巧

    set global general_log=on;set @file=0x653A2F2F7777772F2F782E706870;set global general_log_file=@file ...

  4. 【矢量绘图工具】Adobe Illustrator (AI) CC 2019 for Mac 23.0

    以上图片来源于互联网分享,如涉及版权问题请联系作者删除. 文章素材来源:风云社区(www.scoee.com) 下载地址:风云社区(www.scoee.com)   [简介] Adobe illust ...

  5. JavaSE_坚持读源码_ClassLoader对象_Java1.7

    ClassLoader java.lang public abstract class ClassLoader extends Object //类加载器的责任就是加载类,说了跟没说一样 A clas ...

  6. Hadoop记录-变更

    1.安装salt-minion sed -i 's/^#//g' /etc/yum.repos.d/centos7.4.repo sed -i 's/enabled=0/enabled=1/g' /e ...

  7. java内部类的作用

    java内部类的作用 定义: 放在一个类的内部的类我们就叫内部类. 二. 作用: 1.内部类可以很好的实现隐藏 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 2 ...

  8. [Android] Android 异步定时任务实现的三种方法(以SeekBar的进度自动实现为例)

    [Android] Android 定时异步任务实现的三种方法(以SeekBar的进度自动实现为例) 一.采用Handler与线程的sleep(long)方法 二.采用Handler与timer及Ti ...

  9. impala系列: 基本命令和jdbc连接

    --======================= 使用impala-shell 登录 --======================= impala-shell --auth_creds_ok_i ...

  10. springboot(十七):过滤器(Filter)和拦截器(Interceptor)

    概述 在做web开发的时候,过滤器(Filter)和拦截器(Interceptor)很常见,通俗的讲,过滤器可以简单理解为“取你所想取”,忽视掉那些你不想要的东西:拦截器可以简单理解为“拒你所想拒”, ...