pybrain first attempt, pybrain 初试. MNIST上做softmax分类.

今天发现了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.

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

 


 

 

posted @ 2013-06-21 11:14  johnniac  阅读(1124)  评论(0)    收藏  举报