python - 无法训练解决 XOR 映射的神经网络

标签 python neural-network keras

我正在尝试为 Keras 中的 XOR 问题实现一个简单的分类器。这是代码:

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

X = numpy.array([[1., 1.], [0., 0.], [1., 0.], [0., 1.], [1., 1.], [0., 0.]])
y = numpy.array([[0.], [0.], [1.], [1.], [0.], [0.]])
model = Sequential()
model.add(Dense(2, input_dim=2, init='uniform', activation='sigmoid'))
model.add(Dense(3, init='uniform', activation='sigmoid'))
model.add(Dense(1, init='uniform', activation='softmax'))
sgd = SGD(lr=0.001, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)

model.fit(X, y, nb_epoch=20)
print()
score = model.evaluate(X, y)
print()
print(score)
print(model.predict(numpy.array([[1, 0]])))
print(model.predict(numpy.array([[0, 0]])))

我尝试更改轮数、学习率和其他参数。但错误从第一个纪元到最后一个纪元保持不变。

Epoch 13/20
6/6 [==============================] - 0s - loss: 0.6667 
Epoch 14/20
6/6 [==============================] - 0s - loss: 0.6667
Epoch 15/20
6/6 [==============================] - 0s - loss: 0.6667
Epoch 16/20
6/6 [==============================] - 0s - loss: 0.6667
Epoch 17/20
6/6 [==============================] - 0s - loss: 0.6667
Epoch 18/20
6/6 [==============================] - 0s - loss: 0.6667
Epoch 19/20
6/6 [==============================] - 0s - loss: 0.6667
Epoch 20/20
6/6 [==============================] - 0s - loss: 0.6667

6/6 [==============================] - 0s

0.666666686535
[[ 1.]]
[[ 1.]]

你如何在 Keras 中训练这个网络?

此外,是否有更好的库来实现神经网络?我试过 PyBrain,但它已被放弃,试过 scikit-neuralnetwork 但文档真的很神秘所以无法弄清楚如何训练它。我严重怀疑 Keras 是否有效。

最佳答案

在您的示例中,您有一个包含 1 个单元的密集层和 softmax 激活。这样一个单元的值将始终为 1.0,因此没有信息可以从您的输入流向您的输出,网络也不会做任何事情。 Softmax 仅在您需要生成 n 个类别的概率预测时真正有用,其中 n 大于 2。

其他答案建议更改代码以使其工作。只需删除 activation='softmax' 可能就足够了。

Keras 通常可以正常工作。

关于python - 无法训练解决 XOR 映射的神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34311586/

相关文章:

python - 尝试打印具有一定长度的单词数

python - 如何在 PyQt5 中居中窗口标题?

python - 如何实现标准输入、标准输出包装器?

machine-learning - 测试期间批量归一化

c - FANN 中的函数根据训练时设置的缩放参数来缩放测试数据

python - 为什么 Mean Average Percentage Error(mape) 非常高?

python - 为什么keras模型预测编译后会变慢?

python - Keras - 检索图层连接到的图层

python - Matplotlib 和 Pyplot.close() 不释放内存? - 后端相关的 Qt4Agg

machine-learning - CS231n上softmax的解析梯度