Machine learning PyBrain:为什么PyBrain NN不学习分类XOR?

Machine learning PyBrain:为什么PyBrain NN不学习分类XOR?,machine-learning,neural-network,classification,pybrain,Machine Learning,Neural Network,Classification,Pybrain,我有以下代码: 从pybrain.dataset导入受监控的数据集 从pybrain.supervised.trainers导入BackpropTrainer 从pybrain.tools.shortcuts导入buildNetwork 从pybrain.structure导入TanhLayer ds=受监控的数据集(2,1) ds.addSample((0,0),(0,)) ds.addSample((0,1),(1,)) ds.addSample((1,0),(1,)) ds.addSamp

我有以下代码:

从pybrain.dataset导入受监控的数据集
从pybrain.supervised.trainers导入BackpropTrainer
从pybrain.tools.shortcuts导入buildNetwork
从pybrain.structure导入TanhLayer
ds=受监控的数据集(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)
培训师=背部支撑培训师(净,ds)
trainer.trainUntilConvergence()培训师
打印“0,0:{0}”。格式(net.activate([0,0]))
打印“0,1:{0}”。格式(net.activate([0,1]))
打印“1,0:{0}”。格式(net.activate([1,0]))
打印“1,1:{0}”。格式(net.activate([1,1]))
我得到的输出总是收敛到与XOR不同的地方。我得到的输出示例:

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

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

我没有使用
trainer.trainUntilConvergence()
,而是调用了
trainer.train()
K次(我使用了
K=1000
),结果成功了

我的代码中的更改:

#trainer.trainiuntlconvergence()
对于X范围内的i(1000):
培训师
输出的变化:

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个数据进行训练。因此,网络找到的解决方案很差,因为XOR的所有情况下的训练数据都不完整


(验证==测试集)

trainUntilConvergence()不起作用的原因是,此方法将数据分为75%的培训和25%的验证。由于XOR问题只有4个样本数据,因此已取出1个数据作为验证数据,仅对其余3个数据进行训练。因此,网络发现的解决方案很差,因为XORI不知道所有情况下的训练数据都不完整。“验证”的含义是什么?它是否检查它是否经过良好的培训(例如,当您有培训集和测试集时)?或者“验证”是训练神经网络时采取的另一个步骤?是的,在这种情况下,验证是测试集。。在培训期间隔离,仅用于在培训期间测试网络。。