【问题标题】:Shall we set experimental_aggregate_gradients to False or True when manually accumulating gradients in Tensorflow?在 Tensorflow 中手动累积梯度时,我们应该将 Experimental_aggregate_gradients 设置为 False 还是 True?
【发布时间】:2020-10-12 07:34:54
【问题描述】:

我正在尝试使用 Python 3.8.5Tensorflow 2.2.0 中执行手动梯度累积。

我有一段代码,我在列表中收集了一系列梯度(grads_total_number 的总数):grads_list,我使用以下代码进行累积:

avg_accum_grads=[]    
for grad_ind in range(grads_total_number):
        avg_accum_grads.append(tf.reduce_mean(grads_list[grad_ind], axis=0))

然后我打算通过我的优化器将这些毕业生应用到我的模型中:

myopt.apply_gradients(zip(avg_accum_grads, model.trainable_variables),experimental_aggregate_gradients=True)

,我的优化器是 Adam,定义为 tf.keras.optimizers.Adam

但是,由于文档 here,如果我必须将 experimental_aggregate_gradients 设置为 False,我会感到困惑。没看清楚,这里我是手动累积的,假若真的,继续累积?

非常感谢任何帮助。

【问题讨论】:

    标签: python tensorflow optimization deep-learning gradient


    【解决方案1】:

    如果您使用分布式策略。即跨多个 GPU、多台机器或 TPU 进行分布式训练,然后experimental_aggregate_gradients 参数就出现了。在分布式策略中,梯度是在每个副本上计算的,然后通过求和它们在副本之间聚合。如果experimental_aggregate_gradients = True 则必须自行处理跨副本的聚合,否则如果experimental_aggregate_gradients = False 则必须手动处理。如果您不使用分布式策略,则设置experimental_aggregate_gradients = TrueFalse 不会有任何区别。

    如果您查看tf.distribute.Strategy 的文档,您会发现以下参数,

    num_replicas_in_sync - 返回梯度的副本数 是聚合的。

    总而言之,如果您使用的是tf.distribute.Strategy 并且,

    1. 如果是experimental_aggregate_gradients = True,则在不同副本中计算的梯度会自动聚合。
    2. 如果是experimental_aggregate_gradients = False,则用户有责任聚合来自不同副本的梯度。

    默认情况下,experimental_aggregate_gradients 设置为 True。除非使用tf.distribute.Strategy,否则TrueFalse 不会有任何区别。

    【讨论】:

      猜你喜欢
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      • 2012-10-24
      • 2021-01-04
      • 2020-12-14
      • 2016-10-09
      相关资源
      最近更新 更多