测量值的准确性是否可信?

2024-06-02 05:42:44 发布

您现在位置:Python中文网/ 问答频道 /正文

构建序列

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)

如果结果与事实相去甚远,那么VALU acc怎么可能是1呢


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

Tags: testaddsizemodeltrain序列valsimple
2条回答

根据你的真实/预测值和使用损失的范围-看起来你是在试图解决回归问题,而不是分类问题

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

如果是这样-你不应该使用精度度量。因为它只会比较每个输入样本/预测的最大输入索引(稍微简化)。例如9996<;9999和10141.571<;10277.236.

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

下面是您可以在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示例代码

抱歉,时间有点短,但我相信这些链接确实会对您有所帮助。:)

相关问题 更多 >