【发布时间】:2023-03-24 23:05:02
【问题描述】:
我看到的每个 Encog 神经网络示例都涉及 XOR 或一些非常简单的东西。我有大约 10,000 个句子,句子中的每个单词都有某种类型的标签。输入层需要2个输入,前一个词和当前词。如果没有前一个字,则根本不激活第一个输入。我需要像这样遍历每个句子。每个单词都取决于前一个单词,所以我不能只拥有一个看起来类似于 XOR 示例的数组。此外,我真的不想将 10,000 多个句子中的所有单词加载到一个数组中,我宁愿一次扫描一个句子,一旦达到 EOF,就从头开始。
我该怎么做呢?我对 Encog 不太满意,因为我见过的所有示例要么是异或,要么极其复杂。
有 2 个输入...每个输入由 30 个神经元组成。单词是某个标签的机会被用作输入。因此,大多数神经元得到 0,其他神经元得到概率输入,例如 0.5、0.3 和 0.2。当我说“未激活”时,我的意思是所有神经元都设置为 0。输出层代表所有可能的标签,因此,它是 30。输出神经元中数字最高的标签就是选择。
我不知道如何在我看过的 Encog 的“演示”中浏览所有 10,000 个句子并查找每个句子中的每个单词(用于输入并激活该输入)。)
似乎网络是用一个包含所有训练数据的数组进行训练的,并且一直循环直到网络被训练。我想用许多不同的数组(每个句子一个数组)来训练网络,然后再看一遍。
这种格式显然不适用于我正在做的事情:
do {
train.iteration();
System.out.println(
"Epoch #" + epoch + " Error:" + train.getError());
epoch++;
} while(train.getError() > 0.01);
【问题讨论】:
-
什么神经网络?前馈?如果是,请改用 Elman 网络,因为它在其隐藏层中自然有过去的上下文,您正试图像在时延网络中那样人为地将其塞入输入中。请注意,尽管 Encog 仍然没有适当的 BPTT afaik。
标签: java machine-learning artificial-intelligence neural-network encog