tensorflow中,从建好loss的graph到输入run()函数的op间还有一个slim.learning.create_train_op的步骤。了解这个步骤的内容就能打通整个tensorflow的优化流程,有助于我们深入理解tensorflow。
learning.create_train_op主要做两件事:计算梯度和把梯度用于更新Variable。 见下面代码
import tensorflow as tf
x1=tf.Variable(5.0)
x2=tf.Variable(3.0, name='chamo')
a = tf.constant(3.0)
y=a*x1+x2/a
opt = tf.train.GradientDescentOptimizer(learning_rate=0.1)
gradient_all=opt.compute_gradients(y)
var_grad=[] #拿到变量列表后可以做很多事情,比如修改大小,去掉某些不用于学习
for (g,v) in gradient_all:
if 'chamo' in v.name:
var_grad.append((g,v))
train_op = opt.apply_gradients(var_grad)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(4):
sess.run(train_op)
y_val, x1_val, x2_val=sess.run([y, x1, x2])
print(y_val)
print(x1_val)
print(x2_val)
负责这两件事情的对象都是我们熟悉的optimizer