【神经网络学习笔记】基于离散Hopfield神经网络的数字识别

时间:2022-12-14 08:34:50

在日常生活中,经常会遇到带噪声字符的识别问题,如交通系统中汽车车号和汽车牌照,由于汽车在使用过程中,要经受自然环境的风吹日晒,造成字体模糊不清,难以辨认。如何从这些残缺不全的字符中攫取完整的信息,是字符识别的关键问题。作为字符识别的组成部分之一的数字识别在邮政、交通及商业票据管理方面有着极高的应用价值。目前有很多种方法用于字符识别,主要分为神经网络识别、概率统计识别和模糊识别等。传统的数字识别方法在有干扰的情况下不能很好地对数字进行识别,而离散型Hopfield神经网络具有联想记忆和优化计算的功能,并且计算的收敛速度很快。本案例利用它的这些特点对数字进行识别,并引入干扰,通过仿真实验证实设计的网络对有噪声污染的数字同样具有一定的识别功能。

【神经网络学习笔记】基于离散Hopfield神经网络的数字识别

%% Hopfield神经网络的联想记忆——数字识别

%% 清空环境变量
clear all
clc

%% 数据导入
load data1 array_one
load data2 array_two

%% 训练样本(目标向量)
 T = [array_one;array_two]';
 
%% 创建网络
 net = newhop(T);
 
%% 数字1和2的带噪声数字点阵(固定法)
load data1_noisy noisy_array_one
load data2_noisy noisy_array_two

%% 数字1和2的带噪声数字点阵(随机法)

% noisy_array_one=array_one;
% noisy_array_two=array_two;
% for i = 1:100
%     a = rand;
%     if a < 0.3
%        noisy_array_one(i) = -array_one(i);
%        noisy_array_two(i) = -array_two(i);
%     end
% end

%% 数字识别

% 单步仿真——TS = 1(矩阵形式)
% identify_one = sim(net,10,[],noisy_array_one');  
% 多步仿真——元胞数组形式
noisy_one = {(noisy_array_one)'};                    
identify_one = sim(net,{10,20},{},noisy_one);
identify_one{20}';
noisy_two = {(noisy_array_two)'};
identify_two = sim(net,{10,20},{},noisy_two);
identify_two{20}';

%% 结果显示
Array_one = imresize(array_one,20);%放大20倍
subplot(3,2,1)
imshow(Array_one)
title('标准(数字1)') 
Array_two = imresize(array_two,20);
subplot(3,2,2)
imshow(Array_two)
title('标准(数字2)') 
subplot(3,2,3)
Noisy_array_one = imresize(noisy_array_one,20);
imshow(Noisy_array_one)
title('噪声(数字1)') 
subplot(3,2,4)
Noisy_array_two = imresize(noisy_array_two,20);
imshow(Noisy_array_two)
title('噪声(数字2)')
subplot(3,2,5)
imshow(imresize(identify_one{10}',20))
title('识别(数字1)')
subplot(3,2,6)
imshow(imresize(identify_two{10}',20))
title('识别(数字2)')

【神经网络学习笔记】基于离散Hopfield神经网络的数字识别