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 шт):
при попытке ввода стороннего числа (в моемслучае 33) выдает какой-то код
Я запустил ваш скрипт, результат такой:
[[0.5524149 0.46123716]]
Это не "какой-то код", а вероятности принадлежности образца к классам из списка classes
. Т.е. примерно с вероятностью 55% спрогнозирован первый класс "yes" и с вероятностью 46% - второй класс "no".
Программно перевести эти вероятности в конкретное предсказание можно так (для одиночного результата):
print(classes[np.argmax(test_output)])
Вывод:
yes
P.S. Но вообще в целом это какая-то дичь, так вы ничего путного не предскажете. Нейросети - это не волшебный чёрный ящик, им тоже нужна какая-то информация, чтобы что-то предсказать. В ваших данных нужной информации для таких предсказаний просто нет.