在Tensorflow中手动累加梯度时,我们应该将experimental_aggregate_gradients设置为False还是True?
Shall we set experimental_aggregate_gradients to False or True when manually accumulating gradients in Tensorflow?
我正在尝试使用 Python 3.8.5 在 Tensorflow 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。没看明白,这里我是手动累加的,如果是真的,会继续累加吗?
非常感谢任何帮助。
如果您使用的是分布式策略。即跨多个 GPU、多台机器或 TPU 进行分布式训练,然后 experimental_aggregate_gradients
参数就出现了。在分布式策略中,梯度是在每个副本上计算的,然后通过对它们求和来跨副本聚合。如果experimental_aggregate_gradients = True
,则跨副本聚合将自行处理,如果experimental_aggregate_gradients = False
,则必须手动处理。如果您不使用分布式策略,则设置 experimental_aggregate_gradients
= True
或 False
没有任何区别。
如果您查看 tf.distribute.Strategy 的文档,您会发现以下参数,
num_replicas_in_sync - Returns number of replicas over which gradients
are aggregated.
总而言之,如果您使用 tf.distribute.Strategy
并且
- 如果
experimental_aggregate_gradients = True
,那么在不同副本中计算的梯度会自动聚合。
- 如果
experimental_aggregate_gradients = False
,则用户有责任聚合来自不同副本的梯度。
默认情况下 experimental_aggregate_gradients
设置为 True
。如果 True
或 False
没有任何区别,除非使用 tf.distribute.Strategy
.
我正在尝试使用 Python 3.8.5 在 Tensorflow 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。没看明白,这里我是手动累加的,如果是真的,会继续累加吗?
非常感谢任何帮助。
如果您使用的是分布式策略。即跨多个 GPU、多台机器或 TPU 进行分布式训练,然后 experimental_aggregate_gradients
参数就出现了。在分布式策略中,梯度是在每个副本上计算的,然后通过对它们求和来跨副本聚合。如果experimental_aggregate_gradients = True
,则跨副本聚合将自行处理,如果experimental_aggregate_gradients = False
,则必须手动处理。如果您不使用分布式策略,则设置 experimental_aggregate_gradients
= True
或 False
没有任何区别。
如果您查看 tf.distribute.Strategy 的文档,您会发现以下参数,
num_replicas_in_sync - Returns number of replicas over which gradients are aggregated.
总而言之,如果您使用 tf.distribute.Strategy
并且
- 如果
experimental_aggregate_gradients = True
,那么在不同副本中计算的梯度会自动聚合。 - 如果
experimental_aggregate_gradients = False
,则用户有责任聚合来自不同副本的梯度。
默认情况下 experimental_aggregate_gradients
设置为 True
。如果 True
或 False
没有任何区别,除非使用 tf.distribute.Strategy
.