C# 在Encog中构造大型神经网络时出现OverflowException或OutOfMemoryException

C# 在Encog中构造大型神经网络时出现OverflowException或OutOfMemoryException,c#,neural-network,encog,C#,Neural Network,Encog,我试图构建一个简单的前馈神经网络,用于C#Encog中的RGB图像识别。例如,如果我运行以下代码: BasicNetwork network=new BasicNetwork(); AddLayer(新BasicLayer(null,true,60000)); AddLayer(新的BasicLayer(新的ActivationSigmoid(),true,60000)); AddLayer(新的BasicLayer(新的ActivationSigmoid(),false,4)); networ

我试图构建一个简单的前馈神经网络,用于C#Encog中的RGB图像识别。例如,如果我运行以下代码:

BasicNetwork network=new BasicNetwork();
AddLayer(新BasicLayer(null,true,60000));
AddLayer(新的BasicLayer(新的ActivationSigmoid(),true,60000));
AddLayer(新的BasicLayer(新的ActivationSigmoid(),false,4));
network.Structure.FinalizeStructure();

我从encog-core-cs.dll中得到一个System.OverflowException,如果我将两个位置的神经元计数加倍到120000,我会得到一个System.OutOfMemoryException。这是因为Encog的网络太大,还是我做错了什么?但是如果这个太大了,我如何使用一个合理大小的图像进行训练,比如说200×200?我注定要拍小照片吗?

是的,你可以在更好的机器上计算,但你也做错了。不要把每一个像素都作为输入,这样会导致这个庞大的架构。对完整原始数据进行操作的方法通常会获得非常小的缩小图像(有些图像类型在保留所有信息的同时无法缩小到10x10)


相反,进行一些预处理,例如分离图片的重要部分,消除噪音,更重要的是:提取特征,将其输入NN而不是原始数据。不要问我使用什么功能,因为这取决于您的问题。图像识别有数百种可能。当NN在适当的功能上运行时,您将看到,不仅您将拥有更小的层,而且精确度将提高,因为网络将永远不会看到不相关的数据,而是从一开始就开始对一些元数据进行操作。

以64位运行,这样您就可以寻址更多内存。@BrandonSeydel我有一个32位操作系统,所以我想这不是一个选项。@BrandonSeydel,但我刚刚让我的朋友在64位上试用过它(也符合x64),但没有用。