tensorflow可以分别优化批次中每个元素的损失,而不是优化整个平均损失吗?

问题描述 投票:0回答:1

tensorflow如何单独优化批次的元素损失而不是优化批次损失?

在优化每批次的损失时,常见的方法是将所有批次的元素损失的平均值作为批次损失求和或取,然后优化该批次损失。在我的情况下,我想单独优化每个元素的损失,而不是将它们作为批量损失一起减少。

例如,在以下代码中。

losses = tf.nn.nce_loss(<my batch inputs here>)
loss = tf.reduce_mean(losses)
optim = tf.nn.GradientDesentOptimizor(learning_rate = 0.01).minimize(loss)

我怎么能跳过loss = tf.reduce_mean(losses)并直接最小化张量losses? (这样,小批量实际上减少到批量大小为1的情况。)

我直接减少了损失,因为:

optim = tf.nn.GradientDesentOptimizor(learning_rate = 0.01).minimize(losses) # instead of loss

我不确定minimaziation将如何运作。当我使用它在会话中运行时,损失倾向于探索到nan。

那么有可能在张量流中实现上述目标吗?

tensorflow optimization loss
1个回答
0
投票

tf.reduce_mean(losses)的梯度计算和losses的梯度之间的差异是,对于losses张量,你将得到梯度的和(一批中每个样本的梯度之和),而对于tf.reduce_mean(losses),你将得到梯度的平均值(均值)一批中样品的梯度)。这就是为什么你开始得到NaN值 - 随着批量的增加,渐变的总和变成一个非常大的数字。

如果您要优化张量损失而不是降低平均损失,您可以通过将学习率除以批量大小来获得精确等效。

要为每个样品单独进行优化,只需每批进样一个样品。

© www.soinside.com 2019 - 2024. All rights reserved.