一、作业要求
对小卡片上的数字进行奇偶数识别。数字卡为奇数时,输出1;数字卡为偶数时,输出0。要求使用matlab软件编程。
二、人工神经网络背景
人工神经网络(Artificial Neural Network,即ANN),是20世纪80 年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
图1 人工神经元模型
在上图中,X1, X2……,Xn是神经元的输入,即是来自前级n个神经元的轴突的信息:θi是i神经元的阀值:Wil, Wi2,…… Win分别是i神经元对Xl , X2……,Xn的权系数,也即突触的传递效率;Yi是i神经元的输出;f[·]是激活函数,它决定i神经元受到输人X1, X2,……,Xn的共同刺激达到阀值时以何种方式输出。上述的神经元模型,其数学模型表达式:
nuiwijxjij1yf(u)ii
其中,Ui又被称为诱导局部域。激活函数f[·]通过诱导局部域Ui定义神经元的
输出。
图2算法框图
三、代码及其作用:
1.【CardMatrix.m】此文件的作用是输出数字卡片的格式。 function Y = CardMatrix (num) switch num case 0
Y = [0 1 1 1 0; 1 0 0 0 1; 1 0 0 0 1; 1 0 0 0 1; 0 1 1 1 0]; case 1
Y = [0 0 1 0 0; 0 1 1 0 0; 0 0 1 0 0; 0 0 1 0 0; 0 1 1 1 0]; case 2
Y = [0 1 1 1 0; 1 0 0 0 1; 0 0 1 1 0; 0 1 0 0 0; 1 1 1 1 1]; case 3
Y = [0 1 1 1 0; 1 0 0 0 1; 0 0 1 1 1; 1 0 0 0 1; 0 1 1 1 0]; case 4
Y = [0 0 1 1 0; 0 1 0 1 0; 1 0 0 1 0; 1 1 1 1 1; 0 0 0 1 0]; case 5
Y = [0 1 1 1 1; 0 1 0 0 0; 0 1 1 1 0; 0 0 0 0 1; 0 1 1 1 0]; case 6
Y = [0 0 1 1 0; 0 1 0 0 0; 1 1 1 1 1; 1 0 0 0 1; 0 1 1 1 0]; case 7
Y = [1 1 1 1 1; 0 0 0 0 1; 0 0 0 1 0; 0 0 1 0 0; 0 0 1 0 0]; case 8
Y = [0 1 1 1 0; 1 0 0 0 1; 0 1 1 1 0; 1 0 0 0 1; 0 1 1 1 0]; case 9
Y = [0 1 1 1 0; 1 0 0 0 1; 0 1 1 1 1; 0 0 0 0 1; 0 1 1 1 0]; otherwise
Y = zeros(5); end
2.【UnitStep.m】此文件是一个单位阶跃函数,用来供给阈值函数调用。 function y = UnitStep (x) if x<=0 y = 0;
else
y = 1; end
3.【ThresholdFunc.m文件】此文件是就阈值函数,用来模拟单个神经元的人工神经网络。
function y = ThresholdFunc (X, W) X = double(X); v = 0;
for i = 1:5 for j = 1:5
v = v + X(i,j) * W(i,j); end end
y = UnitStep(v);
4.【NNstudy.m】此文件的作用是神经网络的学习,确定权值矩阵。当神经网络在不超过最大训练次数的情况下完成学习后,程序会自动退出,并返回所经过的训练次数。
function W = NNstudy (n, t_max) W = ones(5) * 0.1;
d = [0 1 0 1 0 1 0 1 0 1 ]; for k = 1:t_max Flag_adj = 0;
for num = 0:9
y = ThresholdFunc(CardMatrix(num), W); if y ~= d(num+1) Flag_adj = 1;
card = double(CardMatrix(num)); for i = 1:5
for j = 1:5
W(i,j) = W(i,j) + n * ( d(num+1) - y ) * card(i,j); end end end end
if Flag_adj == 0 break; end end
disp(sprintf('\\nTraining times: %d', k));
5.【NumberDiscriminate.m】此文件为主文件,用来区别奇偶数卡片。 function NumberDiscriminate (num, W)
if num<0 || num >9
disp('Error! The input number should range from 1 to 9.');
return; end
y = ThresholdFunc(CardMatrix(num), W);
disp(' ');
disp('Card Matrix:'); disp(CardMatrix(num)); if y==1
disp(['OUTPUT = 1 (Odd)']); else
disp(['OUTPUT = 0 (Even)']); end
disp(' ');
四、结果展示:
>> W = NNstudy(0.01, 10)
Training times: 9 W =
0.1000 0.0400 -0.0600 -0.0600 0.0400 0.0000 0.1000 0.0500 -0.0400 0.0500 0.0300 -0.0200 -0.0100 -0.0200 0.0500 0.0500 0.0300 -0.0100 -0.0100 -0.0600
>> NumberDiscriminate(0, W)
Card Matrix:
0 1 1 1 0 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 0 1 1 1 0
OUTPUT = 0 (Even)
>> NumberDiscriminate(1, W)
0.1000 0.0400 0.0800 0.0100 0.0300 Card Matrix:
0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 1 0
OUTPUT = 1 (Odd)
>> NumberDiscriminate(2, W)
Card Matrix:
0 1 1 1 1 0 0 0 0 0 1 1 0 1 0 0 1 1 1 1
OUTPUT = 0 (Even)
>> NumberDiscriminate(3, W)
Card Matrix:
0 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1
OUTPUT = 1 (Odd)
>> NumberDiscriminate(4, W)
Card Matrix:
0 0 1 1 0 1 0 1 1 0 0 1 1 1 1 1 0 0 0 1
OUTPUT = 0 (Even)
>> NumberDiscriminate(5, W)
0 1 0 0 1 0 1 1 1 0 0 0 0 1 0 Card Matrix:
0 1 1 1 1 0 1 0 0 0 0 1 1 1 0 0 0 0 0 1 0 1 1 1 0
OUTPUT = 1 (Odd)
>> NumberDiscriminate(6, W)
Card Matrix:
0 0 1 1 0 1 0 0 1 1 1 1 1 0 0 0 0 1 1 1
OUTPUT = 0 (Even)
>> NumberDiscriminate(7, W)
Card Matrix:
1 1 1 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0
OUTPUT = 1 (Odd)
>> NumberDiscriminate(8, W)
Card Matrix:
0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
OUTPUT = 0 (Even)
>> NumberDiscriminate(9, W)
0 0 1 1 0 1 1 0 0 0 0 1 0 1 0 Card Matrix:
0 1 1 1 0 1 0 0 0 1 0 1 1 1 1 0 0 0 0 1 0 1 1 1 0
OUTPUT = 1 (Odd)
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务