【问题标题】:Neural network and image classification神经网络和图像分类
【发布时间】:2017-12-21 02:04:50
【问题描述】:

我已经建立了一个实验性神经网络 - 其想法是它可以查看 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 - 尽管在任何给定时间,公共存储库中的内容可能与我在机器上使用的不完全相同。)

【问题讨论】:

  • aargh - 可能只是代码中缺少减号的问题 - 这意味着对隐藏层的更正正在通过对输出层的错误更正进行斗争。现在就检查一下。
  • 我对这个话题了解不多,但我会选择一个输出神经元。如果它的输出低于某个阈值,则包含“音乐”,如果高于另一个阈值,则不是“音乐”。

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


【解决方案1】:

FWIW - 实际问题是由于注释中描述的代码中的符号错误 - 所以这两层相互争斗,并且如您所料,向中间收敛。

但是......我的代码基于 1990 年代的一本书 - 被大量引用的“C++ 中的实用神经网络食谱”。这本书本身并没有错(尽管 C++ 反映了那个时代的编码风格,并且没有使用 STL 类等等),但它也确实来自一个神经网络还没有被很好理解/设计的时代今天,所以基本设计有很大缺陷。

我现在正在考虑如何最好地实现多层卷积网络——这本书根本没有讨论过(事实上,它摒弃了多层网络的想法,而是依赖于单个隐藏层 NN 是一般逼近器)。

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

【讨论】:

    猜你喜欢
    • 2015-06-02
    • 2021-12-25
    • 2012-07-15
    • 2020-11-08
    • 2019-07-17
    • 2011-12-03
    • 2017-10-07
    • 2012-10-08
    • 2017-01-24
    相关资源
    最近更新 更多