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.
天啊 我一定是什么地方写错了. 我还是洗洗睡了吧.