Можно ли доверять показателю точности val_acc? - PullRequest
0 голосов
/ 06 ноября 2019

Построение последовательности

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] 

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Метрика точности действительна только для задач классификации . Поэтому, если вы используете точность в качестве метрики в задачах регрессии, сообщаемые значения метрики могут быть недействительными вообще. Из вашего кода я чувствую, что у вас есть задача регрессии, поэтому ее не следует использовать.

Ниже приведен список метрик, которые вы можете использовать в 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

Вы можете прочитать о какой-то теории по ссылке и посмотреть код примера keras на ссылке .

Извините, немного времени, но я уверенэти ссылки действительно помогут вам. :)

0 голосов
/ 06 ноября 2019

По диапазону ваших истинных / прогнозируемых значений и использованных потерь - кажется, что вы пытаетесь решить проблему регрессии, а не классификации.

Так что, если я вас правильно понял - вы пытаетесь предсказатьдва числовых значения, основанные на вводе - вместо прогнозирования, какой из двух классов является допустимым для этих входных данных.

Если это так - не следует использовать метрику точности. Потому что он будет просто сравнивать индексы максимального ввода для каждой входной выборки / прогноза (немного упрощенно). Например, 9996 <9999 и 10141,571 <10277.236. </p>

...