Python 为什么我的Keras自定义损失功能不起作用?

Python 为什么我的Keras自定义损失功能不起作用?,python,tensorflow,keras,neural-network,loss-function,Python,Tensorflow,Keras,Neural Network,Loss Function,我编写了一个平方损失函数,用于对一个热编码数据进行分类 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,

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

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)
上面的示例返回一个值为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