在tensorflow中,可训练和停止梯度之间的区别是什么

时间:2017-08-10 11:38:38

标签: python machine-learning tensorflow deep-learning

我想知道选项trainable=Falsetf.stop_gradient()之间的区别。如果我使用trainable选项False,我的优化工具会不会考虑变量进行培训吗? 在整个培训过程中,此选项是否使其成为恒定值?

1 个答案:

答案 0 :(得分:4)

  

可训练=假

这里变量值在整个训练过程中都是恒定的。优化器不会将此变量视为训练,也不会考虑梯度更新操作。

  

stop_gradient

在某些情况下,您希望根据某个变量计算op的梯度,同时保持一些其他变量不变;但对于其他操作,您也可以使用这些变量来计算梯度。所以在这里你不能使用trinable=False,因为你需要那些变量来训练其他操作。

stop_gradient对于操作非常有用;您可以选择性地优化操作,选择少数变量,同时保持其他常数。

y1 = tf.stop_gradient(W1x+b1)
y2 = W2y1+b2
cost = cost_function(y2, y)
# this following op wont optimize the cost with respect to W1 and b1
train_op_w2_b2 = tf.train.MomentumOptimizer(0.001, 0.9).minimize(cost)

W1 = tf.get_variable('w1', trainable=False)
y1 = W1x+b1
y2 = W2y1+b2
cost = cost_function(y2, y)
# this following op wont optimize the cost with respect to W1
train_op = tf.train.MomentumOptimizer(0.001, 0.9).minimize(cost)