我对神经网络还比较新近,我最近构建了一个用于车牌号码识别的神经网络。它有3层:输入层为16*24(382个神经元)的150 dpi数字图像,隐藏层(199个神经元)使用sigmoid激活函数,输出层为softmax(10个神经元),用于识别0到9的数字。
我正在尝试扩展我的神经网络,以识别车牌上的字母。但我担心如果我只是简单地在输出中增加更多类别,例如增加10个字母使总类别达到20个,神经网络将难以区分每个类别的特征。此外,我认为当输入是一个数字时,如果神经网络错误地将其分类为概率最大的字母,即使所有数字输出的概率总和超过那个字母,也会引起问题。
因此,我想知道是否可以按以下方式构建层次化神经网络:
有3个神经网络:’Item’、’Number’、’Letter’
-
‘Item’神经网络用于区分输入是数字还是字母。
-
如果’Item’神经网络将输入分类为数字(字母),则输入将通过’Number’(’Letter’)神经网络进行处理。
-
返回来自Number(Letter)神经网络的最终输出。
每个网络的学习机制如下:
- ‘Item’神经网络学习所有数字和字母的图像。因此有2个输出。
- ‘Number’(’Letter’)神经网络仅学习数字(字母)的图像。
我应该选择哪种方法来获得更好的分类效果?是简单地增加10个类别,还是按照上述方法构建层次化神经网络?
回答:
我强烈建议仅训练一个神经网络,其输出包含你想要识别的所有类型图像(因此,每个你想要识别的字母有一个输出节点,每个你想要识别的数字也有一个输出节点)。
这样做的主要原因是,识别数字和识别字母实际上是完全相同的任务。从直觉上理解,经过训练的多层神经网络可以在多个步骤中执行识别。在隐藏层中,它可能会学习检测各种简单原始形状(例如,隐藏层可能会学习检测垂直线、水平线、对角线、某些简单的曲线形状等)。然后,在隐藏层和输出层之间的权重中,它可能会学习如何将这些原始形状的多个组合识别为特定的输出类别(例如,在大致正确的位置上的垂直线和水平线可能被识别为大写字母L
)。
它在隐藏层中学习的这些“东西”对数字和字母都非常相关(可能指示字母L
的垂直线在与其他形状结合时也可能指示数字1
)。因此,有一些对两项“任务”都相关且有用的学习内容,如果它能在同一个网络中学习这些内容,可能会更容易学到这些东西。
另见我之前对相关问题给出的这个回答。