Есть несколько вопросов с вашим вопросом.
Для начала, ваш импорт довольно неортодоксален (правда, не имеет отношения к вашей проблеме, но помогает придерживаться некоторых соглашений):
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
Во-вторых, вам не нужно несколько тысяч примеров для проблемы XOR; Есть только четыре комбинации:
X = np.array([[0,0],[0,1],[1,0],[1,1]])
y = np.array([[0],[1],[1],[0]])
и все.
В-третьих, по той же причине у вас не может быть данных «проверки» или «проверки» с XOR; в простейшем подходе (т. е. то, что вы, вероятно, пытаетесь сделать здесь), вы можете только проверить, насколько хорошо модель выучила функцию, используя эти 4 комбинации (поскольку их больше нет!).
В-четвертых, вы должны начать с простой модели с одним скрытым слоем (с более чем 2 единицами и без выпадения), а затем постепенно переходить на при необходимости :
model = Sequential()
model.add(Dense(8, activation="relu", input_dim=2))
model.add(Dense(1, activation="sigmoid"))
model.compile(loss='binary_crossentropy', optimizer='adam')
model.fit(X, y, batch_size=1, epochs=1000)
Это должно снизить ваши потери до ~ 0,12; насколько хорошо он выучил функцию?
model.predict(X)
# result:
array([[0.31054294],
[0.9702552 ],
[0.93392825],
[0.04611744]], dtype=float32)
y
# result:
array([[0],
[1],
[1],
[0]])
Это достаточно хорошо? Ну, я не знаю - правильный ответ всегда "это зависит"! Но теперь у вас есть отправная точка (то есть сеть, которая, вероятно, изучает что-то), из которой вы можете перейти к дальнейшим экспериментам ...