keras中自定义了MRR,结果训练集和预测集中出现 - MRR: 0.0000e+00 -- val_MRR: 0.0000e+00

keras中自定义了MRR,结果训练集和预测集中出现 - MRR: 0.0000e+00 -- val_MRR: 0.0000e+00

    def MRR(y_true, y_pred):
        c = tf.argsort(y_pred, direction='DESCENDING')
        c = tf.cast(c, dtype=tf.float32)
        d = tf.cast(tf.argmax(y_true, -1), dtype=tf.float32)
        e = len(c)
        h = 0
        for i in range(e):
            for j in range(5):
                if d[i] == c[i][j]:
                    h += 1 / (j + 1)
        return h / e

    ''''''

    model.compile(                                                                     
        loss='categorical_crossentropy',
        #loss='binary_crossentropy',
        optimizer=keras.optimizers.Adam(config.learning_rate),
        metrics=['top_k_categorical_accuracy',MRR]
      
    )

该回答引用ChatGPT

出现 MRR 值为 0.0 的原因可能有以下几个:

损失函数问题:MRR 函数是一个自定义指标而不是损失函数。重要的是要确保用于训练的损失函数适合当前任务。如果损失函数不能优化模型参数以改善 MRR,则 MRR 值可能会保持为 0.0。

数据问题:如果用于训练和验证的数据不适合,则可能导致 MRR 值不断改善。例如,如果数据存在偏差或不代表实际问题,则 MRR 值可能无法改善。

模型架构问题:如果模型架构不适合当前任务,则可能无法学习数据中必要的模式以改善 MRR 值。确保模型架构适合当前任务非常重要。

要调试问题,可以尝试以下方法:

检查损失函数:确保损失函数适合当前任务。尝试使用不同的损失函数,以查看是否可以改善 MRR 值。

检查数据:确保用于训练和验证的数据适合当前任务。检查数据是否存在偏差或不代表实际问题。

检查模型架构:确保模型架构适合当前任务。尝试使用不同的模型架构,以查看是否可以改善 MRR 值。

检查数据预处理:确保数据预处理适合当前任务。确保在将数据馈送到模型之前对数据进行了适当的预处理。