machine-learning - 对于多类回归来说,这是一个好的对数损失吗?

标签 machine-learning tensorflow classification regression deep-learning

我有多个类需要同时预测,所以我将问题视为我作为真实输出的二进制标签/类的非线性回归。

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

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 ,例如。

关于machine-learning - 对于多类回归来说,这是一个好的对数损失吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40777201/

相关文章:

python - 使用 scikit.mlpregressor 训练多个数据集

tensorflow - 如何使用 tf.cond 进行批处理

python - 经过长时间训练后,经过训练的模型几乎可以将所有内容作为一类进行检测

machine-learning - 应用 mod 运算进行分类

python - Scikit-learn 混淆矩阵

python - Keras:batch_size 的类型错误

machine-learning - ignore_const_cols 缺失值

python - 使用涉及开始和结束时间的数据进行二元预测

machine-learning - 训练 SVM 分类器时的奇怪行为

python - 用于多输入图像的 VGG16 网络