【发布时间】:2021-05-09 15:41:36
【问题描述】:
我写了一个平方损失函数来对一个热编码数据进行分类
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 的损失,那么我的实现有什么问题? 谢谢!
【问题讨论】:
标签: python tensorflow keras neural-network loss-function