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