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,这表明我们的测试数据与训练的网络并不完全匹配。

