Jas*_*ian 5 python xor neural-network keras
我想通过代码xor练习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
Run Code Online (Sandbox Code Playgroud)
产量
[[ 0.31851079] [ 0.34130159]] [[ 0.49635666] [0.51274764]]
Run Code Online (Sandbox Code Playgroud)
如果我将代码中的纪元数增加到 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2547 次 |
| 最近记录: |