我想知道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/