使用什么类型的神经网络?

What type of neural network to use?

我在 Arduino 上使用这个 XOR example 来训练一个 2 输入 1 输出数据集。我拥有的数据集包含大约 30,000 个值。我使用了 4 个值而不是 XOR table,并且在测试时得到了很好的结果。

我想用更多数据训练它。由于 RAM 限制,我无法在 Arduino 上执行此操作。我用 C 语言重写了代码,并在我的笔记本电脑上对其进行了训练。我已经给出了 20,000 个值作为训练数据集,训练花了大约 2 天时间,结果非常糟糕。我已经将隐藏神经元更改为 4,但结果仍然很糟糕。我的意思是我得到的最终误差大约是 12。他们在给定的 XOR 示例中计算误差的方法是对所有误差求和,所以当我给出 20,000 个输入时,总和就足够大了。

我有更好的方法吗?我应该增加层数还是隐藏神经元?适合具有 30,000 个值的数据集的最佳方法是什么?

编辑:

我在 Github 上分享了代码:Repo

此存储库包含数据集和代码。

在神经网络方面没有 'best way'。
我建议你多读一些书,然后你可以尝试适合你的方法。
(个人建议http://neuralnetworksanddeeplearning.com/

没有 code/dataset 真的很难提出任何建议。

PS:签出新币https://en.wikipedia.org/wiki/Stochastic_gradient_descent

您发布这样的问题意味着您对神经网络的了解不够(或者您在该领域没有足够的经验)。这不是批评,这很常见,因为这是一个非常复杂的领域。

您问题的解决方案在很大程度上取决于您的问题和数据集。

说到 "layers" 通常是指一种称为多层感知器 (MLP) 的特定人工神经网络 (ANN) 架构,因此这就是我将尝试解释的架构。

通常增加隐藏层的数量不会给你更好的表现,只会减慢训练速度。有时使用感知器的两个隐藏层(所以三层,一个输出层和两个隐藏层,因为输入层不是由感知器构成的)可以帮助解决特别复杂的分类问题,但我从未见过好的 3 层 ANN。

然后,通常,当您的网络行为不佳时,您必须更改 1) 数据集(因为大多数时候是糟糕的数据集设计导致行为不佳)或 2) 网络拓扑(即使用除了当时的 MLP 之外的另一种 ANN 架构。

对问题的理解是必不可少的,应该通过输入 "passed" 对 ANN 进行理解。例如,如果你正在制作指纹检测器,你知道图像可以旋转,所以如果你应用使图像对旋转不变的变换(例如你将图像坐标转换为极坐标表示)你将(通常) 获得更好的性能。

记住,最重要的一步是数据集的选择。你必须避免数据太少,但太多的数据也不是一个好的选择。这是一个称为 overfitting 的问题。网络将训练只识别您传递给它的数据,而无法找到您传递的 "similar" 数据。此外,数据集必须是平衡的:如果你想训练一个网络来识别所有的狗,然后只给它传递比格犬的图像,它将无法识别杜宾犬。

这些都是通用的建议。并注意我使用的 "usually" 副词。

现在,对于您的具体问题,主要有两个问题。

第一个与Error变量有关。你说这个值很高,在 12 左右。那么,12 是多少?这只是一个数字。通常你应该计算 Mean squared error 到 "estimate" 的性能。另一方面,您正在计算的是所有平方误差的总和。您应该将该值除以测试用例的数量 (Error /= PatternCount;),并在添加平方误差时丢弃 0.5。然后你可以增加一点成功常量让它在之前停止(也许 0.001 很好,但你必须调整它)。

还有……你的操作方式不对。通常你应该把你的数据集分成两部分:随机选择的训练数据(通常大约 80% 的点)和测试数据(通常大约 20%)。你用训练数据训练 ann,然后当你拥有它时,你必须通过它传递测试数据并检测性能(所以你必须将从未进入训练过程的数据传递给它)。这样你将测试ANN的泛化能力,而不是记住你已经通过的点。

最后,如果你真的想让神经网络工作,你将不得不用你拥有的数据进行大量试验。最好是你有一台高性能的 PC 而不是一台小型的 arduino,并重新使用其他人的工作(获取一些库)。我在大学工作时发现的最佳方法是使用专门用于数值计算的工具(我使用 matlab,因为我们有许可证,但你可以使用 Octave - 开源 - 带有神经网络扩展)。通过这种方式,您可以轻松修改拓扑、数据集组成和学习参数。当你有一些工作时,你可以提取参数并将它们嵌入到你想要的东西中(在 C/C++/Java/python/whatever 中进行临时实现)。

此致

PS 有趣的是,我开始将其作为评论,然后很快 运行 退出 space...