Encog 神经网络 – 如何构建训练数据?

我所见过的 Encog 神经网络的示例都涉及到 XOR 或非常简单的例子。我有大约 10,000 个句子,每个句子中的每个单词都带有一些类型的标签。输入层需要接受两个输入,前一个单词和当前单词。如果没有前一个单词,那么第一个输入完全不被激活。我需要像这样处理每个句子。每个单词都依赖于前一个单词,所以我不能仅仅使用一个类似于 XOR 例子的数组。此外,我并不想将 10,000 多个句子的所有单词都加载到一个数组中,我更希望一次扫描一个句子,当到达文件末尾时,再从头开始。

我应该如何进行操作?我对 Encog 不是很熟悉,因为我见过的所有示例要么是 XOR,要么非常复杂。

有两个输入…每个输入由 30 个神经元组成。单词属于某个特定标签的概率被用作输入。因此,大多数神经元的输入为 0,其余的神经元则输入概率值如 0.5、0.3 和 0.2。当我说“未被激活”时,我的意思是所有神经元都被设置为 0。输出层代表所有可能的标签,所以有 30 个。输出神经元中数值最高的那个所对应的就是选择的标签。

我不确定如何处理所有 10,000 个句子,并在每个句子中查找每个单词(用于输入并激活该输入),在我在 Encog 的“演示”中看到的那些示例中没有找到方法。

似乎这些网络是通过一个包含所有训练数据的单一数组来训练的,并且会一直循环直到网络被训练。我希望使用许多不同的数组来训练网络(每个句子一个数组),然后再遍历它们。

显然,这种格式不适合我所做的事情:

    do {    train.iteration();    System.out.println(    "Epoch #" + epoch + " Error:" + train.getError());    epoch++;    } while(train.getError() > 0.01);

回答:

所以,我不太确定该如何告诉你,但神经网络的运行方式并非如此。你不能直接使用单词作为输入,也不能简单地“未激活”某个输入。从最基本的层面来说,要在某个问题上运行神经网络,你需要以下内容:

  1. 一个固定长度的输入向量(无论你输入什么,都必须以固定长度的数值形式表示。向量中的每个条目都是一个单一的数字)
  2. 一组标签(每个输入向量必须对应一个单一的、固定长度的输出向量)

一旦你有了这两者,神经网络就会对一个示例进行分类,然后调整自己以尽可能接近标签。

如果你想使用单词和深度学习框架,你应该将你的单词映射到现有的向量表示(我强烈推荐 glove,但 word2vec 也还不错),然后在这个表示上进行学习。


在更深入了解你试图做的事情后,我认为问题在于你实际上在处理 60 个输入,而不是一个。这些输入是两个单词现有预测的连接(在没有第一个单词的情况下,前 30 个条目为 0)。你应该自己处理映射(这应该是非常简单的),然后将其视为用 60 个数字预测 30 个数字的问题。

我有义务告诉你,你所描述的问题将会导致非常糟糕的性能。在处理一个稀疏(大部分为零)的向量和如此小的数据集时,深度学习技术的表现将远不如其他方法。你最好使用 glove + svm 或在现有数据上使用随机森林模型。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注