张量流中tf.GraphKeys.TRAINABLE_VARIABLES和tf.GraphKeys.UPDATE_OPS之间的区别是什么?

dxf*_*dxf 14 tensorflow

这里是tensorflow中的tf.GraphKeys的文档,例如TRAINABLE_VARIABLES:将由优化器训练的Variable对象的子集.

我知道tf.get_collection(),哪个可以找到你想要的张量.

使用时tensorflow.contrib.layers.batch_norm(),参数updates_collections默认值为GraphKeys.UPDATE_OPS.

我们如何理解这些集合及其差异.

此外,我们可以在ops.py中找到更多.

Zvi*_*ika 20

这是两件不同的事情.

TRAINABLE_VARIABLES

TRAINABLE_VARIABLES是最小化损失时应修改的变量或训练参数的集合.例如,这些可以是确定由网络中的每个节点执行的功能的权重.

如何将变量添加到此集合中?tf.get_variable除非您指定,否则在使用时定义新变量时会自动发生这种情况

tf.get_variable(..., trainable=False)
Run Code Online (Sandbox Code Playgroud)

你什么时候想要一个变量无法解决?这种情况时有发生.例如,有时您会想要使用两步法,首先在大型通用数据集上训练整个网络,然后在与您的问题特别相关的较小数据集上微调网络.在这种情况下,您可能只想微调网络的一部分,例如最后一层.将一些变量指定为无法解释是执行此操作的方法之一.

UPDATE_OPS

UPDATE_OPS是一组ops(图表运行时执行的操作,如乘法,ReLU等),而不是变量.具体而言,此集合维护一个需要在每个培训步骤之前运行的操作列表.

操作如何添加到此集合中? 根据定义,update_ops通过损失最小化发生在常规训练流程之外,因此通常只有在特殊情况下才会将ops添加到此集合中.例如,在执行批量标准化时,您希望在每个培训步骤之前重新计算批处理均值和方差,这就是它的完成方式.本文tf.contrib.layers.batch_norm将更详细地介绍批量标准化使用的机制.

  • "需要在每个训练步骤后运行的操作" - 您的意思是"之后"还是"之前"?通常,在批量标准化的上下文中,UPDATE_OPS用在`tf.control_dependencies`中,该文件处理包含更新可训练变量的实际训练操作的`with`块.你真的是指'之前'吗? (2认同)