在Keras中创建自定义指标,以便顺序学习序列

时间:2018-06-14 15:17:24

标签: python keras deep-learning metrics sequence-to-sequence

我想在Keras(python)中编写一个自定义指标,以便在我训练时评估我的序列对序列模型的性能。序列是单热编码的,令牌是单词而不是字符。我希望它只报告完全正确的序列数(百分比也可以)。因此,如果它预测"猫坐在垫子上#34;而不是"猫坐在垫子上#34;这是不正确的,不会被计算在内。

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是张量,但我不完全确定它想要返回什么。感谢帮助。

1 个答案:

答案 0 :(得分: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)。