Reputation: 687
I am training a neural network to classify images and it takes too long to finish one iteration... about five minutes and it is still not done. I am using Encog 3.1. Is there something wrong with my code?
BasicNetwork network = new BasicNetwork();
network.addLayer(new BasicLayer(null,true,5625));
network.addLayer(new BasicLayer(new ActivationSigmoid(),true,(intIdealCount+5625)/2));
network.addLayer(new BasicLayer(new ActivationSigmoid(),true,intIdealCount));
network.getStructure().finalizeStructure();
here is my training codes:
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.01);
Any response will be appreciated. Thank you.
Upvotes: 2
Views: 1584
Reputation: 66805
Your code seems fine, but training can get arbitrary long depending on your data. From the size of your network one can deduce, that you are working with images - now if you have lots of them - even the most efficient implementation will take forever. Encog is quite good piece of code - it by default works on all avaliable cores, but FANN seems to be the fastest library for ANN for now.
You have ~5000 input neurons, assuming that you have ~10 output neurons, you have ~2500 hidden ones. So your network has (5000+1)*2500 + (2500+1)*10 weights (about 12,500,000). Now, assuming that you have N images in your training set - one epoch requires computation (and update) of 12,500,000 * N values. So even if you have just ~200 images it is 2,500,000,000 updates to compute.
There are at least three possible ways:
Upvotes: 4