2

我正在训练一个神经网络来对图像进行分类,完成一次迭代需要很长时间......大约五分钟,但仍未完成。我正在使用 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);

任何回应将不胜感激。谢谢你。

4

1 回答 1

4

您的代码看起来不错,但根据您的数据,训练可能会变得任意长。从你的网络规模可以推断,你正在处理图像——现在如果你有很多图像——即使是最有效的实施也将花费很长时间。Encog 是一段相当不错的代码——默认情况下它适用于所有可用的内核,但 FANN 似乎是目前最快的 ANN 库。

你有大约 5000 个输入神经元,假设你有大约 10 个输出神经元,你有大约 2500 个隐藏神经元。所以你的网络有 (5000+1)*2500 + (2500+1)*10 权重(大约 12,500,000)。现在,假设您的训练集中有 N 个图像 - 一个 epoch 需要计算(和更新)12,500,000 * N 个值。因此,即使您只有约 200 张图像,也需要计算 2,500,000,000 次更新。

至少有三种可能的方式:

  • 试试 FANN 库,它是最有效的库之一
  • 使用例如 PCA 降低图像的维度(因此 - 减少网络的大小)
  • 您确定需要 2500 个隐藏节点吗?很多
于 2013-11-10T09:25:08.673 回答