具有pybrain的极低精度神经网络

时间:2015-01-24 05:55:23

标签: neural-network pybrain

我刚开始使用python学习机器学习,我正在用pybrain建立一个神经网络来训练数字识别问题。我终于得到了程序的工作,但是在训练和测试集上的准确度非常低(~30%)。我认为肯定有问题,但我找不到问题。我被困在这里好几天了。谁能帮我吗?非常感谢。

每个训练数据:输入为28 * 28灰度,重新变换为1 * 784,输出为1 * 10数组,0或1,位置1表示数字,例如 [0,0,0,0,0,0,0,1,0,0]表示数字为7.

以下是代码:

from pybrain.datasets.supervised import SupervisedDataSet as SDS
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
from sklearn.metrics import accuracy_score

#build datasets
size_sample = 500
#randomly choose 500 training data    
(sample_X,sample_y) = randomSample(training_X, training_y, size_sample)
ds = SDS(28*28,10)
ds.setField( 'input', sample_X )
#sample_y = sample_y.reshape(size_sample,10)
ds.setField( 'target', sample_y )
#build network
Num_Hidden_Layers = 10
net = buildNetwork(ds.indim,Num_Hidden_Layers,ds.outdim,bias=True,outclass=SoftmaxLayer)
#train data
trainer = BackpropTrainer(net,ds)

# predict using test data
print "Making predictions..."
predict_y = []
for i in range(test_X.shape[0]):
    pred = net.activate(test_X[i, :])
    print pred
    print pred.argmax()
    predict_y = np.append(predict_y, pred.argmax())

2 个答案:

答案 0 :(得分:0)

因为你实际上并没有使用10个隐藏图层,所以你只使用了10个隐藏单位。 (http://pybrain.org/docs/quickstart/network.html)请尝试以下方法:

    buildNetwork(ds.indim,25, 50, 25,ds.outdim,bias=True,outclass=SoftmaxLayer) 

如果这样可以提供更好的输出精度,那么您就知道自己正处于正确的轨道上,此时您只需要参与其中。

答案 1 :(得分:0)

尝试使用弹性反向传播训练器(Rprop)。这应该会更好地训练你的网络方式。