让神经网络有分层输出更好吗?



我对神经网络很陌生,我最近构建了用于车辆牌照数字分类的神经网络。它有 3 层:1 个输入层用于 16*24(382 个神经元)数字图像,150 dpi,1 个隐藏层(199 个神经元)具有 sigmoid 激活功能,1 个 softmax 输出层(10 个神经元)用于每个数字 0 到 9。

我正在尝试扩展我的神经网络,以便对车牌中的字母进行分类。但我担心如果我只是简单地在输出中添加更多类,例如在分类中添加 10 个字母,总共 20 个类,神经网络很难将特征与每个类分开。而且,我认为当输入是数字之一并且神经网络错误地归类为具有最大概率的字母之一时,即使所有数字输出的概率总和超过该值,也可能会导致问题。

所以我想知道是否可以通过以下方式构建分层神经网络:

有 3 个神经网络:"项目"、"数字"、"字母">

  1. "项目"神经网络对输入是数字还是字母进行分类。

  2. 如果"项目"神经网络将输入分类为数字(字母),则输入通过"数字"("字母")神经网络。

  3. 返回数字(字母)神经网络的最终输出。

每个网络的学习机制如下:

  1. "项目"神经网络学习数字和字母的所有图像。所以有 2 个输出。
  2. "数字
  3. "("字母")神经网络只学习数字(字母)的图像。

我应该选择哪种方法才能获得更好的分类?只需简单地再添加 10 个类或使用上述方法构建分层神经网络?

我强烈建议只训练一个神经网络,输出你希望能够检测到的各种图像(所以每个字母都有一个输出节点,你希望能够识别,每个数字都有一个输出节点,你想能够识别)。

这样做的主要原因是因为识别数字和识别字母实际上是完全相同的任务。直观地,您可以将具有多层的训练神经网络理解为分多个步骤执行识别。在隐藏层中,它可以学习检测各种简单的原始形状(例如,隐藏层可以学习检测垂直线、水平线、对角线、某些类型的简单曲线形状等)。然后,在隐藏层和输出层之间的权重中,它可以学习如何将这些基元形状的多个组合识别为特定的输出类(例如,大致正确位置的垂直线和水平线可以重新识别为大写字母L)。

它在隐藏层中学习的那些"事物"将与数字和字母完全相关(当与其他形状结合使用时,可能表示L的垂直线也可能表示1)。因此,有一些有用的东西需要学习,这些东西与两个"任务"相关,如果它可以在同一网络中学习这些东西,它可能能够更容易地学习这些东西。

另请参阅我过去对相关问题给出的答案。

我正在尝试扩展我的神经网络,以便对车牌中的字母进行分类。但我担心如果我只是简单地在输出中添加更多类,例如在分类中添加 10 个字母,总共 20 个类,神经网络很难将特征与每个类分开。

你离它变得有问题的地方还很远。ImageNet 有 1000 个类,通常在单个网络中完成。参见AlexNet论文。如果您想了解有关 CNN 的更多信息,请查看"分析和优化 卷积神经网络架构"。当你在上面时,请参阅第 4 章了解多头分类。您可以阅读摘要...好吧,总结一下。

相关内容

最新更新