我注意到 tf.keras.Model
有两组相似的属性:
权重
,变量
trainable_weights
, trainable_variables
non_trainable_weights
, non_trainable_variables
还有方法:
add_weight
,add_variable
在我看过的模型中,属性对的值是相同的,并且是您所期望的(tf.Variable
的适当集合)。
所以我的问题是:两者有什么区别?在概念上有什么区别,我应该在什么时候使用其中之一?
这是 TensorFlow 2.3.1。
最佳答案
如果我们看the code of tf.keras.layers.Layer
,我们看到 trainable_variables
和 non_trainable_variables
是 trainable_weights
和 non_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_variables
和 non_trainable_variables
)。
但是,查看 keras 存储库中的代码,很明显 keras 使用 trainable_weights
和 non_trainable_weights
来引用相同的概念。查看Layer class in keras 2.2
关于python - Keras 模型中的权重和变量有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64915218/