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