首页 > 解决方案 > 用于行准确性的自定义 keras 指标

问题描述

我有一个多标签分类问题:以下是 y 的一些示例:

[0,0,0]
[0,0,1]
[1,0,1]
[1,1,0]
[1,0,0]

等等。我想创建一个函数,告诉我预测中的行百分比,基于 0.5 阈值,等于 y 中的真实向量。所以如果 y 是:

[[0,0,1]
[1,0,0]
[1,0,1]]

和预测是:

[[0.2,0.4,0.9]
[0.6,0.3,0.4]
[0.3,0.3,0.4]]

准确率是 2/3,因为两行预测相同的标签,而 1 不是。

这就是我现在所拥有的:

def accuracy(y_true, y_pred):

    acc = K.all(K.equal(y_true, y_pred), axis=1)
    acc= K.cast(acc, 'float32')
    acc = K.sum(acc)
    acc = acc/K.cast(K.shape(y_true)[0], 'float32')
    return acc

但它在训练期间向我显示了消息并显示精度为 0:

Allocation of 223027200 exceeds 10% of system memory.

y_train 和 y_test 的形状是: (1285, 3) (551, 3)

X_train 的形状:(1285, 70, 70, 1)

标签: pythontensorflowkerasdeep-learning

解决方案


任何需要它的人的解决方案:

 def accuracy(y_true, y_pred):

        y_pred = K.round(y_pred)
        acc = K.all(K.equal(y_true, y_pred), axis=1)
        acc= K.cast(acc, 'float32')
        acc = K.sum(acc)
        acc = acc/K.cast(K.shape(y_true)[0], 'float32')
        return acc

推荐阅读