Witam wszystkich forumowiczów forum 4programmers.
Mój problem jest następujący. Zaprogramowałem sieć neuronową w javie przy pomocy biblioteki Encog. Eclipse nie pokazuje żadnych błędów. Kompilacja poleceniem javac kończy się sukcesem. Jednak gdy uruchamiam program w środowisku Eclipse wyskakuje mi taki błąd:
Building Neural Network!Loading Data Set!Training Neural Network!Training File Exist:false
Error! Training Data File did'nt exist! Shutting down! <----------------------Do tego miejsca jest błąd wynikający z mojego kodu.
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space <---------------------------Tu jest już błąd javy.
at org.encog.neural.networks.training.propagation.Propagation.<init>(Propagation.java:150)
at org.encog.neural.networks.training.propagation.resilient.ResilientPropagation.<init>(ResilientPropagation.java:147)
at org.encog.neural.networks.training.propagation.resilient.ResilientPropagation.<init>(ResilientPropagation.java:123)
at NeuralNetwork.main(NeuralNetwork.java:65)
Oto kod źródłowy:
import java.io.File;
import org.encog.Encog;
import org.encog.engine.network.activation.ActivationTANH;
import org.encog.ml.data.MLData;
import org.encog.ml.data.MLDataPair;
import org.encog.ml.data.MLDataSet;
import org.encog.neural.networks.BasicNetwork;
import org.encog.neural.networks.layers.BasicLayer;
import org.encog.neural.networks.training.propagation.resilient.ResilientPropagation;
import org.encog.persist.EncogDirectoryPersistence;
public class NeuralNetwork {
public static void main(final String args[]) {
File trainingdata = new File("C:\\Users\\Bartuś\\Pulpit\\TrainingData.csv");
System.out.print("Building Neural Network!");
// create a neural network, without using a factory
BasicNetwork network = new BasicNetwork();
network.addLayer(new BasicLayer(new ActivationTANH(),false,10000));
network.addLayer(new BasicLayer(new ActivationTANH(),true,8000));
network.addLayer(new BasicLayer(new ActivationTANH(),true,6000));
network.addLayer(new BasicLayer(new ActivationTANH(),true,4000));
network.addLayer(new BasicLayer(new ActivationTANH(),true,2000));
network.addLayer(new BasicLayer(new ActivationTANH(),true,1000));
network.addLayer(new BasicLayer(new ActivationTANH(),true,800));
network.addLayer(new BasicLayer(new ActivationTANH(),true,600));
network.addLayer(new BasicLayer(new ActivationTANH(),true,400));
network.addLayer(new BasicLayer(new ActivationTANH(),true,200));
network.addLayer(new BasicLayer(new ActivationTANH(),true,100));
network.getStructure().finalizeStructure();
network.reset();
System.out.print("Loading Data Set!");
// Loading Data Set
MLDataSet trainingSet = getDataSet("C:\\Users\\Bartuś\\Pulpit\\TrainingData.csv");
System.out.print("Training Neural Network!");
boolean bool = trainingdata.exists();
if(bool == false){
System.out.println("Training File Exist:" +bool);
System.out.println("Error! Training Data File did'nt exist! Shutting down!");
Encog.getInstance().shutdown();
}
// Training Neural Network
final ResilientPropagation train = new ResilientPropagation(network, trainingSet);
int epoch = 1;
do {
train.iteration();
System.out.println("Epoch #" + epoch + " Error:" + train.getError());
epoch++;
} while(train.getError() > 0.00000000001);
train.finishTraining();
System.out.print("Testing Neural Network!");
// Testing Neural Network
System.out.println("Neural Network Results:");
for(MLDataPair pair: trainingSet ) {
final MLData output = network.compute(pair.getInput());
System.out.println(pair.getInput().getData(0) + "," + pair.getInput().getData(1)
+ ", actual=" + output.getData(0) + ",ideal=" + pair.getIdeal().getData(0));
}
System.out.print("Saving Trained Neural Network! Destroying Neural Network! Shutting down!");
EncogDirectoryPersistence.saveObject(new File("C:\\Users\\Bartuś\\Pulpit\\NN.eg"), network);
Encog.getInstance().shutdown();
}
private static MLDataSet getDataSet(String string) {
return null;
}
}
Ktoś ma pomysł. W załączniku zamieszczam bibliotekę Encog. W miarę możliwości proszę o szybkie odpowiedzi. Z góry dzięki.
PS. UDZIELAM pozwolenia na kopiowanie tego kodu i jego modyfikację we własnym zakresie. Popieram OpenSource ;).