繁体   English   中英

Encog神经网络训练Java太慢

[英]Encog neural network training java too slow

我正在训练一个神经网络来对图像进行分类,并且完成一次迭代所需的时间太长了……大约五分钟,但仍然没有完成。 我正在使用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);

任何答复将不胜感激。 谢谢。

您的代码看起来不错,但是根据您的数据,训练可能会变得任意长。 从网络的规模可以推断出,您正在使用图像-现在,如果您有很多图像,那么即使最有效的实现也将永远花费。 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次更新。

至少有三种可能的方式:

  • 尝试使用FANN库,这是效率最高的库之一
  • 使用PCA来减小图像的尺寸(因此-减小网络的大小)
  • 您确定需要2500个隐藏节点吗? 很多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM