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