Pybrain学习笔记-2 pybrain快速入门

来源:互联网 发布:苹果 mac 最新系统 编辑:程序博客网 时间:2024/06/08 01:11

Pybrain学习笔记-2 Pybrain快速入门

注:原创博文,转载请注明出处:http://blog.csdn.net/m0_37887016

参考文档:http://www.pybrain.org/docs/index.html

一、安装pybrain模块

1.安装numpy

2.安装scipy

3.安装pybrain

      Pybrain模块的安装首先依赖numpy和scipy,确保在安装之前,你已经安装了这两个模块,模块的安装办法可以参靠我的博文“Python模块的安装”

 二、快速入门

 1.建立神经网络

     要快速启动快速入门,只需启动Python,我们将在翻译器中完成所有操作(我用的IDE是eclipse+anaconda+Python2.7,当然也可以直接在控制台进行测试):

 PyBrain中,网络由互相关联的模块和连接组成。你可以将网络视为有向非循环图,其中节点为模块,边缘为连接。 这使得PyBrain非常灵活,当然,这种结构不是在所有情况下都是必须的。

 

建立神经网络的快捷方式

 

因此,有一种创建网络的简单方法,即buildNetwork快捷方式:

此调用返回一个具有两个输入,三个隐藏和单个输出神经元的网络。PyBrain中,这些图层是Module对象,它们已经连接到FullConnection对象。

 

激活网络

 

网络已经用随机值初始化 - 我们已经可以计算出其输出值:

为此,我们使用.activate()方法,它期望一个列表,元组或数组作为输入。

 

检查结构

 

我们如何检查网络的结构呢?PyBrain中,网络的每个部分都有一个可以访问它的名称。使用buildNetwork快捷方式构建网络时,这些部分将自动命名:

隐藏层最后有数字,主要是与一些其他的关键字起到区别的作用。

 

更复杂的网络

 

当然,我们希望在建立网络时有更大的灵活性。例如,默认情况下,隐藏层被构造为S形挤压函数:但是在很多情况下,这不是我们想要的。 我们也可以提供不同类型的图层:

我们还能做更多改动,比如,我们同样可以给输出层设置不同的类:

我们也可以告诉网络使用偏置值:

这种方法当然有一些限制:例如,我们只能构建前馈拓扑。但是可以使用PyBrain创建非常复杂的架构,这也是“pybrain使用说明书”的优势之一。

 

2.构造数据集

     为了让我们的网络学习任何东西,我们需要一个包含输入和目标的数据集。 PyBrain的pybrain.dataset包解决了这个问题,我们将使用SupervisedDataSet类来实现这样的功能。

一个定制的数据集

      SupervisedDataSet类用于标准监督学习。 它支持输入和目标值,我们必须在对象创建时指定它们的大小:

    这里我们生成了一个支持二维输入和一维标注信息的数据集。

加入实例

    神经网络训练的典型例子是XOR函数,所以我们为此建立一个数据集。 我们可以通过将样本添加到数据集来实现:

检查数据集

    我们现在已经有了一个数据集,其中有4个样本。 我们可以用python的惯用方式来检查一下数据集的大小:print len(ds)

我们自然也可以用迭代的方式来查看这个数据集:for inpt , target in ds:

    我们可以直接访问输入和目标字段数组: ds[‘input’] , ds[‘targt’]

    也可以再次清除数据集,并从中删除所有值: ds.clear

 

3.在数据集上训练神经网络

    为了调整监督学习中的模块参数,PyBrain内置一个训练器。 训练器的参数分别是一个神经网络模型和一个数据集,训练神经网络模型以适应数据集中的数据。

训练神经网络的典型方法是误差反向传播算法。 PyBrain当然有反向传播,我们将在这里使用BackpropTrainer(误差反向传播训练器):


    我们已经为XOR建立了一个数据集,我们也学会了构建可以处理这些问题的网络。 让我们用训练器BackpropTrainer将二者联系起来,然后调用train()方法来对网络进行训练。


单独调用train()方法只能训练一个完整时期的网络,并返回一个误差值。

    如果我们要训练网络直到网络收敛,还有另一种方法trainUntilConvergence(),方法名字很好记,“训练直到收敛”这返回一大堆数据,包含每个训练周期的误差元组。而且会发现误差数组的每个元素是逐渐减小的,说明网络逐渐收敛。

下面贴出三个模块的代码,实测可用:

1.test_pybrian_1

#!usr/bin/env python#_*_coding:utf-8_*_'''Created on 2017年4月13日Topic:Building a Network@author: Stuart斯图尔特'''from pybrain.tools.shortcuts import buildNetworkfrom pybrain.structure import TanhLayerfrom pybrain.structure import  SoftmaxLayerfrom pybrain.datasets import SupervisedDataSet#构建一个神经网络,简单的进行激活并打印各层的名称信息net = buildNetwork(2,3,1)print net.activate([2,1])print "net['in'] = " , net['in']print "net['hidden0'] = " , net['hidden0']print "net['out'] = " , net['out']#自定义复杂网络,把神经网络的默认隐含层参数设置为Tanh函数而不是Sigmoid函数#from pybrain.structure import TanhLayernet = buildNetwork(2,3,1,hiddenclass = TanhLayer)print "net['hidden0_1'] = " , net['hidden0']#自定义复杂网络,修改输出层的类型#from pybrain.structure import  SoftmaxLayernet = buildNetwork(2,3,2,hiddenclass = TanhLayer,outclass = SoftmaxLayer)print net.activate((2,3))net = buildNetwork(2,3,1,bias = True)print net['bias']
2.test_pybrain_2

#!usr/bin/env python#_*_coding:utf-8_*_'''Created on 2017年4月14日Topic:Building a Dataset@author: Stuart斯图尔特'''from pybrain.datasets import SupervisedDataSetfrom pybrain.datasets import UnsupervisedDataSetds = SupervisedDataSet(2,1)ds.addSample((0,0), (0,))ds.addSample((0,1), (1,))ds.addSample((1,0), (1,))ds.addSample((1,1), (0,))print '检查数据集的长度'print len (ds)    print'用for循环迭代的方式访问数据集'for inpt,target in ds:    print inpt,targetprint '直接访问输入字段和标记字段的数组'print ds['input']print ds['target']print '清除数据集'#ds.clear()#print ds['input']#print ds['target']
3.test_pybrian_3

#!usr/bin/env python#_*_coding:utf-8_*_'''Created on 2017年4月14日Topic:Training your Network on your Dataset@author: Stuart斯图尔特'''#引入建立神经网络所需的相关模块from pybrain.tools.shortcuts import buildNetworkfrom pybrain.structure import TanhLayer#引入建立数据集所需的相关模块from pybrain.datasets import SupervisedDataSet#引入BackpropTrainer反向训练器from pybrain.supervised.trainers import BackpropTrainer#引入之前建好的建立数据集中的modulefrom my_pybrain import test_pybrain_2    #my_pybrain是包名,test_pybrain_2是module名#import test_pybrain_2'''ds = SupervisedDataSet(2,1)ds.addSample((0,0), (0,))ds.addSample((0,1), (1,))ds.addSample((1,0), (1,))ds.addSample((1,1), (0,))'''net = buildNetwork(2,3,1,bias = True,hiddenclass=TanhLayer)trainer = BackpropTrainer(net,test_pybrain_2.ds)    #应用之前建立的ds数据集#通过调用train()方法来对网络进行训练print trainer.train()#通过调用trainUntilConvertgence()方法对网络训练直到收敛print trainer.trainUntilConvergence()

      至此,利用pybrain建立简单的神经络、建立有监督数据集、训练神经网络的基本操作与模块已经大致了解了,后续将进一步对pybrain的功能进行学习,如建立更明确的前馈神经网络模型,以及利用pybrian进行分类任务。

      Ps:程序小猿,个人能力和表达能力有限,如有错误欢迎指正交流。码字不易,转载请注明出处(笔芯)。


0 0
原创粉丝点击