【问题标题】:Why is my Keras custom loss function not working?为什么我的 Keras 自定义损失函数不起作用?
【发布时间】: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


    【解决方案1】:

    只有当 y_pred 被归一化(总和等于 1)时才会起作用。

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

    【讨论】:

      猜你喜欢
      • 2019-12-11
      • 1970-01-01
      • 2020-12-19
      • 2017-12-18
      • 2020-03-27
      • 1970-01-01
      • 2018-06-16
      • 2018-10-28
      • 2017-12-29
      相关资源
      最近更新 更多