这是多类回归的良好对数损失吗?

Is this a good log loss for multiclass regression?

我有多个 类 可以一次预测,所以我认为这个问题是对二进制 labels/classes 的非线性回归,我的输出是真实的。

也就是说,损失函数是每个标签的对数损失的总和,然后对批次中的每个示例进行平均。这是我的损失函数:

prediction = tf.sigmoid(hidden_out)  # Prediction output, from 0.0 to 1.0

# Avoid infinite gradients for extreme cases
# by remapping the prediction from 0.005 to 0.995:
pred = prediction*0.99+0.005 

# Log loss: mean is on batch_size, sum is on labels: 
loss = tf.reduce_mean(
    tf.reduce_sum(
        - labels*tf.log(pred) - (1.0-labels)*tf.log(1.0-pred), 
        reduction_indices=1
    )
)

我怀疑这有问题。我正在尝试训练一个带有残差初始层的深度卷积神经网络。我以低学习率快速获得一些 NaN 损失值。

我的日志丢失是否正确?有什么建议吗?

您可以使用已经为多类逻辑回归实现的损失来代替您的损失:sigmoid_cross_entropy_with_logits。它经过精心设计,可避免出现数值问题。

此外,与其剪切预测,不如剪切梯度更好。例如,参见 here