为什么我的 Keras 自定义损失函数不起作用?

Why is my Keras custom loss function not working?

我写了一个平方损失函数来对一个热编码数据进行分类

def squared_categorical_loss(y_true, y_pred):
    return K.mean(K.square(1.0 - K.sum(y_true * y_pred, axis=(1)))) 

在给定 numpy 数组示例时有效,例如

y_true = np.asarray([[1,0,0],[0,1,0]])
y_pred = np.asarray([[0.5,0.2,0.3],[0.4,0.6,0]])
squared_categorical_loss(y_true, y_pred)

上面的例子 returns 一个值为 0.205 的张量,它是 (1-0.5)^2 和 (1-0.6)^2 的平均值,这是期望的结果,应该是通常与准确性相关的可优化损失函数,但当我将其应用于 TensorFlow 模型时

model.compile(optimizer='adam',
                  loss=squared_categorical_loss,
                  metrics=['accuracy'])

损失减少到极小的值,而训练精度保持在 50% 以下,这是不可能的,因为如果精度不高于 50%,损失低于 0.125 是无法在数学上实现的,所以我的问题出在哪里执行? 谢谢!

仅当 y_pred 标准化(和等于 1)时才有效。

我认为您忘记在模型的最后一层应用 softmax。