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