优化器的Tensorflow聚合法

优化器的Tensorflow聚合法,tensorflow,deep-learning,Tensorflow,Deep Learning,我在tensorflow优化器中找不到有关聚合方法的文档 我有下面一行代码 train_op = optimizer.minimize(loss, global_step=batch, aggregation_method = tf.AggregationMethod.EXPERIMENTAL_TREE) 但是,此属性可以更改为 tf.AggregationMethod.EXPERIMENTAL_ACCUMULATE_N 有人知道它做什么吗?(我只知道,当我将默认值与LSTM一起使用时,它没

我在tensorflow优化器中找不到有关聚合方法的文档

我有下面一行代码

train_op = optimizer.minimize(loss, global_step=batch, aggregation_method = tf.AggregationMethod.EXPERIMENTAL_TREE)
但是,此属性可以更改为

tf.AggregationMethod.EXPERIMENTAL_ACCUMULATE_N

有人知道它做什么吗?(我只知道,当我将默认值与LSTM一起使用时,它没有足够的内存来运行)

对于
聚合方法
实验累积法
是按原样添加(
默认值
add\n
在进行任何求和之前等待其所有参数可用,而
在其输入可用时立即累积求和。这可能会节省内存,但有一些挑剔的形状信息限制,因为它当前的实现需要创建一个临时变量

这里有一些文档:


谢谢这有助于我更好地理解它。还有一个问题:当我使用默认设置时,GPU内存不足,但是当我使用
实验性的\u cumulation\N
时,它只使用了我GPU内存的一半,这是为什么?我希望它能填满这一切。你是用nvidia smi还是时间线来衡量?还有其他使用GPU内存的东西吗?对于固定图,内存使用应该相对恒定(由于op调度,存在一些不确定性);通常,人们会调整批处理大小以填满GPU内存(至少对于图像模型)。TensorFlow不会因为可用而自动使用更多内存(除了一些“允许失败”的分配,您会收到警告)。我使用nvidia smi进行测量。对嗯,这是出乎意料的。我有一个LSTM,这导致它耗尽了资源,然后当使用累加时,它的使用低于最大值。我想在它尝试一次完成所有LSTM时间步之前,现在它一次完成一个(但为什么不一次2或3个…?)谢谢你的回答。TensorFlow在nvidia smi中的内存使用只是TensorFlow实际使用的内存量的一个松散上限,所以我不会太担心它。通常,它会分配所有可用的GPU内存(可配置),因此nvidia smi中报告的内存使用率较低可能意味着有其他东西阻止它进行完全分配。可能是
accumulate\n
节省了足够的内存以避免分配错误(因为中间张量需要等待更长的时间)。它不会改变正在执行的步骤数。
      # The benefit of using AccumulateN is that its inputs can be combined
      # in any order and this can allow the expression to be evaluated with
      # a smaller memory footprint.  When used with gpu_allocator_retry,
      # it is possible to compute a sum of terms which are much larger than
      # total GPU memory.
      # AccumulateN can currently only be used if we know the shape for
      # an accumulator variable.  If this is not known, or if we only have
      # 2 grads then we fall through to the "tree" case below.