tf.clip_by_global_norm函数解析

#coding=utf-8
import tensorflow as tf
import numpy as np
def test_clip_by_global_norm():
    x = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]
    r, use_norm = tf.clip_by_global_norm(x, 10)
    print(r,use_norm)
    #--------use_norm----------
    x_l2 = np.array(x)**2
    print("self use_norm", np.sqrt(sum(x_l2)))
    
if __name__ == '__main__':
    test_clip_by_global_norm()

clip_norm: 10 
use_norm: tf.Tensor(14.282857, shape=(), dtype=float32) 
1.0 / use_norm: tf.Tensor(0.07001401, shape=(), dtype=float32) 
1 / clip_norm: 0.1 
scale_for_finite: tf.Tensor(0.70014006, shape=(), dtype=float32) 
scale: tf.Tensor(0.70014006, shape=(), dtype=float32)
[<tf.Tensor: shape=(), dtype=float32, numpy=0.70014006>, <tf.Tensor: shape=(), dtype=float32, numpy=1.4002801>, <tf.Tensor: shape=(), dtype=float32, numpy=2.1004202>, <tf.Tensor: shape=(), dtype=float32, numpy=2.8005602>, <tf.Tensor: shape=(), dtype=float32, numpy=3.5007002>, <tf.Tensor: shape=(), dtype=float32, numpy=4.2008405>, <tf.Tensor: shape=(), dtype=float32, numpy=4.9009805>, <tf.Tensor: shape=(), dtype=float32, numpy=5.6011205>]
tf.Tensor(14.282857, shape=(), dtype=float32)
self use_norm 14.2828568570857

代码执行过程:如果没有user_norm则使用 use_norm = global_norm(t_list, name) 这个函数指定,它指的是 梯度的均方和 即math_ops.reduce_sum(array_ops.stack(half_squared_norms)),
然后取scale = clip_norm*min(1/use_norm, 1/clip_norm),作为系数,对梯度的每一个分量进行缩放
tf源码:
在这里插入图片描述

tf.clip_by_global_norm的理解
tf.clip_by_global_norm()
tf.clip_by_global_norm详解

tf.clip_by_global_norm理解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值