我正在训练一个神经网络对图像进行分类,完成一次迭代需要很长时间......大约五分钟,但仍然没有完成。我正在使用Encog 3.1。我的代码有问题吗?
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();
这是我的训练代码:
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);
任何回复都将不胜感激。谢谢。
答案 0 :(得分:4)
您的代码似乎很好,但根据您的数据,培训可能会变得很长。从您的网络规模可以推断,您正在使用图像 - 现在如果您有很多图像 - 即使是最有效的实施也将永远。 Encog是相当不错的代码 - 它默认适用于所有可用内核,但FANN现在似乎是最快的ANN库。
你有~5000个输入神经元,假设你有~10个输出神经元,你有~2500个隐藏神经元。所以你的网络有(5000 + 1)* 2500 +(2500 + 1)* 10个权重(约12,500,000)。现在,假设您的训练集中有N个图像 - 一个时期需要计算(和更新)12,500,000 * N个值。因此,即使您只有大约200张图像,也需要计算2,500,000,000个更新。
至少有三种可能的方式: