【问题标题】:How can I use keras categorical_accuracy with a multi-dimentional output?如何在多维输出中使用 keras 分类精度?
【发布时间】:2020-11-17 16:46:41
【问题描述】:

我正在尝试使用 categorical_accuracy 指标评估我的 keras 神经网络。但是,这仅适用于一维列表,因此如果我将其作为目标:

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

这是我的输出:

[[[0.1, 0.8, 0.2], [0.3, 0.4, 0.2]], ...]

当它比较两个列表中的每一个时,它将为该项目返回 0.5 的准确度。但是,我想比较整个输出(3d 输出)的最大参数,因此希望上面的示例返回 1 的精度。

我试过了:

class Accuracy(keras.metrics.CategoricalAccuracy):
    def __init__(self):
        super().__init__()

    def call(self, inputs, **kwargs):
        super().call((tf.reshape(inputs[0], (output_size,)), tf.reshape(inputs[1], (output_size,))), **kwargs)

但它似乎仍然返回相同的值。有没有其他方法可以适应固有的 keras 功能,而无需创建我自己的指标,这可能会运行得更慢?

更新: 我创建了一个函数来解决这个问题:

def cat_acc(y_true, y_pred):
    return tf.keras.metrics.categorical_accuracy(tf.keras.backend.flatten(y_true),
                                                 tf.keras.backend.flatten(y_pred))

但是这有一个问题,它一次计算整个批次,因此它将返回 1 或 0,其中 1 表示整个批次中的最大值正确,而 0 表示不正确。在创建模型时,当 keras 编译它时,我找不到一种明智的方法来循环批处理而不抛出值错误。

【问题讨论】:

    标签: python keras metrics


    【解决方案1】:

    我最终想出了以下解决方案:

    def cat_acc(y_true, y_pred):
        return tf.reduce_mean(tf.keras.metrics.categorical_accuracy(tf.reshape(y_true, (-1, output_size)),
                                                                    tf.reshape(y_pred, (-1, output_size))))
    

    这里,output_size 是指模型输出的大小,例如对于具有形状 (3, 2, 2) 输出的模型,output_size 变量将为 12。

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 2020-10-27
      • 1970-01-01
      相关资源
      最近更新 更多