1. 程式人生 > >MNIST手寫數字識別【Matlab神經網路工具箱】

MNIST手寫數字識別【Matlab神經網路工具箱】

MNIST手寫數字識別

Matlab程式碼:

%Neural Networks Codes will be run on this part
tic
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
clear all
pic1=imread('8.png');
pic1=rgb2gray(pic1);
% pic=255-pic;
[a,b]=size(pic1);
for i=1:1:a
    for j=1:1:b   
        if  pic1(i,j)==0    
            up=i;           
            break       
        end
    end
end
for i=a:-1:1
    for j=1:1:b       
        if  pic1(i,j)==0            
            down=i;
            break
        end        
    end
end
for j=1:1:b
    for i=1:1:a       
        if  pic1(i,j)==0            
            left=j;
            break
        end        
    end
end
for j=b:-1:1
    for i=1:1:a       
        if  pic1(i,j)==0            
            right=j;
            break
        end        
    end
end
pic=pic1(down:up,right:left);
imshow(pic)
pic=imresize(pic,[28 28]);
% size(pic);
pic1=1-double(reshape(pic,784,1))/255;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%載入待識別影象
image = loadMNISTImages('train-images'); % 載入樣本影象共60000,size(image)=784*60000
label = loadMNISTLabels('train-labels');%載入樣本影象對應標籤
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
label1=zeros(60000,10);
j=0;
for i=1:1:60000  
    j=label(i)+1;
    label1(i,j)=1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%=訓練樣本
PR=minmax(image);
bpnet=newff(PR,[30 10],{'tansig', 'tansig'}, 'traingd', 'learngdm');
net.epoch=100;
net.trainParam.epochs=10;%允許最大訓練步數
net.trainParam.goal=0.001; %訓練目標最小誤差0.001
net.trainParam.show=1; %每間隔100步顯示一次訓練結果
net.trainParam.lr=0.01; %學習速率
bpnet=train(bpnet,image,label1');
bpnet=sim(bpnet,pic1);
shuzi=find(bpnet==max(bpnet))-1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
toc

利用自己在寫字板上寫的字測試:

如果不會下載MNIST 資料,可以訪問:我的GitHub:

裡面有不使用MATLAB工具箱的原始碼