【问题标题】:PyBrain: Why PyBrain NN does not learn to classify XOR?PyBrain:为什么 PyBrain NN 不学习分类异或?
【发布时间】:2015-02-24 02:45:32
【问题描述】:

我有以下代码:

from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure import TanhLayer 

ds = SupervisedDataSet(2, 1)

ds.addSample((0, 0), (0,))
ds.addSample((0, 1), (1,))
ds.addSample((1, 0), (1,))
ds.addSample((1, 1), (0,))

net = buildNetwork(2, 3, 1, bias=True, hiddenclass=TanhLayer)
trainer = BackpropTrainer(net, ds)

trainer.trainUntilConvergence()

print '0,0 : {0}'.format(net.activate([0, 0]))
print '0,1 : {0}'.format(net.activate([0, 1]))
print '1,0 : {0}'.format(net.activate([1, 0]))
print '1,1 : {0}'.format(net.activate([1, 1]))

我得到的输出总是收敛到与 XOR 不同的东西。我得到的输出示例:

0,0 : [ 1.33865922]
0,1 : [ 0.78127428]
1,0 : [ 0.8318278]
1,1 : [ 0.48067]

【问题讨论】:

    标签: machine-learning neural-network classification pybrain


    【解决方案1】:

    成功解决了。与您共享解决方案,以便您也可以使用它:

    我没有使用trainer.trainUntilCovergence(),而是调用了trainer.train() K 次(我使用了K=1000),并且成功了

    我的代码的变化:

    #trainer.trainUntilConvergence()
    for i in xrange(1000):
        trainer.train()
    

    输出的变化:

    0,0 : [ 0.00347109]
    0,1 : [ 0.99712772]
    1,0 : [ 0.99725655]
    1,1 : [ 0.00121727]
    

    请注意,当我使用的迭代次数不足(例如 100 次)时,我得到了错误的输出

    添加@dnth 注释的重要说明:

    trainUntilConvergence() 不起作用的原因是因为此方法会将您的数据分为 75% 的训练和 25% 的验证。由于 XOR 问题只有 4 个样本数据,因此已取出 1 个数据作为验证数据,仅对剩余的 3 个数据进行训练。因此,网络找到的解决方案很差,因为所有异或情况下的训练数据都不完整

    (验证 == 测试集)

    【讨论】:

    • trainUntilConvergence() 不起作用的原因是因为此方法会将您的数据分为 75% 的训练和 25% 的验证。由于 XOR 问题只有 4 个样本数据,因此已取出 1 个数据作为验证数据,仅对剩余的 3 个数据进行训练。因此,网络找到的解决方案很差,因为所有异或情况下的训练数据都不完整
    • 我不知道这个。 “验证”是什么意思?它是否检查它是否训练有素(比如当你有训练集和测试集时)?或者“验证”是训练神经网络时采取的另一个步骤?
    • 是的,在这种情况下,验证是测试集..在训练期间被隔离出来,仅用于在训练期间测试网络..
    猜你喜欢
    • 2017-01-13
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2016-08-10
    • 2016-06-18
    • 1970-01-01
    相关资源
    最近更新 更多