我正在尝试开始使用神经网络来解决分类问题。我在处理 JVM(在 Scala 中)时选择使用 Encog 3.x 库。请让我知道这个问题是否可以由另一个图书馆更好地处理。
我一直在使用弹性反向传播。我有 1 个隐藏层,例如 3 个输出神经元,每个用于 3 个目标类别。所以理想的输出是 1/0/0、0/1/0 或 0/0/1。现在,问题在于训练试图最小化错误,例如,如果理想输出为 1/0/0,则将 0.6/0.2/0.2 变为 0.8/0.1/0.1。但是由于我选择了最高值作为预测类别,这对我来说并不重要,我希望训练能够花费更多的精力来实际减少错误预测的数量。
所以我知道我应该使用softmax函数作为输出(虽然我不清楚这是否成为第4层或者我应该用softmax替换第3层的激活函数),然后让训练减少交叉熵。现在我认为这个交叉熵需要在整个网络或整个输出层上进行计算,但是ErrorFunction
可以自定义计算一个神经元一个神经元的误差(读取理想输入和实际输入的数组,写入错误值数组)。那么如何使用 Encog(或者我应该选择哪个其他基于 JVM 的库)进行交叉熵最小化呢?