我想知道选项
trainable=False
和tf.stop_gradient()
之间的区别。如果我将trainable
选项设置为False
,我的优化器会不会忽略该变量进行训练?这个选项是否会使它在整个训练过程中成为一个常数值?trainable=False
和tf.stop_gradient()
之间的区别。如果我将trainable
选项设置为False
,我的优化器会不会忽略该变量进行训练?这个选项是否会使它在整个训练过程中成为一个常数值?在此处,变量值将在整个训练过程中保持不变。优化器不会考虑这个变量进行训练,也不会进行梯度更新操作。trainable=False
在某些情况下,您希望计算一个操作相对于某些变量的梯度,同时保持其他变量恒定;但是对于其他操作,您可能还需要使用这些变量来计算梯度。因此在这里,您不能使用stop_gradient
trainable=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)
trainable=False
。但是,如果我希望有条件地训练一个变量,并且有时我不希望它被训练,我会使用stop_gradient
。我的理解正确吗? - pratsbhattstop_gradient
并对W1和b1使用trainable=False
,则可以实现相同的效果,对吗?您能否举一个设置trainable=False
无法工作但stop_gradient
可以的示例? - max