【问题标题】:Artificial Neural Network with large inputs & outputs具有大量输入和输出的人工神经网络
【发布时间】:2015-05-26 18:02:15
【问题描述】:

我一直在关注 Dave Miller 的 ANN C++ 教程,但在让它按预期运行时遇到了一些问题。

您可以查看我正在使用的代码here。这是一个 XCode 项目,但包含 main.cpp 和数据集文件。

以前,这个程序只会给出 -1 和 1 之间的输出,我推测是由于使用了 tanh 函数。我已经操纵了数据输入,因此我可以输入更大且具有有效输出的数据。我只是简单地将输入值乘以 0.0001,然后将输出值乘以 10000。

我使用的训练数据是包含的 CSV 文件。最后一列是预期的输出,其余的是输入。我是否对这些数据使用了错误的数学函数?

你会说这实际上是在学习吗?整件事让我压力很大,我理解 ANN 背后的理论,但我无法自己从头开始实施。

最近的净平均误差肯定会越来越小,对我来说这就是学习。

如果我没有很好地解释自己,我很抱歉,我对 ANN 很陌生,这整件事让我很困惑。我的大学讲师在实践方面毫无用处,他们只教我们理论。

我一直在研究 eta 和 alpha 值,以及隐藏层的数量。

【问题讨论】:

  • 您必须在问题中包含代码的相关部分,否则您可能会遇到问题被关闭的风险。尽量减少它。
  • 您能否告知哪些部分可能直接相关?我只是包含在整个来源中,因为我不确定哪些内容可能会有所帮助。
  • 你能告诉我们更多关于输入值和输出值的信息吗?范围是多少?首先你应该规范化输入。

标签: c++ artificial-intelligence neural-network


【解决方案1】:

你解释得很好,如果最近的净平均值越来越低,这可能意味着网络实际上正在学习,但这是我关于如何完全确定的建议。

将您的 CSV 文件拆分为 2 个文件,其中一个应占所有数据的 10% 左右,另一个应占所有剩余数据。 您从未经训练的网络开始,通过网络运行 10% 的文件,并为每一行保存实际输出和预期结果之间的差异。 然后你只用你拥有的 90% 的 CSV 文件训练网络,最后你再次通过 NET 运行第一个 10% 文件,并将第一次运行时的差异与最新的差异进行比较。 您应该会发现新结果比第一次更接近预期值,这将是您的网络正在学习的最终证明。 这有意义吗 ?如果不是,请分享一些代码或给我发送您正在运行的练习的链接,我将尝试用代码解释它。

【讨论】:

  • 是的!您在此处解释的内容称为交叉验证。它在所有关于神经函数和参数估计的好书中都有描述。
  • 是的,这很有意义,我现在肯定会分开并尝试一下!谢谢!完成后我会报告。
  • 我没有查看您的数据,但为了以防它以某种方式排序,最好随机抽取 10% 的样本,以便将其用于训练集。
  • 如果我让程序接收整个数据集,然后随机选择数据进行训练,会不会更好?我总是可以手动筛选输出。我猜它可能会经历多次。
  • 我现在已经实现了这个,所以它可以在我的 600 个训练数据中随机循环,任意多次。然而,似乎在大约 1,300 次通过之后,它实际上在预测它时变得更糟,这是正常的吗?我的代码也一直链接在我的帖子第二段:)
猜你喜欢
  • 2021-04-05
  • 2014-10-09
  • 2016-10-21
  • 1970-01-01
  • 2018-02-28
  • 2019-03-18
  • 2020-10-21
  • 2013-03-19
  • 2016-08-03
相关资源
最近更新 更多