python有一个很好用的神经网络库。虽然sklearn很强大,可是好像对神经网络的支持并非那么那好。html
1.安装python
安装很方便,项目是一个开源的,托管在github上。若是你用的也是Anconda平台,那么在Anconda Prompt的命令行中敲下
git
pip install git+https://github.com/pybrain/pybrain.git@0.3.3github
等一下子就会装好了。装好了是这样的:网络
而后就能在ide里面import pybrain了。数据结构
2.创建神经网络的拓扑结构app
有两种方式,一种比较简单,直接指明层的数目就能够了ide
net = buildNetwork(4, 10, 1)这样你就创建了一个输入层为4个节点,隐藏层为10个节点,一个输出节点的神经网络拓扑结构。
当时,我的仍是建议使用复杂一点的神经网络创建方法。函数
def netBuild(ds): # net = buildNetwork(4, 10, 1) # 创建神经网络fnn fnn = FeedForwardNetwork() # 设立三层,一层输入层(3个神经元,别名为inLayer),一层隐藏层,一层输出层 inLayer = LinearLayer(4, name='inLayer') hiddenLayer = SigmoidLayer(13, name='hiddenLayer0') outLayer = LinearLayer(1, name='outLayer') # 将三层都加入神经网络(即加入神经元) fnn.addInputModule(inLayer) fnn.addModule(hiddenLayer) fnn.addOutputModule(outLayer) # 创建三层之间的链接 in_to_hidden = FullConnection(inLayer, hiddenLayer) hidden_to_out = FullConnection(hiddenLayer, outLayer) # 将链接加入神经网络 fnn.addConnection(in_to_hidden) fnn.addConnection(hidden_to_out) # 让神经网络可用 fnn.sortModules() print "Trainging" trainer = BackpropTrainer(net, ds,verbose = True, learningrate=0.01) #trainer.train() trainer.trainUntilConvergence(maxEpochs=100) print "Finish training" return fnn上面的代码,咱们写了一个函数,这个函数返回了fnn,也就是一个神经网络结构。在创建了fnn后,其实咱们还作了一个工做,就是训练。首先咱们是设置了个训练器traine,verbose=True这一条仍是建议打开的,这样在训练的过程当中咱们可以看到当前训练的状况。learningrate则是学习率。
最后开启训练器,trainer.trainUntilConergence这个函数能够设置最大的训练次数。学习
这时候有同窗就要问了,怎么没提到数据。训练的样本数据是这个函数的参数。
3.训练样本def readData(path):
def readData(path): reader = csv.reader(file(path, 'rb')) data = [] for line in reader: data.append((float(line[1]),float(line[2]),float(line[3]),float(line[4]),float(line[0]))) return data咱们的神经网络四个输入一个输出的,因此对于学习样本就应该有五个记录。在个人数据中,有五个记录,也就是五列数据。第一列是结果,后面四列是输入。
这个函数,传入的参数path就是文件的路径。这里,文件的读取咱们用了一点点tip。首先是
reader = csv.reader(file(path, 'rb'))这里,file(path,‘rb’)返回的是一个文件句柄,外面用csv流作一个包装,而后就能够很方便的读取了,源文件的每一行都变成了一个list,list中的元素就是被“,”分开的元素。
def dsBuild(data): ds = SupervisedDataSet(4, 1) for ele in data: ds.addSample((ele[0],ele[1],ele[2],ele[3]), (ele[4])) dsTrain,dsTest = ds.splitWithProportion(0.8) return dsTrain,dsTest有了这样的数据也不能直接放到神经网络里面去训练。PyBrain有本身的训练数据结构,固然,说白了就是ndarray。
ds = SupervisedDataSet(4, 1)这里定义了一个SupervisedData的数据结构,四个输入,一个输出。这个数据结构还有一个方法,可以给使用者随机按比例切割整个数据集,这个方法就是
splitWithProportion()
传入的参数是分割数据集的比例。如0.8则表示2/8分割。
4.使用神经网络
dsTrain,dsTest = dsBuild(readData(path)) netModel = netBuild(dsTrain) dsTest = dsTrain #pred=[] for i in range(0,len(dsTest['input'])): error = dsTest['target'][i]-netModel.activate((dsTest['input'][i][0],dsTest['input'][i][1],dsTest['input'][i][2],dsTest['input'][i][3])) print error
最后把上面的函数用起来就能够了。模型训练完以后,只要用activate方法,传入输入的量,就能够获得结果。
5.更多的内容,能够去官网看哦。
http://www.pybrain.org/docs/index.html
不过彷佛官网干货并很少。
本文同步分享在 博客“钱塘小甲子”(CSDN)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。