神经网络字符识别
Neural Network Character Recognition
假设我正在尝试创建一个神经网络来识别简单的 5x5 像素网格上的字符。我只有 6 个可能的字符(符号)- X,+,/,\,|
目前我有一个前馈神经网络 - 具有 25 个输入节点、6 个隐藏节点和一个输出节点(在 0 和 1 之间 - sigmoid)。
输出对应一个符号。如'X' = 0.125
、'+' = 0.275
、'/' = 0.425
等
无论网络(测试时)的输出是什么,都对应于数字上最接近的任何字符。即 - 0.13 = 'X'
在输入上,0.1 表示像素根本没有着色,0.9 表示完全着色。
在 6 个符号上训练网络后,我通过添加一些噪声对其进行测试。
不幸的是,如果我向“/”添加一点噪音,网络就会认为它是“\”。
我认为 6 个符号的顺序(即,e - 它们对应的数字表示形式)可能会有所不同。
可能是隐藏节点的数量导致了这个问题。
可能是我将字符映射到数字的一般概念导致了问题。
如果您能帮助我们提高网络的准确性,我们将不胜感激。
输出编码是最大的问题。您最好对输出使用单热编码,这样您就有六个输出节点。
例如,
- 1 0 0 0 0 0
X 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.01
X 0.5
+ 0.2
/ 0.1
\ 0.2
| 0.1
将字符预测为"X"。
假设我正在尝试创建一个神经网络来识别简单的 5x5 像素网格上的字符。我只有 6 个可能的字符(符号)- X,+,/,\,|
目前我有一个前馈神经网络 - 具有 25 个输入节点、6 个隐藏节点和一个输出节点(在 0 和 1 之间 - sigmoid)。
输出对应一个符号。如'X' = 0.125
、'+' = 0.275
、'/' = 0.425
等
无论网络(测试时)的输出是什么,都对应于数字上最接近的任何字符。即 - 0.13 = 'X'
在输入上,0.1 表示像素根本没有着色,0.9 表示完全着色。
在 6 个符号上训练网络后,我通过添加一些噪声对其进行测试。
不幸的是,如果我向“/”添加一点噪音,网络就会认为它是“\”。
我认为 6 个符号的顺序(即,e - 它们对应的数字表示形式)可能会有所不同。
可能是隐藏节点的数量导致了这个问题。
可能是我将字符映射到数字的一般概念导致了问题。
如果您能帮助我们提高网络的准确性,我们将不胜感激。
输出编码是最大的问题。您最好对输出使用单热编码,这样您就有六个输出节点。
例如,
- 1 0 0 0 0 0
X 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.01
X 0.5
+ 0.2
/ 0.1
\ 0.2
| 0.1
将字符预测为"X"。