2022-02-19
以下函数可用于解决梯度消失或爆炸问题。
tf.clip_by_value(
t,
clip_value_min,
clip_value_max,
name=None
)
:A.
输入一个张量t,将t中每个元素的值压缩在和之间。小于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.
tf.clip_by_norm(
t,
clip_norm,
axes=None,
name=None
)
:A.
指剪裁渐变。通过控制梯度的最大范式来防止梯度爆炸的问题,是一种常用的梯度缩减方法。
注意上面的t可以是一个列表,所以最后的比较是比较t的两个范式总和。请看下面的例子:
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.
tf.clip_by_average_norm(
t,
clip_norm,
name=None
)
:A.
其实和tf.差不多,只是把(l_2,norm(t))改成了(l_2,(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.
tf.clip_by_global_norm(
t_list,
clip_norm,
use_norm=None,
name=None
)
:
请注意,这是一个元组或列表。
计算公式如下:
[_norm=sqrt{sum_i^n{l_2,norm(t[i])^2}}]
如果>,则其中所有元素的计算方式如下:
[t_list[i]=frac{t_list[i]*clip_norm}{max(_norm,clip_norm)}]
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容