神经网络和图像分类

时间:2017-07-16 13:04:34

标签: c++ image-processing neural-network

我建立了一个实验神经网络 - 这个想法是它可以查看JPEG图像并识别图像的哪些部分是乐谱。

为了训练网络,我使用了切成100 x 100个框的各种图像,这些图像的值可以是1.0(即包含符号)或0.0(不包含符号)。

在训练网络时,它似乎已经固定了它 - 或多或少 - 每次都提供0.5的结果(给出0.25的平方误差)。 sigmoid(logistic)函数用于激活。

网络有10,000个输入神经元(对于100 x 100图像的每个像素),2000个隐藏神经元(每个输入都连接到'行'和'列'隐藏神经元)。

有一个输出神经元。

两个输出神经元能否获得更好的结果? (即一个激活'是音乐'而一个激活'不是音乐'的人。)

(你可以在这里看到C ++的来源:https://github.com/mcmenaminadrian/musonet - 虽然在任何时候公共回购中的内容可能与我在机器上使用的不完全相同。)

1 个答案:

答案 0 :(得分:0)

FWIW - 实际问题是由于评论中描述的代码中的符号错误 - 所以这两个层正在相互争斗,正如您所料,会向中间汇聚。

但是......我的代码基于20世纪90年代的一本书 - 被引用频繁的C ++实践神经网络食谱"。这本书没有任何问题(尽管C ++反映了时间的编码风格,并且没有使用STL类等等),但它也来自一个神经网络不太好的时代。理解/设计为今天,因此基本设计存在很大缺陷。

我现在正在考虑如何最好地实现多层次卷积网络 - 根本没有在书中讨论的内容(实际上它驳斥了许多分层网络依赖于单个隐藏层NN这一事实的想法)是一般的近似值。)

我用单个隐藏层NN获得了一些有趣的结果,但它对图像处理并不是那么有用。