1

我想在 Keras (python) 中编写一个自定义指标,以在我训练时评估我的序列到序列模型的性能。序列是一次性编码的,标记是单词而不是字符。我希望它只报告完全正确的序列数(百分比也可以)。因此,如果它预测“猫坐在垫子上”而不是“猫坐在垫子上”,那将是不正确的并且不会被计算在内。

Keras(在我看来)关于编写自定义指标的文档有限(此处为https://keras.io/metrics/)。基本上,我想要的是类似

    import keras.backend as K

    def num_correct(y_true, y_pred):
        return K.sum(float(y_pred == y_true))

现在,Keras 不喜欢这样。它说 float 没有属性形状。我知道 y_true 和 y_pred 是张量,但我不完全确定它想要返回什么。帮助表示赞赏。

4

1 回答 1

0

首先y_pred == y_true检查两个值是否相等,如果相等则返回 true,否则返回 false。==但我认为您不希望从操作中返回单个布尔值。如果是这种情况,请将代码更改为

import keras.backend as K

def num_correct(y_true, y_pred):
    equal = K.equal(y_pred,y_true)

    return K.sum(K.cast(equal,K.floatx()))

其次,即使==操作的返回值是张量,您也不能在张量上调用浮点函数。Keras 后端有很好的方法来做到这一点(K.cast)。

于 2018-06-14T15:42:39.447 回答