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 值。
检查数据预处理:确保数据预处理适合当前任务。确保在将数据馈送到模型之前对数据进行了适当的预处理。