Tensorflow中的“模型变量”是什么?

时间:2017-01-04 04:58:37

标签: tensorflow

来自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集合中。

我至少可以看到“模型变量”的可能定义:

  1. 用于推理。
  2. 在训练期间进行微调(无论是通过优化器还是其他方式,例如移动平均值)。
  3. 存放在检查站
  4. Tensorflow的“模型变量”是否由条件2定义,而slim的“模型变量”是由条件1定义的?

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'。