Вы прогнозируете выходной сигнал XOR, закодированный как горячие векторы. В этом случае это очень похоже на проблему классификации. Если вы используете softmax
для создания дистрибутива и установите свой убыток на categorical_crossentropy
, ваша сеть начнет учиться:
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, LSTM
data = [[[0, 0]], [[0, 1]], [[1, 0]], [[1, 1]]]
output = [[1, 0], [0, 1], [0, 1], [1,0]]
model = Sequential()
model.add(LSTM(10, input_shape=(1, 2), return_sequences=True))
model.add(LSTM(10))
model.add(Dense(2, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam')
# print(model.summary())
model.fit(np.asarray(data), np.asarray(output), epochs=200)
print(model.predict_classes(np.asarray(data)))
Также вам нужно увеличить количество эпох, так как adam
значения по умолчанию имеют небольшую скорость обучения.