【问题标题】:Meaning of acc info output in Keras training procedureKeras训练过程中acc info输出的含义
【发布时间】:2019-07-09 13:26:13
【问题描述】:

我正在尝试创建一个 seq2seq 网络,该网络具有此 machinelearningmastery 博客中定义的网络架构作为主干。基本上原始示例使用输入 6D 和输出 3D 序列,而我的使用 32D 和输出 32D。

更准确地说,原始模型使用 6 个整数的随机整数(取值范围从 1 到 50)序列。我的模型使用 32D 值(值范围为 0-255)。

在观看模型训练时,我注意到有两个判断收敛的标准:loss 和指标(通常是准确度)。典型的信息是这样的:

99776/100000 [============================>.] - ETA: 0s - loss: 0.0223 - acc: 0.9967
99904/100000 [============================>.] - ETA: 0s - loss: 0.0223 - acc: 0.9967
100000/100000 [==============================] - 40s 400us/step - loss: 0.0223 - acc: 0.9967

好的,在(简单)博客示例中,我可以看到 loss 下降,而 acc 同时上升到 1。虽然在我的情况下(这是一个更难解决的问题),但与loss 相比,我可以看到loss 下降并且准确度上升到1.0 的值相当快。我对这些信息消息进行了一些观察:

  • 经过一些迭代,我的准确度可以达到1.0 和我的loss 仍然肯定高于零阈值(例如0.0222)。我的意思是我没有得到loss 的数量级,例如1e-5 之类的。
  • 在每个 epoch 开始时,似乎都有损失,而且肯定存在准确度差距。我在here 中找到了一个很好的解释。总而言之,它表示在一个纪元期间,显示的 lossacc 是所有批次的平均值,而在每个新纪元,它都会初始化为实际的当前值。
  • 即使 acc 固定为 1.0 并且我的训练数据表现出色,我也没有得到如此高的结果来证明如此高的准确性。

那么,我的问题是,这个准确度到底是什么?我知道它是meant only for the programmer(我就是)并且模型本身不使用它(与使用的loss不同)但是它是如何计算的或者它代表什么?在我的例子中,我有 0-255 范围内的 32D 值序列,因此每个序列都表示为大小为 (32, 257) 的数组。那么,准确度 0.99 意味着 100 个序列中有 99 个匹配?是这样吗?

【问题讨论】:

标签: python keras


【解决方案1】:

那么,我的问题是这个准确度到底是什么?

正如in this answer here 解释的那样,keras 选择的实际准确度指标取决于您选择的损失。 我猜到在你的情况下,它默认为categorical_accuracy

def categorical_accuracy(y_true, y_pred):
    return K.cast(K.equal(K.argmax(y_true, axis=-1),
                          K.argmax(y_pred, axis=-1)), K.floatx())

这意味着它将比较 y_true 和 y_pred 中的最大值是否出现在同一位置。当然,这对你来说意义不大。

【讨论】:

    猜你喜欢
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多