我正在尝试在C#中的Encog中构建一个简单的前馈神经网络用于RGB图像识别。例如,如果我运行以下代码:
BasicNetwork network = new BasicNetwork();
network.AddLayer(new BasicLayer(null, true, 60000));
network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, 60000));
network.AddLayer(new BasicLayer(new ActivationSigmoid(), false, 4));
network.Structure.FinalizeStructure();
我从encog-core-cs.dll得到一个 System.OverflowException ,如果我将这两个地方的神经元计数加倍到120 000,我得到一个 System.OutOfMemoryException 。这对于Encog来说是一个太大的网络,还是我做错了什么?但是如果这个太大了,我怎么能用一个合理大小的图像进行训练,比如200×200?我注定要小照片吗?
答案 0 :(得分:1)
是的,你可以在更好的机器上计算出来,但你也做错了。不要将每个像素用作输入,从而产生这种巨大的架构。对完整原始数据进行操作的方法通常会采用非常小的缩小图像(并且在保留所有信息的同时,有些图像类型无法缩小到10x10)。
相反,请执行一些预处理,例如隔离图片的重要部分,消除噪音,更重要的是:提取功能 ,您提供给NN而不是原始数据。不要问我使用什么功能,因为它取决于您的问题。图像识别有数百种可能性。当NN在适当的功能上运行时,你会发现不仅你有更小的层,而且准确性会提高,因为网络永远不会看到不相关的数据,但从一开始就开始对某些元数据进行操作。