java - 尝试使用 Neuroph 框架训练神经网络时出现 StackOverFlowError

标签 java neural-network stack-overflow

我正在尝试使用 Neuroph 库训练神经网络,但出现此错误:

44 [NeurophLearningThread] INFO org.neuroph.core.learning.LearningRule - Learning Started
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
    at java.lang.reflect.Method.invoke(Method.java:498)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1028)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    at org.neuroph.util.NeurophArrayList.writeObject(NeurophArrayList.java:710)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

问题是,我在另一个项目中使用相同的代码训练神经网络,该项目具有相同的导入 jar 并且工作正常。这是我用来创建和训练神经网络的代码:

public void TrainNeuralNetwork(double[] inputs, double[] outputs){


    DataSet set = new DataSet(inputs.length,outputs.length);
    set.addRow(inputs,outputs);

    System.out.println("Training...");
    MultiLayerPerceptron loadSnakeNN = new MultiLayerPerceptron(TransferFunctionType.LINEAR, inputs.length, 500, outputs.length);

    if( loadSnakeNN.getLearningRule() instanceof MomentumBackpropagation )
        ((MomentumBackpropagation)loadSnakeNN.getLearningRule()).setBatchMode(true);


    MomentumBackpropagation learningRule = (MomentumBackpropagation)loadSnakeNN.getLearningRule();// Set learningRule

    learningRule.setMaxError(0.01);
    loadSnakeNN.learn(set);
    loadSnakeNN.save("SnakeNN.nnet");
    System.out.println("Neural Network Trained!");
}

更新

我发现问题出在哪里了。当我使用超过 90 个输入时,我收到上述错误。所以我的新问题是,如何训练这个具有超过 90 个输入的神经网络?

最佳答案

您可以使用 JVM 参数 -Xss 增加程序可用的堆栈大小。

`java -Xss2048m ...`

意味着你得到一个2048Mb的堆栈。如果您从 IDE 运行此程序,您可以搜索以了解如何为您的特定 IDE 传递 JVM 参数。

我假设您的代码或库中没有错误,否则增加堆栈可能还不够。

关于java - 尝试使用 Neuroph 框架训练神经网络时出现 StackOverFlowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35390429/

相关文章:

artificial-intelligence - 有人可以解释一下人工神经网络吗?

neural-network - 卷积神经网络(CNN)用于音频

f# - 这个序列表达式应该是尾递归的吗?

java - 查找 JPA 的最新条目

tensorflow - 如何在我的代码中使用张量核心而不是 cuda 核心?

c++ - 如何创建会抛出堆栈溢出异常的无限递归?

x86 Windows 上使用 STDCALL ABI 的闭包会导致 LibFFI 3.2.1 出现堆栈溢出异常

java - ExecutorService 在 REST API 中使用

java - 如何使 Spring Joda-Time 格式化程序在非标准语言环境下工作?

java - 嵌套循环不会在长度大于 1 的内部循环中执行查询