Como usar keras para XOR

votos
5

Eu quero praticar keras por código de um xor, mas o resultado não é certo, o seguido é o meu código, obrigado por toda a gente para me ajudar.

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

Saída

[[ 0.31851079] [ 0.34130159]] [[ 0.49635666] [0.51274764]] 
Publicado 22/07/2015 em 06:13
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Se eu aumentar o número de épocas em seu código para 50000 ele muitas vezes convergem para a resposta certa para mim, só demora um pouco :)

Ele muitas vezes ficar preso, no entanto. Eu obter melhores propriedades de convergência se eu mudar a sua função perda para 'mean_squared_error', que é uma função suave.

Recebo a convergência ainda mais rápido se eu usar os otimizadores de Adão ou RMSProp. Minha linha de compilação final, que funciona:

model.compile(loss='mse', optimizer='adam')
...
model.fit(train_data, label, nb_epoch = 10000,batch_size = 4,verbose = 1,shuffle=True,show_accuracy = True)
Respondeu 07/08/2015 em 17:20
fonte usuário

votos
0

Eu usei uma única camada escondida com 4 nós escondidos, e quase sempre converge para a resposta certa a 500 épocas. Eu costumava ativações sigmóide.

Respondeu 16/01/2017 em 20:31
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more