keras 用于分类的MAE损失函数

ruyhziif  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(208)

对于我的分类问题,我想使用损失函数,用于回归,如平均绝对误差。考虑"y_pred"和"y_true"是在一个热编码,但对于MAE,我需要他们在实数表示。
在第一种情况下,我得到错误:值错误:没有为任何变量提供梯度

def AgeAccuracyRegularity(y_pred,y_true):
    
    mae_func = tf.keras.losses.MeanAbsoluteError()

    y_pred_ages = K.cast(K.argmax(y_pred, axis=-1)+1,dtype='float32')
    y_true_ages = K.cast(K.argmax(y_true, axis=-1)+1,dtype='float32')

    res = mae_func(y_pred_ages, y_true_ages)
    
    return res

但如果我这样毫无意义地操纵结果

def AgeAccuracyRegularity(y_pred,y_true):
    
    mae_func = tf.keras.losses.MeanAbsoluteError()

    y_pred_ages = K.cast(K.argmax(y_pred, axis=-1)+1,dtype='float32')
    y_true_ages = K.cast(K.argmax(y_true, axis=-1)+1,dtype='float32')

    res = mae_func(y_pred_ages, y_true_ages)

    mae = mae_func(y_pred, y_true)

    return res-mae+mae

它工作。我检查输出的分类器和机器人"mae"和"res"在自定义损失函数,他们是相同的大小和类型。

db2dz4w8

db2dz4w81#

对于分类问题,你应该使用“sparse_categorical_crossentropy”损失函数。MAE用于回归问题。

相关问题