2017-07-16 120 views
0

我已经构建了一个实验神经网络 - 这个想法是它可以查看JPEG图像并识别图像的哪些部分是音乐符号。神经网络和图像分类

为了训练网络,我使用了切割成100 x 100个盒子的页面的各种图像,它们的值可以是1.0(即包含符号)或0.0(不包含符号)。

然而,在训练网络时,似乎已经确定它 - 或多或少 - 每次传递0.5的结果(给出0.25的平方误差)。 sigmoid(后勤)功能用于激活。网络有10,000个输入神经元(对于100×100图像的每个像素),2000个隐藏神经元(每个输入连接到'行'和'列'隐藏神经元)。

有一个输出神经元。

用两个输出神经元会得到更好的结果吗? (即一个激活'是音乐',一个激活'不是音乐')。

(你可以看到C++源出于此位置:https://github.com/mcmenaminadrian/musonet - 尽管在任何给定的时间是什么公共回购可能不是我使用的机器上到底是什么。)

+0

aargh - 可能只是代码中缺少一个负号的问题 - 意味着对隐藏层的纠正是通过对输出层进行错误纠正而发生的。现在就检查一下。 – adrianmcmenamin

+0

我对这个话题根本不了解,但我会选择一个输出神经元。如果它的输出低于某个阈值,则它包含'音乐',如果它高于另一个阈值,则不是'音乐'。 – Professor901

回答

0

FWIW - 实际问题是因为在评论中描述的代码中的符号错误 - 所以这两个层次正在相互争斗,并且,正如你所期望的那样,正在向中间聚合。

但是......我在20世纪90年代的一本书中引用了我的代码 - 引用广泛的“C++实用神经网络食谱”。这本书并没有什么不对(尽管C++反映了时代的编码风格,并没有STL类的使用等),但它也来自神经网络不像以前那样被理解/设计的时代今天,所以基本的设计是相当有缺陷的。

我现在正在考虑如何最好地实现多层卷积网络 - 而不是本书中讨论的东西(事实上,它忽视了许多分层网络的想法,而是依赖于单个隐藏层NN的事实一般的近似器)。

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