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 关系。
| 归档时间: |
|
| 查看次数: |
514 次 |
| 最近记录: |