Keras - accuracy 100%, но результат не совпадает даже с тренировочным датасетом
Есть такой код:
from keras.models import Sequential
from keras.layers import Dense
import numpy
from numpy import exp, array, random, dot
# задаем для воспроизводимости результатов
numpy.random.seed(2)
# разбиваем датасет на матрицу параметров (X) и вектор целевой переменной (Y)
X = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])
Y = array([[0, 1, 1, 0]]).T
# создаем модель, добавляем 1 слой и 3 значения для активации
model = Sequential()
model.add(Dense(1, input_dim=3, activation='sigmoid'))
# компилируем модель, используем градиентный спуск adam
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=['accuracy'])
# обучаем нейронную сеть
model.fit(X, Y, epochs = 1000, batch_size=10)
# оцениваем результат
scores = model.evaluate(X, Y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
pre = model.predict(array([[0, 0, 1]]))
print(pre)
Как видим, значение [0, 0, 1] уже есть в тренировочном сете и правильное его продолжение = 0.
На выходе же получаю вот это:
accuracy: 100.00%
[[0.4054786]]
А должно быть, соответственно, 0.
Как может быть при точности равной 100% неправильно предсказывать значение из тренировочного набора? Что я сделал не так?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Для того, чтобы предсказывать класс, вместо его вероятности воспользуйтесь методом model.predict_classes(...):
In [33]: model.predict_classes(array([[0,0,1], [1,1,1]]))
Out[33]:
array([[0],
[1]])