1.tf.Variable(0,name=‘steps’,training=True)
创建变量,初始值为0,名称为steps
steps = tf.Variable(0,name='steps',training=True)
2.optim=tf.train.AdamOptimizer(learning_rate=lr)
使用adam优化器,学习率为lr,这里的lr有俩种方式定义,第一种为固定区间内定义学习率tf.piecewise_constant(global_step,qvjian,value)
第二种为学习率指数衰减tf.trian.exponential_decay
3.tf.trainable_variables(),tf.all_variables()
tf.trainable_variables()查看可训练的变量,可以在tf.trainable_variables(scope='var')指定查看scope中的变量。
tf.all_variables()查看所有变量,包括不用训练的lr这种,lr在定义的时候可以选择trainable=False,意思是不进行训练。
4.optim.compute_gradients这里为什么要把梯度摘出来计算,原因是,我们要定义训练模式,以提高训练的速度,因此需要把梯度摘出来。
grads = optim.compute_gradients(loss,var_list = train_varable)
计算loss的梯度,var_list为正向传播的可训练参数。
update=tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update):
train_op = optim.apply_gradients(grads_ave,steps)
tf.GraphKeys.UPDATE_OPS:这是tensorflow的计算图中内置的一个集合,其中会保存一些需要在训练之前完成的操作,并配合tf.control_dependencies()函数使用。
tf.control_dependencies():指定某些操作的依赖关系。
tf.get_collection():从一个collection中取出全部变量,形成列表,key参数中输入的是collection的名称。该函数常常与tf.get_variable()和tf.add_to_collection()一起使用
optim.apply_gradients(grads_ave,steps):返回一个梯度更新。
这个train_op放到sess.run(train_op)执行。