pybrain初入门

标准的官方网址:http://pybrain.org/

在python语言中自己实现神经网络的所有代码很复杂,但是有了pybrain就容易的多了,我们只需要专注于算法本身,而忽略算法的繁琐细节

pybrain的介绍

基本流程
1.构造神经网络
2.构造数据集
3.训练神经网络
4.结果可视化
5.验证与分析

pybrain使用入门

参考文献:

下面的基本用法将逐步的完善补充,主要还是根据自己的学习进度进行推进

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

import numpy as np

def ():

"""generate original data of u and y"""

u = np.random.uniform(-1,1,200)

y=[]

former_y_value = 0

for i in np.arange(0,200):

y.append(former_y_value)

next_y_value = (29 / 40) * np.sin(

(16 * u[i] + 8 * former_y_value) / (3 + 4 * (u[i] ** 2) + 4 * (former_y_value ** 2))) 

+ (2 / 10) * u[i] + (2 / 10) * former_y_value

former_y_value = next_y_value

return u,y

#大概分为以下这几步。

# 构造神经网络

# 构造数据集

# 训练神经网络

# 结果可视化

# 验证与分析

#1.构造神经网络

from pybrain.structure import *

# 建立神经网络fnn

fnn = FeedForwardNetwork()

# 设立三层,一层输入层(3个神经元,别名为inLayer),一层隐藏层,一层输出层

inLayer = LinearLayer(2, name='inLayer')

hiddenLayer = SigmoidLayer(10, 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()

#2.构造数据集

#在构造数据集的时候,我用的是SupervisedDataset,即监督数据集。也可以试一试别的。

from pybrain.supervised.trainers import BackpropTrainer

from pybrain.datasets import SupervisedDataSet

# 定义数据集的格式是三维输入,一维输出

DS = SupervisedDataSet(2,1)

# 往数据集内加样本点

# 假设x1,x2,x3是输入的三个维度向量,y是输出向量,并且它们的长度相同

u,y = generate_data()

for i in np.arange(199):

DS.addSample([u[i], y[i]], [y[i+1]])

# 如果要获得里面的输入/输出时,可以用

X = DS['input']

Y = DS['target']

# print(X,Y)

# 如果要把数据集切分成训练集和测试集,可以用下面的语句,训练集:测试集=8:2

# 为了方便之后的调用,可以把输入和输出拎出来

dataTrain, dataTest = DS.splitWithProportion(0.8)

xTrain, yTrain = dataTrain['input'], dataTrain['target']

xTest, yTest = dataTest['input'], dataTest['target']

# print dataTest

# 3.训练神经网络

#俗话说得好,80%的工作往往是20%的部分完成的。嗯哼,其实最重要的代码就是如下这几行啦。

# 不过调用的是别人的东西,也不知道内部的实现比例,就是开个玩笑。

from pybrain.supervised.trainers import BackpropTrainer

# 训练器采用BP算法

# verbose = True即训练时会把Total error打印出来,库里默认训练集和验证集的比例为4:1,可以在括号里更改

trainer = BackpropTrainer(fnn, dataTrain, verbose = False, learningrate=0.01)

# maxEpochs即你需要的最大收敛迭代次数,这里采用的方法是训练至收敛,我一般设为1000

trainer.trainUntilConvergence(maxEpochs=1000)

#4.结果可视化

# 数据可视化就不提了,基本上用的是Pylab来进行数据可视化

#5.验证与分析

import matplotlib.pyplot as plt

predict_resutl=[]

for i in np.arange(len(xTest)):

predict_resutl.append(fnn.activate(xTest[i])[0])

print(predict_resutl)

plt.figure()

plt.plot(np.arange(0,len(xTest)), predict_resutl, 'ro--', label='predict number')

plt.plot(np.arange(0,len(xTest)), yTest, 'ko-', label='true number')

plt.legend()

plt.xlabel("x")

plt.ylabel("y")

plt.show()

for mod in fnn.modules:

print "Module:", mod.name

if mod.paramdim > 0:

print "--parameters:", mod.params

for conn in fnn.connections[mod]:

print "-connection to", conn.outmod.name

if conn.paramdim > 0:

print "- parameters", conn.params

if hasattr(fnn, "recurrentConns"):

print "Recurrent connections"

for conn in fnn.recurrentConns:             

print "-", conn.inmod.name, " to", conn.outmod.name

if conn.paramdim > 0:

print "- parameters", conn.params

机器学习相关的库

  1. scikit_learn 机器学习方面的库
  2. pandas 处理数据文本用
  3. tensorflow 谷歌的深度学习,神经网络库
  4. pybrain 机器学习中神经网络的库
  5. NLTK 自然语言处理
  6. xgboost 预测模型

参考:

原文:大专栏  pybrain初入门

原文地址:https://www.cnblogs.com/chinatrump/p/11597068.html

时间: 2024-10-09 23:14:45

pybrain初入门的相关文章

JSON初入门

JSON:Javascript Object Notation 轻量级的数据交换格式 语法规则:(js对象表示语法的子集) 1.数据在名称/值对中 2.数据由逗号分隔 3.花括号{}保存对象 4.中括号[]保存对象 JSON名称/值 数据书写格式:名称/值 包括字段名称(双引号""),中间:隔开 "firstName":"John"     易理解,相当于js中  firstName="John" JSON值 数字(整数/浮点

mybatis初入门

昨天刚接触mybatis,感觉吧. 对于我这个菜鸟来说,能学什么就是什么,完全没有感觉... 还是说说mybatis吧. mybatis的配置xml,实体类,dao. configuration.xml <?xml version="1.0" encoding="UTF-8" ?>      <!DOCTYPE configuration          PUBLIC "-//mybatis.org//DTD Config 3.0//E

【C#Windows 服务】 《一》初入门

[C#Windows 服务] <一>初入门 一.工具: VS2015+NET Framework4.5. 二.操作: 1.新建windows服务的项目: 2.修改windows服务相关内容: 3.预览windows服务代码结构: 4.windows服务生成与发布: 三.代码: 1.测试代码: using ClassLibrary1; using System; using System.Collections.Generic; using System.ComponentModel; usin

C++初入门

C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互.现在让我们简要地看一下什么是类.对象,方法.即时变量. 对象 - 对象具有状态和行为.例如:一只狗的状态 - 颜色.名称.品种,行为 - 摇动.叫唤.吃.对象是类的实例.最后,如果大家如果在自学遇到困难,想找一个C++的学习环境,可以加入我们的C++学习圈,点击我加入吧,会节约很多时间,减少很多在学习中遇到的难题.类 - 类可以定义为描述对象行为/状态的模板/蓝图. 方法 - 从基本上说,一个方法表示一种行为.一个类可以包含多

SpringBoot 初入门

SpringBoot 初入门 关于介绍什么之类的就不讲了,主要做一下学习记录. 1. 启动方式 IDEA 启动 命令行启动: mvn spring-boot:run 部署到服务器启动: 先进行打包, mvn clean package 移动到项目的 target 目录下,可以看到一个后缀名为 jar 的文件,便是刚刚我们打包的 jar 包, 使用命令行启动: java -jar target/luckymoney-0.0.1-SNAPSHOT.jar 传参方式启动: java -jar -Dsp

坚持自学的第二天,bootstrap初入门

前言 昨天,初步学完了jekyll目录结构与Liquid语法的应用与认识. 日志 今天刚入门,做了一个bootstrap导航栏,但是选中状态不行,找了JS中写好的API,写法与视频中讲的有点不一样,但还没有尝试.这样的一个小错误,也和过支一样,花了几人小时.但是,还是不得要领,我想看原文档的API,并仔细研究,尝试编码验证还是很重要的.以后的几天,我将尝试使用这种模式,但是不同的是,自己仔细看完一遍,自己不看原代码写出来,并写好注释. 感言 今天熬住,没有再下载游戏,疯狂玩游戏的那种状态.遇到代

算法竞赛之排序算法初入门

关于排序的一些知识点 排序是计算机内经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列.我们学习的排序是关于算法之中,对一些特定数据,按照一定的优先级顺序将数据及逆行合理化的排列,比如在最初学习C语言的时候,老师提到的冒泡排序.选择排序,这两个是基本的排序,原理也应该比较简单,其实最早接触到的就是两个数字比较大小,然后按升序或者降序排布的,这个应该是最早接触的排序了. 既然排序这么重要,我们就学习一下一些常见的排序算法吧,由于本人能力有限,

技术人员初入门,该如何突破早期瓶颈?

这是我在知乎上关于问题“只会 if, else, 数据库 CRUD 的 Java 程序员如何提升自己?”给出的答案.其实,这应该就是一个关于早期技术人员怎样突破瓶颈的问题. 作为一个爱好技术的人,我们最常见的技术入门——或者说技术切入点——就是开发有实际可见结果的应用——因为这个够简单,够有成就感.而无论哪个平台.框架上面的应用开发在现阶段都逃不开楼主所说的,某个编程语言的学习(Java.Ruby.PHP 等),某个数据库(Mysql.Sqlite.Mongodb 等),再加上楼主未曾说的该框架

(转)js闭包初入门

先看一段JS代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 function a(){             var num = 0;             function b(){                 num++;                 console.log(num);             }             return b;         }         var add = a();         add();