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

时间:2019-04-19 07:02:11

标签: tensorflow optimization loss

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

在优化每个批次的损失时,常用的方法是将所有批次元素损失的平均值相加或取为批次损失,然后对该批次损失进行优化。就我而言,我想分别优化每个元素的损失,而不是像批量损失一样减少它们。

例如,在以下代码中。

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

我不确定最小化将如何工作。当我使用它在会话中运行时,损失趋向于探查。

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

1 个答案:

答案 0 :(得分:0)

计算tf.reduce_mean(losses)的梯度与losses的梯度之间的区别在于,对于losses张量,您将获得梯度的SUM(一批中每个样本的梯度总和) ),而对于tf.reduce_mean(losses),您将获得梯度的均值(批次中样品的梯度均值)。这就是为什么您开始获得NaN值的原因-随着批次大小的增加,梯度总和变得非常大。

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

要针对每个样品分别进行优化,只需每批进样一个样品即可。