Keras - как decode результат работы сети?

Создал код, который должен обучиться распознавать четные и нечетные числа, давая ответ Yes или No. Скрипт при обучении никаких ошибок не выводит, дает accuracy около 55%, но при попытке ввода стороннего числа (в моемслучае 33) выдает какой-то код. Как его перевести в Yes или No?

import numpy as np
from keras.models import Sequential
from keras.layers import LSTM, Dense
from keras.utils import to_categorical

# Data preparation
X = np.array([2,3,4,5,6,7,8,9,10])
y = np.array(['yes','no','yes','no','yes','no','yes','no','yes'])
# encode the labels
classes = ['yes', 'no']
y = to_categorical([classes.index(label) for label in y])

X = array(X).reshape(9, 1, 1)
# Define the LSTM model
model = Sequential()
model.add(LSTM(128, input_shape=(1,1)))
model.add(Dense(len(classes), activation='sigmoid'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

# Fit the model
model.fit(X, y, epochs=10, batch_size=1)

# Make predictions
X = np.array([33])
test_input = X.reshape((1, 1, 1))
test_output = model.predict(test_input, verbose=0)
print (test_output)

Ответы (1 шт):

Автор решения: CrazyElf

при попытке ввода стороннего числа (в моемслучае 33) выдает какой-то код

Я запустил ваш скрипт, результат такой:

[[0.5524149  0.46123716]]

Это не "какой-то код", а вероятности принадлежности образца к классам из списка classes. Т.е. примерно с вероятностью 55% спрогнозирован первый класс "yes" и с вероятностью 46% - второй класс "no".

Программно перевести эти вероятности в конкретное предсказание можно так (для одиночного результата):

print(classes[np.argmax(test_output)])

Вывод:

yes

P.S. Но вообще в целом это какая-то дичь, так вы ничего путного не предскажете. Нейросети - это не волшебный чёрный ящик, им тоже нужна какая-то информация, чтобы что-то предсказать. В ваших данных нужной информации для таких предсказаний просто нет.

→ Ссылка