假设我正在尝试创建一个神经网络来识别简单5×5像素网格上的字符。我只有6个可能的字符(符号) – X,+,/,\,|
目前我有一个前馈神经网络 – 拥有25个输入节点,6个隐藏节点和一个输出节点(在0到1之间 – 使用sigmoid函数)。
输出对应一个符号。例如,'X' = 0.125
,'+' = 0.275
,'/' = 0.425
等等。
无论网络在测试时的输出是什么,都对应数值上最接近的字符。即 – 0.13 = 'X'
在输入时,0.1表示像素完全未着色,0.9表示完全着色。
在用6个符号训练网络后,我通过添加一些噪声来测试它。
不幸的是,如果我给’/’添加一点噪声,网络认为它是’\’。
我认为可能6个符号的排序(即它们对应的数值表示)可能会产生影响。
可能隐藏节点的数量导致了这个问题。
可能我将字符映射到数字的总体概念导致了这个问题。
任何帮助都将非常受欢迎,以提高网络的准确性。
回答:
输出编码是最大的问题。你最好使用一热编码作为输出,这样你将有六个输出节点。
例如,
- 1 0 0 0 0 0X 0 1 0 0 0 0+ 0 0 1 0 0 0/ 0 0 0 1 0 0\ 0 0 0 0 1 0| 0 0 0 0 0 1
这对于神经网络来说更容易学习。在预测时,选择具有最高值的节点作为你的预测。例如,如果你在每个输出节点有以下输出值:
- 0.01X 0.5+ 0.2/ 0.1\ 0.2| 0.1
预测字符为”X”。