Ворота Keras LSTM XOR - PullRequest
       12

Ворота Keras LSTM XOR

0 голосов
/ 14 мая 2018

Я изучал Keras для проекта, для ознакомления я пытаюсь сделать простое машинное обучение с использованием LSTM (что я буду использовать для проекта) для простого прогнозирования гейта XOR.Но, хотя я изменяю число нейронов, слой, функцию потерь, эпоху или оптимизатор, я не могу получить правильный прогноз.Что-то мне не хватает в Keras или в этом коде?

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))

model.compile(loss='mae', optimizer='adam')
# print(model.summary())
model.fit(np.asarray(data), np.asarray(output), epochs=50)

print(model.predict_classes(np.asarray(data)))

1 Ответ

0 голосов
/ 15 мая 2018

Вы прогнозируете выходной сигнал 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 значения по умолчанию имеют небольшую скорость обучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...