如何使用 keras 进行异或 [英] How to use keras for XOR

查看:68
本文介绍了如何使用 keras 进行异或的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过代码a xor来练习keras,但是结果不对,下面是我的代码,感谢大家的帮助.

from keras.models import Sequential从 keras.layers.core 导入密集,激活从 keras.optimizers 导入 SGD将 numpy 导入为 np模型 = Sequential()# 两层model.add(密集(input_dim=2,output_dim=4,init="glorot_uniform"))模型.添加(激活(sigmoid"))model.add(密集(input_dim=4,output_dim=1,init="glorot_uniform"))模型.添加(激活(sigmoid"))sgd = SGD(l2=0.0,lr=0.05,decay=1e-6,momentum=0.11,nesterov=True)模型.编译(损失='mean_absolute_error',优化器=sgd)打印开始训练"列表 1 = [1,1]标签 1 = [0]列表2 = [1,0]标签 2 = [1]列表3 = [0,0]标签3 = [0]list4 = [0,1]标签 4 = [1]train_data = np.array((list1,list2,list3,list4)) #epoch = 1000 的四个样本标签 = np.array((label1,label2,label3,label4))模型.fit(train_data,label,nb_epoch = 1000,batch_size = 4,verbose = 1,shuffle=True,show_accuracy = True)list_test = [0,1]测试 = np.array((list_test,list1))类 = 模型.预测(测试)印刷类

<块引用>

输出

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

解决方案

如果我将代码中的 epoch 数增加到 50000,它通常会收敛到我的正确答案,只需要一点时间:)

不过,它确实经常卡住.如果我将损失函数更改为mean_squared_error"(这是一个更平滑的函数),我会获得更好的收敛特性.

如果我使用 Adam 或 RMSProp 优化器,我的收敛速度会更快.我的最终编译行,它有效:

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

I want to practice keras by code a xor, but the result is not right, the followed is my code, thanks for everybody to help me.

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

Output

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

解决方案

If I increase the number of epochs in your code to 50000 it does often converge to the right answer for me, just takes a little while :)

It does often get stuck, though. I get better convergence properties if I change your loss function to 'mean_squared_error', which is a smoother function.

I get still faster convergence if I use the Adam or RMSProp optimizers. My final compile line, which works:

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

这篇关于如何使用 keras 进行异或的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆