tf.constant和tf.Variable之间的差异(可训练= False)

时间:2019-06-06 14:39:05

标签: python tensorflow

我遇到了一些使用tf.Variable(... trainable=False)的代码,我想知道使用tf.constant(...)tf.Variable之间是否有区别(将trainable参数设置为False)

trainable参数选项与tf.constant一起使用似乎有点多余。

3 个答案:

答案 0 :(得分:1)

可能还有其他差异,但是我想到的是,对于某些TF图,您希望变量有时是可训练的,而在其他时候冻结。例如,对于使用卷积网络的转移学习,您希望冻结靠近输入的层,而只训练靠近输出的层。我想,如果您不得不将所有tf.Variable层换成tf.constant层,将会很不方便。

答案 1 :(得分:1)

如果您使用tf.constant()声明某些内容,则以后将无法更改该值。但是,tf.Variable()让您将来更改变量。您可以为其分配一些其他值。如果它不是可训练的,那么渐变将不会通过它。

答案 2 :(得分:1)

出于几个原因我可以告诉你:

  • 如果声明了tf.Variable,则以后可以更改它的值。另一方面,tf.constant是不可变的,这意味着一旦定义它,就无法更改其值。

  • 让我们假设您有一个具有多个权重矩阵的神经网络,对于前几个时期,您可以训练最后一层,而将其余所有节点保持冻结状态。之后,在最后几个时期,您需要微调整个模型。如果将第一层定义为tf.constant,则不能这样做。