我正在尝试为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激活的Dense图层.这样一个单位的值总是1.0,所以没有信息可以从你的输入流到你的输出,网络也不会做任何事情.Softmax仅在需要生成n个类中概率的预测时才真正有用,其中n大于2.
其他答案建议更改代码以使其工作.只需删除activation='softmax'
即可.
Keras一般都有用.