【问题标题】:Encog - How to load training data for Neural NetworkEncog - 如何为神经网络加载训练数据
【发布时间】:2015-10-03 18:11:16
【问题描述】:

我在实际中看到的NeuralDataSet 对象除了XOR 之外什么都不是,它只是两个小数据数组...我无法从MLDataSet 的文档中找出任何东西。

似乎所有内容都必须立即加载。但是,我想遍历训练数据,直到达到 EOF,然后将其计为 1 个 epoch。但是,我所看到的所有数据都必须从一开始就加载到 1 个 2D 数组中。我该如何解决这个问题?

I've read this question, and the answers didn't really help me。除此之外,我还没有在这里找到类似的问题。

【问题讨论】:

  • 出于好奇:为什么要流式传输数据,是内存/容量问题吗?
  • @ElmarWeber 因为数据相当大,更重要的是,我已经用另一个神经网络实现了。该实现一次反向传播一个输入,我只是循环遍历整个输入文件并为扫描的每个项目调用 mlp.backprop(nextInput)。

标签: java machine-learning artificial-intelligence neural-network encog


【解决方案1】:

这是可能的,您可以使用支持流操作的数据集的现有实现,也可以在您拥有的任何源之上实现您自己的实现。查看the BasicMLDataSet interfaceSQLNeuralDataSet 代码作为示例。如果您有特定格式,则必须实现编解码器。对于 CSV 已经有一个实现,不过我还没有检查它是否基于内存。

请记住,在执行此操作时,您的数据将针对每个 epoch 进行完全流式传输,并且根据我的经验,这是比网络的实际计算高得多的瓶颈。

【讨论】:

  • 基本上,我用来训练网络的数据来自布朗语料库。它不像带有简单 XOR 的示例,我可以对其进行硬编码。目前,我有 Brown Corpus 文件,其中每个单词和标签都用空格分隔。我目前使用的网络不是将整个语料库加载到内存中,而是逐句加载并一次训练(反向传播)一个单词。那有意义吗?我只是尝试使用另一个网络,因为我认为我当前使用的网络中可能存在错误。
  • 不确定我是否正确,但是您描述它的方式意味着 SQLNeuralDataSet 的实现方式将起作用,对吗?您对每个单词的输入和输出值进行编码,运行反向传播,获取下一个,等等。如果您真的想逐行进行而不是像默认实现那样批量工作,只需将批量大小设置为 1。最后,您有两段代码:一个输入和输出项的语料库数据到 MLData,以及逐行提供此内容的代码。
  • 好的,我使用的是文本文件而不是 SQL,这让我什至没有考虑 SQLNeuralDataSet,谢谢,我会研究一下!
  • 还有一个 CSVNeuralDataSet 遵循相同的模式,但我没有检查它是实现逐行模式还是只是将整个文件加载到内存中。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 2011-05-11
  • 2010-11-20
  • 2019-09-15
相关资源
最近更新 更多