我正在尝试在 keras 中构建一个 LSTM 模型,其中我有一个问题有 10 个答案,但其中只有一个是正确的。所以基本上我想建立一个 10 类分类问题。由于大多数研究论文都使用平均平均精度(MAP)和平均倒数排名(MRR)来评估此类问题,我想将它们用作自定义指标。
所以我的第一个问题:下面的代码计算平均精度是否正确?
def MAP(ground_label, predict_label):
mAp = 0
map_idx = 0
extracted = {}
for idx_, glab in enumerate(ground_label):
if ground_label[idx_] != 0:
extracted[idx_] = 1
key = np.argsort(predict_label)[::-1]
for i, idx_ in enumerate(key):
if tuple(idx_.tolist()) in extracted:
map_idx += 1
mAp += map_idx / (i + 1)
assert (map_idx != 0)
mAp = mAp / map_idx
return mAp
第二个问题是我如何修改这段代码以将其用作自定义度量函数,因为 keras 自定义度量假设输入是函数的张量。