tf.train.GradientDescentOptimizer().minimize()细致探索

1.tf.train.GradientDescentOptimizer().minimize()

其中的minimize可以拆为以下两个步骤:
① 梯度计算
② 将计算出来的梯度应用到变量的更新中
拆开的好处是,可以对计算的梯度进行限制,防止梯度消失和爆炸

#方法1:拆开为两部分
import tensorflow as tf
tf.reset_default_graph()

#创建变量
with tf.variable_scope('var'):
  weights=tf.get_variable(name='w',initializer=tf.constant(2.0))
  input=tf.get_variable(name='x',initializer=tf.constant(3.0))
  loss=weights*input*input  #定义优化器,计算梯度和应用梯度
  print(loss)
  print('weight_name:',weights.name)
  print('input_name:',input.name)


optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.4)
list_of_grad_var1=optimizer.compute_gradients(loss,[weights,input])  #返回list格式为:[(grad1,var_initial1),(grad2,var_initial2)]
list_of_grad_var2=list_of_grad_var1.copy()  #这里不能不加copy(),不加则list_of_grad_var1会跟着list_of_grad_var2变化,最终两个是一模一样的
#也可以用下面这个计算梯度,只是不会返回var_initial
#grad=tf.gradients(loss,[weights,input])

#剪切梯度,防止梯度消失和爆炸
for i,(grad,var_initial) in enumerate(list_of_grad_var1):  #enumerate可以带i
  list_of_grad_var2[i]=(tf.clip_by_norm(grad,10),var_initial)  #这里比较的是2范数,具体公式自己查

#更新变量
train_op=optimizer.apply_gradients(list_of_grad_var2)  #一定要记住,这里是x和w都要被更新的!!!

#执行
config=tf.ConfigProto()
config.gpu_options.allow_growth=True
with tf.Session(config=config) as sess:
  sess.run(tf.global_variables_initializer())
  print(sess.run(list_of_grad_var1))  #原始的梯度(9,12)
  print(sess.run(list_of_grad_var2))  #剪切后的梯度(9,10)
  sess.run(train_op)  #更新loss
  print(sess.run(loss))  #降低的loss:从原来的18降低为了
  #输出
  Tensor("var/mul_1:0", shape=(), dtype=float32)
weight_name: var/w:0
input_name: var/x:0
[(9.0, 2.0), (12.0, 3.0)]
[(9.0, 2.0), (10.0, 3.0)]
-1.6

本人现在的研究方向是:
图像的语义分割,如果有志同道合的朋友,可以组队学习
haiyangpengai@gmail.com qq:1355365561

  • 7
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值