1

我写了一个多 gpu Cnn 代码

此链接 中,他们在第 249 行发表了评论

# 仅保留来自最终塔的批量标准化更新操作。理想情况下,我们应该从所有塔中获取更新 # 但这些统计数据积累得非常快,因此我们可以忽略来自其他塔的 # 其他统计信息而不会造成重大损害。

但是这个更新批量规范的代码(在第 253 行):

with tf.device('/gpu:%d' % i):
.
.
.
  batchnorm_updates = 
  tf.get_collection(slim.ops.UPDATE_OPS_COLLECTION,scope)

已为所有塔(GPU)完成,那么此更新的正确位置是什么?

4

1 回答 1

1

我认为您对代码的理解不正确。

代码for loop中所示,

for i in range(FLAGS.num_gpus):
  with tf.device('/gpu:%d' % i):
    with tf.name_scope('%s_%d' % (inception.TOWER_NAME, i)) as scope:

      with slim.arg_scope([slim.variables.variable], device='/cpu:0'):

      ......

      batchnorm_updates = tf.get_collection(slim.ops.UPDATE_OPS_COLLECTION,
                                            scope)

batchnorm_updates在每个 之后被替换for loop,因此它只包含完成后最后一个塔的批量标准化更新操作for loop

于 2018-07-16T08:11:01.750 回答