pybrain batchlearning 神经网络

转自 http://www.ziliao1.com/Article/Show/3DBCCDA45B9EF4FFC71D1E6478F9AD81.html

今天发现了pybrain这个宝藏.   就试了下写一个简单的MNIST数字集的分类.

 

这些事我的imports:

 

 

  1 import numpy as np

  2

  3 from pybrain.tools.datasets import mnist

  4 from pybrain.utilities import percentError

  5 from pybrain.tools.shortcuts import buildNetwork

  6 from pybrain.supervised.trainers import BackpropTrainer

  7 from pybrain.structure.modules import SoftmaxLayer

 

 

 

首先pybrain提供了MNIST loading的函数:

 

traindata, testdata  = mnist.makeMnistDataSets('./MNISTdata/')

然后很简单就可以构建一个hiddenlayer 400 nodes 的三层的network, 以及一个backpropagation的trainer:

 

 11     fnn = buildNetwork(traindata.indim, 400, traindata.outdim, outclass = SoftmaxLayer)

 12     trainer = BackpropTrainer(fnn, dataset = testdata, batchlearning=True, verbose=True, weight    decay=.01)

注意batchlearning 这个参数是True, 不然就变成了sequential的 一个一个data point, 每一个都要更新weights , 这样超慢.  设置为True 这样只有在一个batch的最后才更新.

 

注意一个epoch可以是很多的batch, 前者指的是所有的training data都走一遍称为一个epoch.

 

 

 

batchlearning True 了之后 还要设定有多少的batch, 不然就是整个60000个data作为一个超大的batch.

 

traindata.randomBatches( 'input', n = 50)

最后就是傻瓜的trian一下, 输出点东西了.

 

 17     trainer.trainEpochs(1) 18     trainresult = percentError(trainer.testOnClassData(dataset = traindata), traindata['target'    ])   19     predictresult = percentError(trainer.testOnClassData(dataset = testdata), testdata['target'    ])   20     print  trainresult, predictresult

最终结果, 一边epoch只要两分钟:

 

 

In [23]: run -t softmaxNN.py

Total error: 0.0848271404408

0.00166666666667 0.01

 

IPython CPU timings (estimated):

  User   :     114.21 s.

  System :       0.49 s.

Wall time:     114.72 s.

 

请忽略toral error 那个我也不知道是什么意思, 正确率是99%, 很好! total error下面哪行 第一个数是training set 上的error, 第二个是testing set上的错误率

 

 

 

跑一个中间有2层hidden layer, 每一层有400个nodes:

 

 

In [25]: run -t softmaxNN.py

Total error: 0.0900159741198

0.00166666666667 0.01

 

IPython CPU timings (estimated):

  User   :     156.10 s.

  System :       0.40 s.

Wall time:     156.53 s.

 

正确率并没有提高.

 

 

 

跑一个一层hiddenlayer, 只有10个node:

 

 

In [28]: run -t softmaxNN.py

0.01

 

IPython CPU timings (estimated):

  User   :      23.71 s.

  System :       0.35 s.

Wall time:      24.07 s.

 

错误率还是只有1%!!!!!! MNIST一共就10个label.....

 

 

 

再来  一层hiddenlayer, 5 个nodes

 

 

In [29]: run -t softmaxNN.py

0.01

 

IPython CPU timings (estimated):

  User   :      23.77 s.

  System :       0.38 s.

Wall time:      24.17 s.

 

还是1%, 天啊 我要崩溃了.

 

 

 

中间层只有一个node:

 

 

In [30]: run -t softmaxNN.py

0.01

 

IPython CPU timings (estimated):

  User   :      23.30 s.

  System :       0.38 s.

Wall time:      23.69 s.

 

天啊  我一定是什么地方写错了. 我还是洗洗睡了吧.


分享到: 微信 更多