gpt4 book ai didi

python - 使用 PyBrain 进行神经网络训练不会收敛

转载 作者:IT老高 更新时间:2023-10-28 21:57:40 28 4
gpt4 key购买 nike

我有以下代码,来自 PyBrain 教程:

from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure.modules 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)

for inp, tar in ds:
print [net.activate(inp), tar]

errors = trainer.trainUntilConvergence()

for inp, tar in ds:
print [net.activate(inp), tar]

但是,结果是一个没有经过良好训练的神经网络。在查看错误输出时,网络得到了正确的训练,但是它使用 'continueEpochs' 参数来训练更多,并且网络再次表现更差。所以网络正在收敛,但没有办法得到最好的训练网络。 PyBrain 的文档暗示返回的是训练得最好的网络,但是它返回了一个错误元组。

当将 continueEpochs 设置为 0 时出现错误(ValueError: max() arg is an empty sequence)所以 continueEpochs 必须大于 0。

是否真的维护了 PyBrain,因为文档和代码似乎存在很大差异。

最佳答案

经过一番挖掘,我发现 PyBrain 教程中的示例完全不合适。

当我们查看源代码中的方法签名时,我们发现:

def trainUntilConvergence(self, dataset=None, maxEpochs=None, verbose=None, continueEpochs=10, validationProportion=0.25):

这意味着 25% 的训练集用于验证。尽管在数据上训练网络时这是一种非常有效的方法,但当您拥有完整的可能性范围时,您不会这样做,即 4 行 XOR 2-in-1-out 解决方案集。当一个人想要训练一个 XOR 集并且您删除其中一个行进行验证时,这会立即导致您得到一个非常稀疏的训练集,其中一个可能的组合被省略,从而自动导致那些权重没有被训练。

通常,当您省略 25% 的数据进行验证时,您会假设这 25% 的数据或多或少覆盖了网络已经遇到的“大部分”解决方案空间。在这种情况下,这是不正确的,它覆盖了 25% 的解决方案空间,因为您将其移除以进行验证,所以网络完全不知道它。

因此,训练器正确地训练了网络,但忽略了 25% 的 XOR 问题,这会导致网络训练不佳。

PyBrain 网站上的另一个示例作为快速入门会非常方便,因为这个示例在这种特定的 XOR 情况下是完全错误的。你可能想知道他们是否自己尝试过这个例子,因为它只是随机输出训练有素的网络。

关于python - 使用 PyBrain 进行神经网络训练不会收敛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12050460/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com