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

Den*_*loe 4 python keras tensorflow

我注意到tf.keras.Models 有两组相似的属性:

weights, variables
trainable_weights, trainable_variables
non_trainable_weights,non_trainable_variables

还有一些方法:

add_weight,add_variable

在我看过的模型中,属性对的值是相同的,并且是您所期望的(适当的tf.Variables 集合)。

所以我的问题是:两者有什么区别?在概念上有什么区别,什么时候应该使用其中之一?

这是 TensorFlow 2.3.1。

Les*_*rel 5

如果我们查看 的代码tf.keras.layers.Layer,我们会发现 和trainable_variables是围绕和 的non_trainable_variables简单 gettertrainable_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
Run Code Online (Sandbox Code Playgroud)

我相信这样做是为了保持一致性。在tensorflow代码库中,您可以发现很多与高API keras无关的代码也具有这两个属性(trainable_variablesnon_trainable_variables)。

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