PyBrain - 在网络上训练数据集
到目前为止,我们已经了解了如何创建网络和数据集。要一起使用数据集和网络,我们必须在训练器的帮助下完成。
下面是一个工作示例,用于了解如何将数据集添加到创建的网络中,然后使用训练器进行训练和测试。
testnetwork.py
来自 pybrain.tools.shortcuts 导入 buildNetwork 来自 pybrain.structure 导入 TanhLayer 来自 pybrain.datasets 导入 SupervisedDataSet 来自 pybrain.supervised.trainers 导入 BackpropTrainer # 创建一个具有两个输入、三个隐藏和一个输出的网络 nn = buildNetwork(2, 3, 1, bias=True, hiddenclass=TanhLayer) # 创建一个与网络输入和输出大小匹配的数据集: norgate = SupervisedDataSet(2, 1) # 创建一个用于测试的数据集。 nortrain = SupervisedDataSet(2, 1) # 将输入和目标值添加到数据集 # NOR 真值表的值 norgate.addSample((0, 0), (1,)) norgate.addSample((0, 1), (0,)) norgate.addSample((1, 0), (0,)) norgate.addSample((1, 1), (0,)) # 将输入和目标值添加到数据集 # NOR 真值表的值 nortrain.addSample((0, 0), (1,)) nortrain.addSample((0, 1), (0,)) nortrain.addSample((1, 0), (0,)) nortrain.addSample((1, 1), (0,)) # 使用数据集 norgate 训练网络。 trainer = BackpropTrainer(nn, norgate) # 将运行循环 1000 次来训练它。 for epoch in range(1000): trainer.train() trainer.testOnData(dataset=nortrain, verbose = True)
要测试网络和数据集,我们需要 BackpropTrainer。BackpropTrainer 是一个训练器,它根据监督数据集(可能是连续的)通过反向传播错误(随时间)来训练模块的参数。
我们创建了 2 个类数据集 - SupervisedDataSet。我们正在使用 NOR 数据模型,如下所示 −
A | B | A NOR B |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
上述数据模型用于训练网络。
norgate = SupervisedDataSet(2, 1) # 将输入和目标值添加到数据集 # NOR真值表的值 norgate.addSample((0, 0), (1,)) norgate.addSample((0, 1), (0,)) norgate.addSample((1, 0), (0,)) norgate.addSample((1, 1), (0,))
以下是用于测试的数据集 −
# 创建用于测试的数据集。 nortrain = SupervisedDataSet(2, 1) # 将输入和目标值添加到数据集 # NOR 真值表的值 norgate.addSample((0, 0), (1,)) norgate.addSample((0, 1), (0,)) norgate.addSample((1, 0), (0,)) norgate.addSample((1, 1), (0,))
训练器的使用方法如下 −
# 使用数据集 norgate 训练网络。 trainer = BackpropTrainer(nn, norgate) # 将运行循环 1000 次来训练它。 for epoch in range(1000): trainer.train()
要在数据集上进行测试,我们可以使用以下代码 −
trainer.testOnData(dataset=nortrain, verbose = True)
输出
python testnetwork.py
C:\pybrain\pybrain\src>python testnetwork.py Testing on data: ('out: ', '[0.887 ]') ('correct:', '[1 ]') error: 0.00637334 ('out: ', '[0.149 ]') ('correct:', '[0 ]') error: 0.01110338 ('out: ', '[0.102 ]') ('correct:', '[0 ]') error: 0.00522736 ('out: ', '[-0.163]') ('correct:', '[0 ]') error: 0.01328650 ('All errors:', [0.006373344564625953, 0.01110338071737218, 0.005227359234093431 , 0.01328649974219942]) ('Average error:', 0.008997646064572746) ('Max error:', 0.01328649974219942, 'Median error:', 0.01110338071737218)
如果您检查输出,测试数据几乎与我们提供的数据集匹配,因此误差为 0.008。
现在让我们更改测试数据并查看平均误差。我们已将输出更改为如下所示的 −
以下是用于测试的数据集 −
# 创建用于测试的数据集。 nortrain = SupervisedDataSet(2, 1) # 将输入和目标值添加到数据集 # NOR 真值表的值 norgate.addSample((0, 0), (0,)) norgate.addSample((0, 1), (1,)) norgate.addSample((1, 0), (1,)) norgate.addSample((1, 1), (0,))
现在让我们测试一下。
输出
python testnework.py
C:\pybrain\pybrain\src>python testnetwork.py Testing on data: ('out: ', '[0.988 ]') ('correct:', '[0 ]') error: 0.48842978 ('out: ', '[0.027 ]') ('correct:', '[1 ]') error: 0.47382097 ('out: ', '[0.021 ]') ('correct:', '[1 ]') error: 0.47876379 ('out: ', '[-0.04 ]') ('correct:', '[0 ]') error: 0.00079160 ('All errors:', [0.4884297811030845, 0.47382096780393873, 0.47876378995939756, 0 .0007915982149002194]) ('Average error:', 0.3604515342703303) ('Max error:', 0.4884297811030845, 'Median error:', 0.47876378995939756)
我们得到的错误率为 0.36,这表明我们的测试数据与训练的网络并不完全匹配。