【问题标题】:Creating a custom metric in Keras for sequence to sequence learning在 Keras 中创建自定义指标以进行序列到序列学习
【发布时间】:2018-11-24 10:19:59
【问题描述】:

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

【问题讨论】:

  • 这和categorical_accuracy有什么不同?
  • categorical_accuracy 逐个令牌而不是逐个序列地比较条目。因此,上面的示例不会获得 0 的准确度,而这正是我们所期望的。

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


【解决方案1】:

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

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)。

【讨论】:

  • 此解决方案不起作用。它会产生与原始尝试相同的错误。
猜你喜欢
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
相关资源
最近更新 更多