# 基于BP神经网络的字符识别研究

+关注继续查看

0 引言

1 流行的方法

5×6点阵方式表示的26个大写英文字母，如图所示：

float[] input_letterK = new float[] {

0.5f, -0.5f, -0.5f, 0.5f, 0.5f,

0.5f, -0.5f, 0.5f, -0.5f, -0.5f,

0.5f, 0.5f, -0.5f, -0.5f, -0.5f,

0.5f, -0.5f, 0.5f, -0.5f, -0.5f,

0.5f, -0.5f, -0.5f, 0.5f, -0.5f,


0.5f, -0.5f, -0.5f, -0.5f, 0.5f};

float[] output_letterK = new float[] {

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,


-0.5f};

// pattern size

int patternSize = 30;

// patterns count

int patterns = 26;

// learning input vectors

float[][] input = new float[26][]

{

...

new float [] {

0.5f, -0.5f, -0.5f, 0.5f, 0.5f,

0.5f, -0.5f, 0.5f, -0.5f, -0.5f,

0.5f, 0.5f, -0.5f, -0.5f, -0.5f,

0.5f, -0.5f, 0.5f, -0.5f, -0.5f,

0.5f, -0.5f, -0.5f, 0.5f, -0.5f,

0.5f, -0.5f, -0.5f, -0.5f, 0.5f}, // Letter K

...


};

// learning ouput vectors

float[][] output = new float[26][]

{

...

new float [] {

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f},                // Letter K

...


};

// create neural network

AForge.NeuralNet.Network neuralNet =

new AForge.NeuralNet.Network(new BipolarSigmoidFunction(2.0f),

                                     patternSize, patterns);


// randomize networks weights

neuralNet.Randomize();

// create network teacher

AForge.NeuralNet.Learning.BackPropagationLearning teacher = new

AForge.NeuralNet.Learning.BackPropagationLearning(neuralNet);

teacher.LearningLimit = 0.1f;

teacher.LearningRate = 0.5f;

// teach the network

int i = 0;

do

{

teacher.LearnEpoch(input, output);

i++;


}

while (!teacher.IsConverged);

System.Diagnostics.Debug.WriteLine("total learning epoch:" + i);

// "K" letter, but a little bit noised

float[] pattern = new float [] {

        0.5f, -0.5f, -0.5f, 0.5f, 0.5f,

0.5f, -0.5f, 0.5f, -0.5f, 0.5f,

0.5f, 0.5f, -0.5f, -0.5f, -0.5f,

0.5f, -0.5f, 0.5f, -0.5f, -0.5f,

0.5f, -0.5f, -0.5f, 0.5f, -0.5f,

0.3f, -0.5f, -0.5f, 0.5f, 0.5f};


// get network's output

float[] output = neuralNet.Compute(pattern);

int i, n, maxIndex = 0;

// find the maximum from output

float max = output[0];

for (i = 1, n = output.Length; i < n; i++)

{

if (output[i] > max)

{

max = output1[i];

maxIndex = i;

}
`

}

System.Diagnostics.Debug.WriteLine("network thinks it is - " + (char)((int) 'A' + maxIndex));

2 另一种方法

usability = OuterEntropy * ( 1 - AverageInnerEntropy)

3 测试应用程序

(原来的程序是识别26个英文大写字母，这里我改成识别中文字符“人工智能”四个字，并且换成幼圆字体来训练网络，幼圆字体和鼠标画汉字的图像差不多，经测试识别效果理想。)

AForge.NET （www.aforgenet.com）是一个用C#语言写的开源软件，它可用在机器视觉和人工智能领域：图像处理，神经网络，遗传算法，机器学习，机器人等等，作者是英国的一个软件工程师Andrew Kirillov.

1）我们需要产生的初始接受器集。在应用程序启动它已经产生的，如果不打算改变最初的接受器数量或过滤数量，可以跳过这一步。

2）选择字体用来训练网络。第一次定义为Arial字体。

3）生成数据。在这一步的产生初始训练数据。

4）过滤数据。在此步骤中初始接受器集也就是训练数据将被过滤。

5）创建一个神经网络。

6）训练神经网络。

7）让我们来看看misclassified值.它应该是“0 / 26”，意思是，经过训练的网络可以成功地识别所有图案（即26个字母）。

8）我们可以使用“Draw”和“Recognize”按钮来确定以上的识别过程。

4 结论

[1] Andrew Kirillov. http://www.codeproject.com/KB/cs/neural_network_ocr.aspx

[2] Andrew Kirillov. http://www.aforgenet.com/

[3] 蒋宗礼. 人工神经网络导论. 北京:高等教育出版社,2001.

|
4月前
|

【3-D深度学习：肺肿瘤分割】创建和训练 V-Net 神经网络，并从 3D 医学图像中对肺肿瘤进行语义分割研究（Matlab代码实现）
【3-D深度学习：肺肿瘤分割】创建和训练 V-Net 神经网络，并从 3D 医学图像中对肺肿瘤进行语义分割研究（Matlab代码实现）
69 0
|
4月前
|

BP神经网络对水质问题进行预测（Matlab代码实现）
BP神经网络对水质问题进行预测（Matlab代码实现）
38 0
|
5月前
|

44 0
|
5月前
|

BP神经网络对指纹识别的应用（Matlab代码实现）
BP神经网络对指纹识别的应用（Matlab代码实现）
41 0
|
5月前
|

36 0
|
5月前
|

38 0
|
5月前
|

40 0
|
9月前
|

165 0
|
11月前
|

【交通标志识别】基于HOG特征结合BP神经网络实现交通标志识别附matlab代码
【交通标志识别】基于HOG特征结合BP神经网络实现交通标志识别附matlab代码
80 0
|
11月前
|

【语音识别】基于BP神经网络实现语音特征信号分类附matlab代码
【语音识别】基于BP神经网络实现语音特征信号分类附matlab代码
116 0