来自https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/slim,
TF-Slim通过定义模型变量进一步区分变量, 它们是表示模型参数的变量。模型 在学习过程中对变量进行训练或微调并加载 在评估或推断期间从检查点。例子包括 由slim.fully_connected或slim.conv2d层创建的变量。 非模型变量是在其中使用的所有其他变量 学习或评估但不是实际执行所必需的 推理。例如,global_step是使用期间的变量 学习和评估,但它实际上不是模型的一部分。 同样,移动平均变量可能会反映模型变量,但是 移动平均线本身不是模型变量。
来自https://www.tensorflow.org/versions/master/api_docs/python/state_ops/variable_helper_functions,
tf.model_variables()
返回MODEL_VARIABLES集合中的所有变量。
然而苗条创造了“移动均值”变量作为其批量规范层的一部分,包含在MODEL_VARIABLES集合中。
我至少可以看到“模型变量”的可能定义:
Tensorflow的“模型变量”是否由条件2定义,而slim的“模型变量”是由条件1定义的?
答案 0 :(得分:1)
简单地说,slim使用contrib层。 contrib层使用layer_variable_getter(实际上是_model_variable_getter)来生成“model_variable”,这些变量是添加到[tf.GraphKeys.GLOBAL_VARIABLES,tf.GraphKeys.MODEL_VARIABLES]集合中的变量。
因此,模型变量是常见变量,加上MODEL_VARIABLES集合。 contrib layers的变量是模型变量,如果需要,可以从'bias'重命名为'biases',从'kernel'重命名为'weight'。