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:程序小猿,个人能力和表达能力有限,如有错误欢迎指正交流。码字不易,转载请注明出处(笔芯)。
- Pybrain学习笔记-2 pybrain快速入门
- Pybrain学习笔记-1 pybrain介绍
- Pybrain学习笔记-3 使用Pybrain构建前馈神经网络
- 安装pybrain 机器学习包
- Pybrain 使用
- pybrain学习教程(一):创建神经网络
- pybrain学习教程(三):训练神经网络
- Pybrain学习笔记-4 基于前馈神经网络的分类器
- python学习:机器学习下的pybrain和多线程编程
- PyBrain使用简介
- 如何安装pybrain?
- Python安装pybrain
- 安装pybrain方法
- pybrain学习教程(二):创建数据集
- 安装pybrain之后import pybrain出现cannot import name 'expm2'
- PyBrain-Python的人工神经网络
- pybrain的安装及使用
- 第二章 神经网络pybrain介绍
- 输入输出流的总结以及toyCode
- Spring 拦截器的使用
- Eclipse安装SVN插件的两种方式
- NOI2014 购票
- Hdu- 1232 畅通工程(并查集)
- Pybrain学习笔记-2 pybrain快速入门
- 地址的三级联动 选择后显示地区并返回服务器Id号(一)
- 关于R
- P2871 [USACO07DEC]手链Charm Bracelet
- 区块链(一)--Bitcoin、Ethereum、Hyperledger
- 带参数的宏定义(宏函数)
- 模拟实现进程调度——采用高优先数优先和先来服务算法
- Echarts图表中的tooltip无法显示
- (ssl2301)混合背包