Keras培训过程中acc info输出的含义

时间:2019-02-15 11:48:09

标签: python keras

我正在尝试创建一个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下降了,与1.0相比,精度达到loss的速度相当快。我对这些信息进行了一些观察:

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

所以,我的问题是,无论如何,这种准确性表示什么?我知道它是meant only for the programmer(即是),并且模型本身未使用它(与使用的loss不同),但是它是如何计算的或无论如何代表什么?在我的情况下,我具有范围为0-255的32D值序列,因此每个序列都表示为大小为(32, 257)的数组。因此,精度0.99意味着100个序列中有99个匹配?是吗?

1 个答案:

答案 0 :(得分:1)

  

所以,我的问题是,无论如何,这种准确性表示什么?

in this answer here所述,keras选择的实际精度度量取决于您选择的损失。 我猜想在您的情况下,它默认为categorical_accuracy

#libraries
import pandas as pd
import numpy as np
from numpy import array

data = pd.read_csv('color_survey_answers.csv',  delimiter='\t')
data.head()

data['colorname'].nunique()

data.colorname.value_counts()

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