【问题标题】:can the accuracy measure val_acc be trusted?准确性度量 val_acc 可以信任吗?
【发布时间】:2019-11-06 10:54:54
【问题描述】:

构建序列

simple_seq= [x for x in list(range(1000)) if x % 3 == 0]

整形拆分后

x_train, x_test shape = (159, 5, 1)
y_train, y_test shape = (159, 2)

型号

model = Sequential(name='acc_test')
model.add(Conv1D(
  kernel_size = 2,
  filters= 128,
  strides= 1,
  use_bias= True,
  activation= 'relu',
  padding='same', 
  input_shape=(x_train.shape[1], x_train.shape[2])))

model.add(AveragePooling1D(pool_size =(2), strides= [1]))
model.add(Flatten())
model.add(Dense(2))

optimizer = Adam(lr=0.001)
model.compile( optimizer= optimizer, loss= 'mse',  metrics=['accuracy'])

火车

hist = model.fit(
          x=x_train, 
          y = y_train, 
          epochs=100, 
          validation_split=0.2)

结果:

Epoch 100/100
127/127 [==============================] - 0s 133us/sample - loss: 0.0096 - acc: 1.0000 - val_loss: 0.6305 - val_acc: 1.0000

但是如果用这个模型来预测:

x_test[-1:] = array([[[9981],
        [9984],
        [9987],
        [9990],
        [9993]]])

model.predict(x_test[-1:])
result is: array([[10141.571, 10277.236]], dtype=float32)

如果结果与事实相去甚远,vall_acc 怎么可能是 1,结果是


step    1          2
true [9996,      9999     ]
pred [10141.571, 10277.236] 

【问题讨论】:

  • 您需要完全定义学习问题,我不清楚模型(和训练数据)的输入和输出是什么,这是回归还是分类?如果它的回归,那么查看准确性是没有意义的
  • 是的,确实这是一个回归任务,正如您在此处看到的 model.add(Dense(2)) 那么回归应该使用什么指标呢?
  • 回归不需要度量,损失本身就是一个度量
  • 您可能会发现What function defines accuracy in Keras when the loss is mean squared error (MSE)? 中的讨论很有用。事实上,正如@MatiasValdenegro 所说,你不需要任何额外的回归指标——损失本身就是一个指标

标签: python tensorflow machine-learning keras evaluation


【解决方案1】:

准确度指标仅对分类任务有效。因此,如果您在回归任务中使用准确度作为指标,则报告的指标值可能根本无效。从你的代码中,我觉得你有一个回归任务,所以不应该使用它。

以下是您可以在 Keras 中用于回归问题的指标列表。

Mean Squared Error: mean_squared_error, MSE or mse
Mean Absolute Error: mean_absolute_error, MAE, mae
Mean Absolute Percentage Error: mean_absolute_percentage_error, MAPE, mape
Cosine Proximity: cosine_proximity, cosine

您可以在 link 阅读一些理论,并在 link 查看一些 keras 示例代码。

抱歉,时间不多了,但我相信这些链接真的会对您有所帮助。 :)

【讨论】:

  • 是的,这是一个回归任务,那么您建议使用什么指标?
【解决方案2】:

根据您的真实/预测值和使用损失的范围 - 似乎您正在尝试解决回归问题,而不是分类。

所以,如果我理解正确 - 您尝试根据输入预测两个数值 - 而不是预测,两个类中的哪一个对这些输入有效。

如果是这样 - 您不应该使用准确度指标。因为它只会比较每个输入样本/预测的最大输入索引(有点简化)。例如。 9996

【讨论】:

    猜你喜欢
    • 2021-11-19
    • 2020-06-09
    • 2015-09-06
    • 2016-10-24
    • 2011-08-15
    • 2019-08-02
    • 2021-08-24
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多