为什么我们使用strategy.num_replicas_in_sync



谁能告诉我下面代码的功能?我知道它用于批量大小,但它究竟是计算什么。有人能告诉我吗?

BATCH_SIZE = 8* strategy.num_replicas_in_sync

通常情况下,在一台只有1个GPU/CPU的机器上,损失除以输入批中的样例数量。

那么,在使用tf.distribute.Strategy时,应该如何计算损失呢?

举个例子,假设你有4个GPU,批处理大小为64。一批输入分布在副本(4个gpu)上,每个副本获得大小为16的输入。

每个副本上的模型对其各自的输入进行前向传递并计算损失。现在,不是将损失除以相应输入中的示例数量(BATCH_SIZE_PER_REPLICA = 16),而是将损失除以GLOBAL_BATCH_SIZE(64)。

为什么这样做?

需要这样做,因为在每个副本上计算梯度后,它们通过求和在副本之间同步。

见这里- https://www.tensorflow.org/tutorials/distribute/custom_training#define_the_loss_function

相关内容

  • 没有找到相关文章

最新更新