gpt4 book ai didi

Tensorflow CIFAR10 多 GPU - 为什么是组合损失?

转载 作者:行者123 更新时间:2023-12-03 11:21:02 27 4
gpt4 key购买 nike

在 TensorFlow CIFAR10 example ,在多个 GPU 上训练,损失似乎是针对每个“塔”组合的,梯度是从这个组合损失计算出来的。

    # Build the portion of the Graph calculating the losses. Note that we will
# assemble the total_loss using a custom function below.
_ = cifar10.loss(logits, labels)

# Assemble all of the losses for the current tower only.
losses = tf.get_collection('losses', scope)

# Calculate the total loss for the current tower.
total_loss = tf.add_n(losses, name='total_loss')

# Attach a scalar summary to all individual losses and the total loss; do the
# same for the averaged version of the losses.
for l in losses + [total_loss]:
# Remove 'tower_[0-9]/' from the name in case this is a multi-GPU training
# session. This helps the clarity of presentation on tensorboard.
loss_name = re.sub('%s_[0-9]*/' % cifar10.TOWER_NAME, '', l.op.name)
tf.contrib.deprecated.scalar_summary(loss_name, l)

return total_loss

我是 TensorFlow 的新手,但据我所知,每次 cifar10.loss被称为, tf.add_to_collection('losses', cross_entropy_mean)运行并且当前批次的损失被存储在集合中。

然后 losses = tf.get_collection('losses', scope)被调用,并且所有损失都从集合中检索。然后 tf.add_n op 将从这个“塔”中检索到的所有损失张量加在一起。

我预计损失仅来自当前的训练步骤/批次,而不是所有批次。

我误解了什么吗?或者是否有理由将损失合并在一起?

最佳答案

如果启用了重量衰减,它也会将其添加到损失集合中。
因此,对于每个塔(范围),它将添加_n 所有损失:cross_entropy_mean 和 weight_decay。

然后为每个塔(范围)计算梯度。最后,不同塔(范围)的所有梯度都将在 average_gradients 中取平均值。

关于Tensorflow CIFAR10 多 GPU - 为什么是组合损失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42195922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com