2015-07-22 20 views
4

我想通过xor代码来练习keras,但结果不对,后面是我的代码,感谢大家帮助我。如何使用keras进行异或运算

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]] 
+0

“不正确”是什么意思?你会得到什么结果?你会期待什么? – Daniel

+0

谢谢,我想获得列表classes = [a,b],一种方法为1,b方法为0,但事实是a,b就像一个随机的,有两个结果:[[0.31851079] [0.34130159]] [[0.49635666] [0.51274764]] –

+0

请将此内容纳入您的问题。这样我们就不必重现你的练习以知道什么是错误的...... – Daniel

回答

1

如果我增加时期的数量在代码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) 
+0

4超参数正适合4(数据点,标签)。 XOR操作员没有被学习,它正在过度配备。 –

+0

是的,这是正确的@ J.Down – Aditya

0

我用一个单一的隐层4个隐藏节点,它几乎总是收敛到500个时期内正确的答案。我使用了sigmoid激活。

+0

这将是overfitting? –

相关问题