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。
如果我们查看 的代码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_variables和non_trainable_variables)。
然而,查看 keras 存储库中的代码,很明显 keras 使用trainable_weights和non_trainable_weights引用相同的概念。参见keras 2.2中的Layer类