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

本文介绍了PyBrain库的安装过程及如何使用它构建神经网络、创建数据集和训练网络。通过示例展示了网络构建的灵活性及如何使用误差反向传播算法进行训练。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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

注:原创博文,转载请注明出处:http://blog.youkuaiyun.com/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[‘target’]

    也可以再次清除数据集,并从中删除所有值: 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 buildNetwork
from pybrain.structure import TanhLayer
from pybrain.structure import  SoftmaxLayer
from 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 TanhLayer
net = buildNetwork(2,3,1,hiddenclass = TanhLayer)
print "net['hidden0_1'] = " , net['hidden0']

#自定义复杂网络,修改输出层的类型
#from pybrain.structure import  SoftmaxLayer
net = 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 SupervisedDataSet
from pybrain.datasets import UnsupervisedDataSet

ds = 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,target
print '直接访问输入字段和标记字段的数组'
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 buildNetwork
from pybrain.structure import TanhLayer

#引入建立数据集所需的相关模块
from pybrain.datasets import SupervisedDataSet

#引入BackpropTrainer反向训练器
from pybrain.supervised.trainers import BackpropTrainer

#引入之前建好的建立数据集中的module
from 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:程序小猿,个人能力和表达能力有限,如有错误欢迎指正交流。码字不易,转载请注明出处(笔芯)。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值