Как использовать keras для XOR

Я хочу практиковать keras по коду xor, но результат неправильный, следующий – мой код, спасибо всем, кто мне поможет.

from keras.models import Sequential from keras.layers.core import Dense,Activation from keras.optimizers import SGD import numpy as np model = Sequential()# two layers model.add(Dense(input_dim=2,output_dim=4,init="glorot_uniform")) model.add(Activation("sigmoid")) model.add(Dense(input_dim=4,output_dim=1,init="glorot_uniform")) model.add(Activation("sigmoid")) sgd = SGD(l2=0.0,lr=0.05, decay=1e-6, momentum=0.11, nesterov=True) model.compile(loss='mean_absolute_error', optimizer=sgd) print "begin to train" list1 = [1,1] label1 = [0] list2 = [1,0] label2 = [1] list3 = [0,0] label3 = [0] list4 = [0,1] label4 = [1] train_data = np.array((list1,list2,list3,list4)) #four samples for epoch = 1000 label = np.array((label1,label2,label3,label4)) model.fit(train_data,label,nb_epoch = 1000,batch_size = 4,verbose = 1,shuffle=True,show_accuracy = True) list_test = [0,1] test = np.array((list_test,list1)) classes = model.predict(test) print classes 

Вывод

 [[ 0.31851079] [ 0.34130159]] [[ 0.49635666] [0.51274764]] 

2 Solutions collect form web for “Как использовать keras для XOR”

Если я увеличиваю количество эпох в вашем коде до 50000, он часто сходится к правильному ответу для меня, просто занимает немного времени 🙂

Тем не менее, это часто застревает. Я получаю лучшие свойства конвергенции, если я изменю вашу функцию потерь на «mean_squared_error», которая является более плавной функцией.

Я получаю еще более высокую конвергенцию, если я использую оптимизаторы Adam или RMSProp. Моя заключительная строка компиляции, которая работает:

 model.compile(loss='mse', optimizer='adam') ... model.fit(train_data, label, nb_epoch = 10000,batch_size = 4,verbose = 1,shuffle=True,show_accuracy = True) 

Я использовал один скрытый слой с 4 скрытыми узлами и почти всегда сходится к правильному ответу в течение 500 эпох. Я использовал сигмоидные активации.

Python - лучший язык программирования в мире.