我已经尝试使用pybrain,并了解如何生成具有自定义架构的神经网络,并使用反向传播算法对其进行监督数据集的训练。
然而,我对优化算法以及任务、学习代理和环境的概念感到困惑。
例如:我如何使用pybrain的遗传算法来实现一个神经网络,以对XOR数据集进行分类?
(1) pybrain.tools.shortcuts.buildNetwork(2, 3, 1)
(2) pybrain.optimization.GA()
回答:
我终于搞明白了!一旦你知道怎么做,总是很容易的!
本质上,GA的第一个参数是适应度函数(文档中称为评估器),它必须将第二个参数(个体,文档中称为可评估的)作为其唯一参数。
在这个例子中,将训练用于XOR
from pybrain.datasets.classification import ClassificationDataSet# 下面的行可以替换为所选的算法,例如# from pybrain.optimization.hillclimber import HillClimberfrom pybrain.optimization.populationbased.ga import GAfrom pybrain.tools.shortcuts import buildNetwork# 创建XOR数据集d = ClassificationDataSet(2)d.addSample([0., 0.], [0.])d.addSample([0., 1.], [1.])d.addSample([1., 0.], [1.])d.addSample([1., 1.], [0.])d.setField('class', [ [0.],[1.],[1.],[0.]])nn = buildNetwork(2, 3, 1)# d.evaluateModuleMSE将nn作为其第一个且唯一的参数ga = GA(d.evaluateModuleMSE, nn, minimize=True)for i in range(100): nn = ga.learn(0)[0]
上述脚本执行后的测试结果:
In [68]: nn.activate([0,0])Out[68]: array([-0.07944574])In [69]: nn.activate([1,0])Out[69]: array([ 0.97635635])In [70]: nn.activate([0,1])Out[70]: array([ 1.0216745])In [71]: nn.activate([1,1])Out[71]: array([ 0.03604205])