Keras模型中权重和变量有什么区别?

4
我注意到tf.keras.Model有两组类似的属性: weightsvariables
trainable_weightstrainable_variables
non_trainable_weightsnon_trainable_variables 还有方法: add_weightadd_variable 在我看过的模型中,这些属性对的值是相同的,并且是你所期望的(适当的tf.Variable集合)。
所以我的问题是:它们之间的区别是什么?概念上的差异是什么,我应该何时使用其中之一?
这是TensorFlow 2.3.1。
2个回答

5
如果我们查看 tf.keras.layers.Layer 的代码,我们可以看到 trainable_variablesnon_trainable_variables 是对 trainable_weightsnon_trainable_weights 的简单获取器。
@property
@doc_controls.do_not_generate_docs
def trainable_variables(self):
  return self.trainable_weights

@property
@doc_controls.do_not_generate_docs
def non_trainable_variables(self):
  return self.non_trainable_weights

我认为这样做是为了保持一致性。在tensorflow的代码库中,你会发现很多与高级API keras无关的代码也有这两个属性(trainable_variablesnon_trainable_variables)。

然而,从keras代码库中查看代码,很明显keras使用trainable_weightsnon_trainable_weights来引用相同的概念。请参见keras 2.2中的Layer类


3
add_variable和相关部分似乎是Tensorflow 1中的遗留代码。截至今天的主要版本,add_variableadd_weight的别名,并在调用时发出弃用警告。

源代码


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接