我正在制作张量流图,最后一步是简单的均方误差计算。一些输入是填充,我使用张量loss_mask
掩盖了它。这个张量大多是1,最后有几个0。
以下操作计算均方误差,其中屏蔽输出计为零误差。
error_squared = loss_mask * tf.pow(expected_outputs_reshaped - network_outputs, 2)
loss = tf.reduce_mean(error_squared)
问题在于,如果屏蔽了许多输出,那么平均损耗似乎远低于它应该的值,因为这些屏蔽输出计为零误差。所以,我尝试了以下代码来纠正这个问题:
error_squared = loss_mask * tf.pow(expected_outputs_reshaped - network_outputs, 2)
loss = tf.reduce_sum(error_squared) / tf.reduce_sum(loss_mask)
如果loss_mask
全是1,那么这两件事应该会产生同样的结果。但是,他们不是。对于第一个,我得到正确的值,它们都在0和1之间。对于第二个,我得到数百个值。为什么这两个不一样?
我已经确认tf.reduce_sum(loss_mask)
等于error_squared
中的元素数量。