我遇到了一些使用tf.Variable(... trainable=False)
的代码,我想知道使用tf.constant(...)
和tf.Variable
之间是否有区别(将trainable
参数设置为False)
将trainable
参数选项与tf.constant一起使用似乎有点多余。
答案 0 :(得分:1)
可能还有其他差异,但是我想到的是,对于某些TF图,您希望变量有时是可训练的,而在其他时候冻结。例如,对于使用卷积网络的转移学习,您希望冻结靠近输入的层,而只训练靠近输出的层。我想,如果您不得不将所有tf.Variable层换成tf.constant层,将会很不方便。
答案 1 :(得分:1)
如果您使用tf.constant()
声明某些内容,则以后将无法更改该值。但是,tf.Variable()
让您将来更改变量。您可以为其分配一些其他值。如果它不是可训练的,那么渐变将不会通过它。
答案 2 :(得分:1)
出于几个原因我可以告诉你:
如果声明了tf.Variable
,则以后可以更改它的值。另一方面,tf.constant
是不可变的,这意味着一旦定义它,就无法更改其值。
让我们假设您有一个具有多个权重矩阵的神经网络,对于前几个时期,您可以训练最后一层,而将其余所有节点保持冻结状态。之后,在最后几个时期,您需要微调整个模型。如果将第一层定义为tf.constant
,则不能这样做。