- PyBrain 教程
- PyBrain - 主页
- PyBrain - 概述
- PyBrain - 环境设置
- PyBrain - PyBrain 网络简介
- PyBrain - 使用网络
- PyBrain - 使用数据集
- PyBrain - 数据集类型
- PyBrain - 导入数据集的数据
- PyBrain - 网络训练数据集
- PyBrain - 测试网络
- 使用前馈网络
- PyBrain - 使用循环网络
- 使用优化算法训练网络
- PyBrain - 层
- PyBrain - 连接
- PyBrain - 强化学习模块
- PyBrain - API 和工具
- PyBrain - 示例
- PyBrain 有用资源
- PyBrain - 快速指南
- PyBrain - 有用的资源
- PyBrain - 讨论
PyBrain - 测试网络
在本章中,我们将看到一些示例,其中我们将训练数据并测试训练数据上的错误。
我们将利用培训师 -
反向传播训练器
BackpropTrainer 是一个训练器,它根据监督或 ClassificationDataSet 数据集(可能是顺序的)通过反向传播误差(随时间)来训练模块的参数。
训练直至收敛
它用于在数据集上训练模块直到收敛。
当我们创建一个神经网络时,它将根据给定的训练数据进行训练。现在网络是否训练正确将取决于在该网络上测试的测试数据的预测。
让我们一步步看一个工作示例,它将构建一个神经网络并预测训练误差、测试误差和验证误差。
测试我们的网络
以下是我们测试网络时将遵循的步骤 -
- 导入所需的 PyBrain 和其他包
- 创建分类数据集
- 将数据集 25% 作为测试数据,75% 作为训练数据
- 将测试数据和训练数据转换回 ClassificationDataSet
- 创建神经网络
- 训练网络
- 可视化错误和验证数据
- 测试数据误差百分比
步骤1
导入所需的 PyBrain 和其他包。
我们需要的包被导入,如下所示 -
from sklearn import datasets import matplotlib.pyplot as plt from pybrain.datasets import ClassificationDataSet from pybrain.utilities import percentError from pybrain.tools.shortcuts import buildNetwork from pybrain.supervised.trainers import BackpropTrainer from pybrain.structure.modules import SoftmaxLayer from numpy import ravel
第2步
下一步是创建 ClassificationDataSet。
对于数据集,我们将使用 sklearn 数据集中的数据集,如下所示 -
请参阅以下链接中 sklearn 的 load_digits 数据集 -
digits = datasets.load_digits() X, y = digits.data, digits.target ds = ClassificationDataSet(64, 1, nb_classes=10) # we are having inputs are 64 dim array and since the digits are from 0-9 the classes considered is 10. for i in range(len(X)): ds.addSample(ravel(X[i]), y[i]) # adding sample to datasets
步骤3
将数据集 25% 作为测试数据,75% 作为训练数据 -
test_data_temp, training_data_temp = ds.splitWithProportion(0.25)
因此,在这里,我们在数据集上使用了一种名为 splitWithProportion() 的方法,其值为 0.25,它将把数据集拆分为 25% 作为测试数据,75% 作为训练数据。
步骤4
将测试数据和训练数据转换回 ClassificationDataSet。
test_data = ClassificationDataSet(64, 1, nb_classes=10) for n in range(0, test_data_temp.getLength()): test_data.addSample( test_data_temp.getSample(n)[0], test_data_temp.getSample(n)[1] ) training_data = ClassificationDataSet(64, 1, nb_classes=10) for n in range(0, training_data_temp.getLength()): training_data.addSample( training_data_temp.getSample(n)[0], training_data_temp.getSample(n)[1] ) test_data._convertToOneOfMany() training_data._convertToOneOfMany()
在数据集上使用 splitWithProportion() 方法会将数据集转换为监督数据集,因此我们将数据集转换回分类数据集,如上一步所示。
步骤5
下一步是创建神经网络。
net = buildNetwork(training_data.indim, 64, training_data.outdim, outclass=SoftmaxLayer)
我们正在创建一个网络,其中的输入和输出均来自训练数据。
步骤6
训练网络
现在重要的部分是在数据集上训练网络,如下所示 -
trainer = BackpropTrainer(net, dataset=training_data, momentum=0.1,learningrate=0.01,verbose=True,weightdecay=0.01)
我们正在使用 BackpropTrainer() 方法并使用创建的网络上的数据集。
步骤7
下一步是可视化数据的错误和验证。
trnerr,valerr = trainer.trainUntilConvergence(dataset=training_data,maxEpochs=10) plt.plot(trnerr,'b',valerr,'r') plt.show()
我们将在训练数据上使用一种名为 trainUntilConvergence 的方法,该方法将在 10 个时期内收敛。它将返回我们绘制的训练误差和验证误差,如下所示。蓝线显示训练误差,红线显示验证误差。
执行上述代码期间收到的总错误如下所示 -
Total error: 0.0432857814358 Total error: 0.0222276374185 Total error: 0.0149012052174 Total error: 0.011876985318 Total error: 0.00939854792853 Total error: 0.00782202445183 Total error: 0.00714707652044 Total error: 0.00606068893793 Total error: 0.00544257958975 Total error: 0.00463929281336 Total error: 0.00441275665294 ('train-errors:', '[0.043286 , 0.022228 , 0.014901 , 0.011877 , 0.009399 , 0.007 822 , 0.007147 , 0.006061 , 0.005443 , 0.004639 , 0.004413 ]') ('valid-errors:', '[0.074296 , 0.027332 , 0.016461 , 0.014298 , 0.012129 , 0.009 248 , 0.008922 , 0.007917 , 0.006547 , 0.005883 , 0.006572 , 0.005811 ]')
误差从 0.04 开始,然后每个时期都会下降,这意味着网络正在接受训练并且每个时期都会变得更好。
步骤8
测试数据错误百分比
我们可以使用%Error 方法检查百分比误差,如下所示 -
print('Percent Error on testData:',percentError(trainer.testOnClassData(dataset=test_data), test_data['class']))
测试数据的百分比错误- 3.34075723830735
我们得到的错误百分比为 3.34%,这意味着神经网络的准确度为 97%。
下面是完整的代码 -
from sklearn import datasets import matplotlib.pyplot as plt from pybrain.datasets import ClassificationDataSet from pybrain.utilities import percentError from pybrain.tools.shortcuts import buildNetwork from pybrain.supervised.trainers import BackpropTrainer from pybrain.structure.modules import SoftmaxLayer from numpy import ravel digits = datasets.load_digits() X, y = digits.data, digits.target ds = ClassificationDataSet(64, 1, nb_classes=10) for i in range(len(X)): ds.addSample(ravel(X[i]), y[i]) test_data_temp, training_data_temp = ds.splitWithProportion(0.25) test_data = ClassificationDataSet(64, 1, nb_classes=10) for n in range(0, test_data_temp.getLength()): test_data.addSample( test_data_temp.getSample(n)[0], test_data_temp.getSample(n)[1] ) training_data = ClassificationDataSet(64, 1, nb_classes=10) for n in range(0, training_data_temp.getLength()): training_data.addSample( training_data_temp.getSample(n)[0], training_data_temp.getSample(n)[1] ) test_data._convertToOneOfMany() training_data._convertToOneOfMany() net = buildNetwork(training_data.indim, 64, training_data.outdim, outclass=SoftmaxLayer) trainer = BackpropTrainer( net, dataset=training_data, momentum=0.1, learningrate=0.01,verbose=True,weightdecay=0.01 ) trnerr,valerr = trainer.trainUntilConvergence(dataset=training_data,maxEpochs=10) plt.plot(trnerr,'b',valerr,'r') plt.show() trainer.trainEpochs(10) print('Percent Error on testData:',percentError( trainer.testOnClassData(dataset=test_data), test_data['class'] ))