我已经建立了一个实验性的神经网络-它的想法是,它可以查看JPEG图像,并识别图像的哪些部分是音乐符号。
为了训练网络,我使用了被切成100 x 100个方框的页面的各种图像,它们的值可以是1.0 (即包含符号)或0.0 (不包含符号)。
然而,在训练网络时,它似乎已经修复了自己,它或多或少地每次都会产生0.5的结果(给出0.25的平方误差)。sigmoid (逻辑)函数用于激活。
该网络有10,000个输入神经元(对于100 x 100图像的每个像素),2000个隐藏神经元(每个输入都连接到一个‘行’和一个‘列’隐藏神经元)。
有一个输出神经元。
使用两个输出神经元会得到更好的结果吗?(即激活“是音乐”的和激活“不是音乐”的)。
(您可以在此处查看C++源代码:https://github.com/mcmenaminadrian/musonet -尽管在任何给定时间,公共代码库中的内容可能与我在机器上使用的内容并不完全相同。)
发布于 2017-07-25 20:49:28
FWIW -实际的问题是因为注释中描述的代码中的符号错误-所以两层相互争斗,正如你可能预料的那样,会聚在中间。
但是..。我的代码基于20世纪90年代的一本书-经常被引用的“C++中的实用神经网络处方”。这本书本身没有错(尽管C++反映了那个时代的编码风格,没有使用STL类等等),但它也来自一个神经网络没有像今天这样被理解/设计的时代,所以基本的设计是相当有缺陷的。
我现在正在思考如何最好地实现多层卷积网络-这不是书中讨论的东西(实际上,它否定了许多分层网络依赖于单个隐藏层NN是一般近似器的事实)。
我用单个隐藏层神经网络得到了一些有趣的结果,但它对图像处理并不是那么有用。
https://stackoverflow.com/questions/45128918
复制相似问题