close all; clear all; num1=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1]'; num2=[1 0 0 0 1 1 1 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 0 0 0 1]'; num3=[1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1]'; num4=[1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 1]'; num5=[1 1 1 1 1 0 0 0 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 1 1 1 1]'; num6=[1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 1 1 1 1]'; num7=[1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1]'; num8=[1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1]'; num9=[1 1 1 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 1]'; num10=[1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1]'; X=[num1 num2 num3 num4 num5 num6 num7 num8 num9 num10]; d=eye(10,10); %產生一個10*10的單位矩陣 %pr為R*2矩陣,pr(:,1)為輸入元素的min值,pr(:,2)為輸入元素的max值 pr=zeros(36,2); %pr(:,1)之元素皆為0 pr(:,2)=ones(36,1); %pr(:,2)之元素皆為1 s=10; %神經元的數目 %感知機設定方式 %net = newp creates a new network with a dialog box. %net = newp(PR,S,TF,LF) takes these inputs, %PR -- R x 2 matrix of min and max values for R input elements %S -- Number of neurons %TF -- Transfer function, default = 'hardlim' %LF -- Learning function, default = 'learnp' net=newp(pr,s,'logsig','learnwh'); net.inputweights{1,1}.initFcn='rands'; net.biases{1}.initFcn='rands'; net=init(net); %The network is initially trained without noise for a maximum of 20000 epochs or %until the network sum-squared error falls beneath 1e-4 net.trainParam.lr=0.5; %學習率 net.trainParam.show=500; net.trainParam.epochs=20000; %迭代次數 net.trainParam.goal=1e-4; %門檻值 net=train(net,X,d); wt=net.IW{1,1}; %加權矩陣 bias=net.b{1}; %偏權值 num_sim=[1 1 1 1; %缺陷的矩陣 這是一個有缺陷(noise)的「0」,看出來了嗎? 1 0 0 1; 1 0 0 1; 1 0 0 1; 1 0 0 1; 0 0 0 1; 0 0 0 1; 0 0 0 1; 1 1 1 1]; %將矩陣轉為向量 for j=1:4 in((j-1)*9+1:j*9,1)=num_sim(:,j); end %做排序大小,抓出哪ㄍ數字中辨識率最高,是以比較原本輸入ㄉ數字是否一樣 out=sim(net,in); %模擬網路 p=0; for m=1:10 if out(m,1)>p p=out(m,1); num=m; else p=p; end end p num