【问题标题】:How does tf.control_dependencies work for operations defined elsewhere?tf.control_dependencies 如何为其他地方定义的操作工作?
【发布时间】:2018-08-31 11:16:46
【问题描述】:

在最新的 tensorflow 代码中,(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/training/python/training/training.py#L428) 行旨在确保在完成 update_ops 之后计算 total_loss

但是,我的问题是 total_loss 是在别处定义的。只是对total_loss 的引用,这不应该使control_dependencies 生效。

如何确保在完成update_ops 后计算total_loss?我的意思是total_loss 可能是在update_ops 之前使用过时的变量值计算的。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    它确实不会影响最初定义的操作(运行不会触发更新操作),但with_dependencies返回的新操作(也被Python变量total_loss引用)具有控制依赖关系更新操作等只会在它们运行后运行。具有控制依赖关系的新操作 is passed as the loss to compute_gradients 等被绑定到火车操作中。

    【讨论】:

    • 感谢您的回答:-)。但这并不能解决我的问题。我知道新的 total_loss 与 update_ops 相关联。但旧的 total_loss 没有。那么我们如何确保旧的 total_loss 是用 update_ops 之后的变量计算出来的呢?
    • 啊,一个看似竞争的条件,好问题。当我看到“更新操作”时,我会想到“批量规范”,这几乎是唯一常用的更新操作。批量规范的更新不会影响训练期间的损失值(使用批量统计),因此更新发生的时间并不重要。一般来说,我希望是这种情况:如果并行完成会很活跃的更新将使用不同的机制(例如,将控制依赖项添加到变量读取)。
    猜你喜欢
    • 2018-11-21
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多