XOR没有使用keras v2.0学习

J.D*_*own 9 python numpy neural-network keras

我有一段时间使用工具keras得到了相当糟糕的结果,并且对这个工具没有那么多的怀疑......但我现在开始有点担心了.

我试图看看它是否可以处理一个简单的XOR问题,并且在30000个时代之后它仍然没有解决它...

码:

from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.optimizers import SGD
import numpy as np

np.random.seed(100)

model = Sequential()
model.add(Dense(2, input_dim=2))
model.add(Activation('tanh'))
model.add(Dense(1, input_dim=2))
model.add(Activation('sigmoid'))
X = np.array([[0,0],[0,1],[1,0],[1,1]], "float32")
y = np.array([[0],[1],[1],[0]], "float32")
model.compile(loss='binary_crossentropy', optimizer='adam')
model.fit(X, y, nb_epoch=30000, batch_size=1,verbose=1)

print(model.predict_classes(X))
Run Code Online (Sandbox Code Playgroud)

这是我的结果的一部分:

4/4 [==============================] - 0s - loss: 0.3481     
Epoch 29998/30000
4/4 [==============================] - 0s - loss: 0.3481     
Epoch 29999/30000
4/4 [==============================] - 0s - loss: 0.3481     
Epoch 30000/30000
4/4 [==============================] - 0s - loss: 0.3481     
4/4 [==============================] - 0s
[[0]
 [1]
 [0]
 [0]]
Run Code Online (Sandbox Code Playgroud)

这个工具有问题吗 - 或者我做错了什么?

我正在使用的版本:

MacBook-Pro:~ usr$ python -c "import keras; print keras.__version__"
Using TensorFlow backend.
2.0.3
MacBook-Pro:~ usr$ python -c "import tensorflow as tf; print tf.__version__"
1.0.1
MacBook-Pro:~ usr$ python -c "import numpy as np; print np.__version__"
1.12.0
Run Code Online (Sandbox Code Playgroud)

更新后的版本:

from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.optimizers import Adam, SGD
import numpy as np

#np.random.seed(100)

model = Sequential()
model.add(Dense(units = 2, input_dim=2, activation = 'relu'))
model.add(Dense(units = 1, activation = 'sigmoid'))
X = np.array([[0,0],[0,1],[1,0],[1,1]], "float32")
y = np.array([[0],[1],[1],[0]], "float32")
model.compile(loss='binary_crossentropy', optimizer='adam')
print model.summary()
model.fit(X, y, nb_epoch=5000, batch_size=4,verbose=1)

print(model.predict_classes(X))
Run Code Online (Sandbox Code Playgroud)

小智 3

我无法对丹尼尔的回应添加评论,因为我没有足够的声誉,但我相信他走在正确的道路上。虽然我个人没有尝试过使用 Keras 运行 XOR,但这里有一篇文章可能会很有趣 - 它分析了 2-2-1 网络的局部最小值的各个区域,表明较高的数值精度会导致卡住的情况减少关于梯度下降算法。

2-2-1 XOR 网络误差面的局部最小值(Ida G. Sprinkhuizen-Kuyper 和 Egbert JW Boers)

顺便说一句,我不会考虑使用 2-4-1 网络来解决过度拟合问题。在 0-1 平面上进行 4 次线性切割(切割成 2x2 网格)而不是 2 次切割(对角线切割角)只是以不同的方式分离数据,但由于我们只有 4 个数据点,并且在数据中,使用 4 个线性切割的神经网络并不是在描述“噪声”,而是在描述 XOR 关系。