【问题标题】:Recognize "figure" pattern in text file识别文本文件中的“图形”模式
【发布时间】:2012-09-21 17:43:36
【问题描述】:

我有一个任意大小的文本文件来模拟我们称为雷达的二维输出。在这个输出中,我希望能够识别已知的模式。我们称之为目标检测。

目标可能看起来像这样,每个 X 是一个点亮的像素,这意味着雷达检测到可能是敌人一部分的东西,每个空白都是一个关闭的像素。

并且雷达数据以引入“干扰”的形式出现,也就是说,该图形的所有像素都不会打开。所以我正在考虑在检测中也包含某种概率。

我从未做过类似的事情,我正在寻求一般性建议。我正在尝试不同的方法,我相信我会以某种方式解决它,但我真的很想有一些关于这种模式匹配的指南、阅读资源或类似的东西,因为我认为它非常有趣但没有以前有机会解决这样的问题。

有什么想法吗?

【问题讨论】:

  • 嗯,也许是神经网络?我从来没有使用过,但我认为它可以被训练来工作。
  • 实现起来可能比必要的复杂得多......
  • 感知器是最简单的神经网络形式。它根据输入输出是或否,因此它只能找到一种或两种模式。所以你可以在一组敌方目标和一组非目标上训练它。当看到一个敌人时,它可能会输出一个 1 和 0,否则它可能会输出。为此,敌人的目标必须具有相同的形状,并且在您进行训练时添加一些噪音。这种方法可以扩展以允许更多输出,从而检测更多模式,这被称为多层感知器。如果您喜欢这种方法,我可以为您提供更多详细信息。
  • 是的,请这样做。不过,我之前没有使用过神经网络,我认为学习曲线相当陡峭?
  • 这看起来像是图像识别/计算机视觉中的一个简单问题。我建议在这些主题上进行一些谷歌搜索。

标签: java pattern-matching neural-network feature-detection


【解决方案1】:

感知器采用一组输入的加权线性组合,并输出 1 或 0,具体取决于结果是正数还是负数。可以说,人工智能是通过权重来实现的,这些权重决定了数据的分割。一侧结果为阳性,另一侧为阴性。这种分割可以被认为是图上的一条线。例如,如果权重给出一条线 y=x,则输入 x = 2, y = 4 为正,输入 x = -1, y = 1 为负。通过向系统提供正负输入集并调整权重直到训练集的输出与所需的输出匹配,来训练权重。

输入的数量由像素数给出,每个像素都有自己的输入和相关的权重,因此权重是一个与图像大小相同的数组。

对于您的示例,您需要一组带有预期噪声的敌人目标图像。这些所需的输出将是正的,因此将所有图像呈现给感知器并检查输出。如果输出不是 1,则调整权重。接下来显示一个非敌人图像并检查输出是否为 0。如果没有调整权重。继续显示正图像并检查输出 1,负图像检查 0,调整权重直到得到输出。

最初,权重被设置为小的随机数。如果实际输出与期望的输出不匹配,它不会开始,通过以下等式调整每个权重:

w(t+1) = w(t) + a(d-y)x

所以新权重是旧权重加上 alpha 乘以所需输出减去实际结果乘以输入,(对于该像素)

Alpha 可以随着训练的进行而改变。一开始它很大,所以收敛很快。随着时间的推移,最好减少数量以减慢收敛速度,使其更加准确。 Alpha,学习率应该是0

所以在 Java 中:

创建一个权重数组并将它们初始化为小的随机数。

创建一组输入图像和相应的所需输出。

选择一个随机图像并将其呈现给系统。 - 将输入乘以权重,将它们相加并找到符号。

对照期望输出检查输出。如果它们相同,请选择另一个输入图像。如果有差异,则通过等式调整权重,然后选择另一个输入图像。

继续显示输入,直到总误差低于某个阈值。

当系统被训练时,一个看不见的图像可以呈现给系统。如果是敌方目标,则输出 1,如果不是 0。

所有细节都可以在网上找到,维基页面,还有更多的解释,但希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2018-03-19
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    相关资源
    最近更新 更多