我想知道trainable=False选项和tf.stop_gradient()之间的区别。如果我将trainable选项设置为False,我的优化程序是否将不考虑该变量进行训练?
此选项在整个训练过程中是否使它成为恒定值?

最佳答案



在此,变量值在整个训练过程中将保持不变。 Optimizer不会考虑使用此变量进行训练,也不会进行渐变更新操作。



在某些情况下,您需要计算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)

关于python - 在 tensorflow 中,可训练梯度和停止梯度之间有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45612698/

10-12 21:10