如何影响整理变量/槽的名称范围?

时间:2018-06-19 08:52:54

标签: python tensorflow tensorflow-estimator

描述

我在model_fn() tf.estimator.Estimator实例化中使用丢失函数包装TensorFlow模型。 各种优化器(例如tf.train.MomentumOptimizertf.train.AdagradOptimizer)为模型中的所有可训练变量(伽马,批量标准化的beta,卷积核,......)创建Read(_x)运算时optimizer.apply_gradients() 1}}被调用。 具体而言,它们的名称为Read_<num>/ReadVariableOp,类型为tf.Operation。 问题是这些变量是在tf.variable_scope的根目录之外的任何tf.name_scopetf.Graph之外创建的。 这完全扰乱了TensorBoard的可读性: Imgur 红框是实际模型。蓝色框架封装了所有300多个读取函数的一小部分。

问题

我是否有办法将所有Read_<num>操作包含在tf.name_scope()之类的内容中?或者是否有其他方式以编程方式(即不是通过鼠标单击)从TensorBoard中删除它们?

我尝试了什么

  1. 将呼叫包裹到此apply_gradients()

    with tf.name_scope('apply_gradients_to_ns'):
        with tf.variable_scope('apply_gradients_to_vs'):
            minimize_op = optimizer.apply_gradients(
                grads_and_vars=grads_and_vars,
                global_step=tf.train.get_or_create_global_step(),
                name='apply_gradients_to_name'
            )
    

    没有效果。但是,所有Read_<num>操作的范围都不受影响。

  2. 跟踪这些操作的创建:

    tensorflow.python.training.slot_creator.py,第179行,create_zeros_slot(..., colocate_with_primary=True)触发tensorflow.python.ops.variable_scope.py第1298行,get_variable(..., use_resource=None) use_resource=True。 但是,我不想在TensorFlow的源代码中乱七八糟。 此外,我得出结论,这种行为是有意的,我只是错误地使用它。 如何使用

  3. 尝试不同的分发策略:OneDeviceStrategyMirroredStrategy。 两者都产生类似的效果。 唯一的区别是MirroredStrategy创建了group_deps_<num>个变量。

  4. 重现此效果的代码,更详细的说明,以及另外两个屏幕截图:https://github.com/patzm/tf-estimator-distribute-so

0 个答案:

没有答案