如何訪問(wèn)云南建設(shè)廳網(wǎng)站網(wǎng)站服務(wù)器是什么意思
目錄
背影
卷積神經(jīng)網(wǎng)絡(luò)CNN的原理
卷積神經(jīng)網(wǎng)絡(luò)CNN的定義
卷積神經(jīng)網(wǎng)絡(luò)CNN的神經(jīng)元
卷積神經(jīng)網(wǎng)絡(luò)CNN的激活函數(shù)
卷積神經(jīng)網(wǎng)絡(luò)CNN的傳遞函數(shù)
卷積神經(jīng)網(wǎng)絡(luò)CNN手寫(xiě)體識(shí)別
基本結(jié)構(gòu)
主要參數(shù)
MATALB代碼
結(jié)果圖
展望
背影
現(xiàn)在生活,各種人工智能都要求對(duì)圖像擁有識(shí)別的能力,本文主要做卷積神經(jīng)網(wǎng)絡(luò)CNN進(jìn)行手寫(xiě)體分類識(shí)別,通過(guò)調(diào)試參數(shù),提高識(shí)別率。
卷積神經(jīng)網(wǎng)絡(luò)CNN的原理
卷積神經(jīng)網(wǎng)絡(luò)CNN的定義
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)是一類包含卷積計(jì)算且具有深度結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò)(Feedforward Neural Networks),是深度學(xué)習(xí)(deep learning)的代表算法之一 。卷積神經(jīng)網(wǎng)絡(luò)具有表征學(xué)習(xí)(representation learning)能力,能夠按其階層結(jié)構(gòu)對(duì)輸入信息進(jìn)行平移不變分類(shift-invariant classification),因此也被稱為“平移不變?nèi)斯ど窠?jīng)網(wǎng)絡(luò)(Shift-Invariant Artificial Neural Networks, SIANN)”
卷積神經(jīng)網(wǎng)絡(luò)CNN的基本結(jié)構(gòu)
基本BP算法包括信號(hào)的前向傳播和誤差的反向傳播兩個(gè)過(guò)程。即計(jì)算誤差輸出時(shí)按從輸入到輸出的方向進(jìn)行,而調(diào)整權(quán)值和閾值則從輸出到輸入的方向進(jìn)行。正向傳播時(shí),輸入信號(hào)通過(guò)隱含層作用于輸出節(jié)點(diǎn),經(jīng)過(guò)非線性變換,產(chǎn)生輸出信號(hào),若實(shí)際輸出與期望輸出不相符,則轉(zhuǎn)入誤差的反向傳播過(guò)程。誤差反傳是將輸出誤差通過(guò)隱含層向輸入層逐層反傳,并將誤差分?jǐn)偨o各層所有單元,以從各層獲得的誤差信號(hào)作為調(diào)整各單元權(quán)值的依據(jù)。通過(guò)調(diào)整輸入節(jié)點(diǎn)與隱層節(jié)點(diǎn)的聯(lián)接強(qiáng)度和隱層節(jié)點(diǎn)與輸出節(jié)點(diǎn)的聯(lián)接強(qiáng)度以及閾值,使誤差沿梯度方向下降,經(jīng)過(guò)反復(fù)學(xué)習(xí)訓(xùn)練,確定與最小誤差相對(duì)應(yīng)的網(wǎng)絡(luò)參數(shù)(權(quán)值和閾值),訓(xùn)練即告停止。此時(shí)經(jīng)過(guò)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)即能對(duì)類似樣本的輸入信息,自行處理輸出誤差最小的經(jīng)過(guò)非線形轉(zhuǎn)換的信息。
輸入層
卷積神經(jīng)網(wǎng)絡(luò)的輸入層可以處理多維數(shù)據(jù),常見(jiàn)地,一維卷積神經(jīng)網(wǎng)絡(luò)的輸入層接收一維或二維數(shù)組,其中一維數(shù)組通常為時(shí)間或頻譜采樣;二維數(shù)組可能包含多個(gè)通道;二維卷積神經(jīng)網(wǎng)絡(luò)的輸入層接收二維或三維數(shù)組;三維卷積神經(jīng)網(wǎng)絡(luò)的輸入層接收四維數(shù)組 。由于卷積神經(jīng)網(wǎng)絡(luò)在計(jì)算機(jī)視覺(jué)領(lǐng)域應(yīng)用較廣,因此許多研究在介紹其結(jié)構(gòu)時(shí)預(yù)先假設(shè)了三維輸入數(shù)據(jù),即平面上的二維像素點(diǎn)和RGB通道。
與其它神經(jīng)網(wǎng)絡(luò)算法類似,由于使用梯度下降算法進(jìn)行學(xué)習(xí),卷積神經(jīng)網(wǎng)絡(luò)的輸入特征需要進(jìn)行標(biāo)準(zhǔn)化處理。具體地,在將學(xué)習(xí)數(shù)據(jù)輸入卷積神經(jīng)網(wǎng)絡(luò)前,需在通道或時(shí)間/頻率維對(duì)輸入數(shù)據(jù)進(jìn)行歸一化,若輸入數(shù)據(jù)為像素,也可將分布于 的原始像素值歸一化至 區(qū)間 。輸入特征的標(biāo)準(zhǔn)化有利于提升卷積神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)效率和表現(xiàn)。
隱含層
卷積神經(jīng)網(wǎng)絡(luò)的隱含層包含卷積層、池化層和全連接層3類常見(jiàn)構(gòu)筑,在一些更為現(xiàn)代的算法中可能有Inception模塊、殘差塊(residual block)等復(fù)雜構(gòu)筑。在常見(jiàn)構(gòu)筑中,卷積層和池化層為卷積神經(jīng)網(wǎng)絡(luò)特有。卷積層中的卷積核包含權(quán)重系數(shù),而池化層不包含權(quán)重系數(shù),因此在文獻(xiàn)中,池化層可能不被認(rèn)為是獨(dú)立的層。以LeNet-5為例,3類常見(jiàn)構(gòu)筑在隱含層中的順序通常為:輸入-卷積層-池化層-全連接層-輸出。
卷積層
卷積層的功能是對(duì)輸入數(shù)據(jù)進(jìn)行特征提取,其內(nèi)部包含多個(gè)卷積核,組成卷積核的每個(gè)元素都對(duì)應(yīng)一個(gè)權(quán)重系數(shù)和一個(gè)偏差量(bias vector),類似于一個(gè)前饋神經(jīng)網(wǎng)絡(luò)的神經(jīng)元(neuron)。卷積層內(nèi)每個(gè)神經(jīng)元都與前一層中位置接近的區(qū)域的多個(gè)神經(jīng)元相連,區(qū)域的大小取決于卷積核的大小,在文獻(xiàn)中被稱為“感受野(receptive field)”,其含義可類比視覺(jué)皮層細(xì)胞的感受野 。卷積核在工作時(shí),會(huì)有規(guī)律地掃過(guò)輸入特征,在感受野內(nèi)對(duì)輸入特征做矩陣元素乘法求和并疊加偏差量
池化層(pooling layer)
在卷積層進(jìn)行特征提取后,輸出的特征圖會(huì)被傳遞至池化層進(jìn)行特征選擇和信息過(guò)濾。池化層包含預(yù)設(shè)定的池化函數(shù),其功能是將特征圖中單個(gè)點(diǎn)的結(jié)果替換為其相鄰區(qū)域的特征圖統(tǒng)計(jì)量。池化層選取池化區(qū)域與卷積核掃描特征圖步驟相同,由池化大小、步長(zhǎng)和填充控制
全連接層(fully-connected layer)
卷積神經(jīng)網(wǎng)絡(luò)中的全連接層等價(jià)于傳統(tǒng)前饋神經(jīng)網(wǎng)絡(luò)中的隱含層。全連接層位于卷積神經(jīng)網(wǎng)絡(luò)隱含層的最后部分,并只向其它全連接層傳遞信號(hào)。特征圖在全連接層中會(huì)失去空間拓?fù)浣Y(jié)構(gòu),被展開(kāi)為向量并通過(guò)激勵(lì)函數(shù)
輸出層
卷積神經(jīng)網(wǎng)絡(luò)中輸出層的上游通常是全連接層,因此其結(jié)構(gòu)和工作原理與傳統(tǒng)前饋神經(jīng)網(wǎng)絡(luò)中的輸出層相同。對(duì)于圖像分類問(wèn)題,輸出層使用邏輯函數(shù)或歸一化指數(shù)函數(shù)(softmax function)輸出分類標(biāo)簽 。在物體識(shí)別(object detection)問(wèn)題中,輸出層可設(shè)計(jì)為輸出物體的中心坐標(biāo)、大小和分類 。在圖像語(yǔ)義分割中,輸出層直接輸出每個(gè)像素的分類結(jié)果
基于卷積神經(jīng)網(wǎng)絡(luò)CNN的手寫(xiě)體識(shí)別
基本模型
創(chuàng)建經(jīng)典的Lenet,三層神經(jīng)網(wǎng)絡(luò),
神經(jīng)網(wǎng)絡(luò)參數(shù)
卷積核33,池化層22,學(xué)習(xí)率0.5,訓(xùn)練批次20,最大迭代次數(shù)200
MATLAB編程代碼
clear
clc
close all
% format compact
%% 加載數(shù)據(jù)
load maydata.mat
% load MNISTdata.match
% ann_data
[input,inputps]=mapminmax(ann_data,-1,1);
[output,outputps]=mapminmax(ann_label,0,1);
% [input,inputps]=mapminmax(ann_data,0,1);
% [output,outputps]=mapminmax(ann_label,0,1);
%%
input1=input’;%
input = [input1 input1(:,10)];
%%
for i=1:size(input,1)
x=reshape(input(i,:),6,6);
input_x(:,:,i)=x;
end
%%
n = randperm(5000);
train_x=input_x(:,:,n);
train_y=output(:,n);
test_x=input_x(:,:,n(4501:5000));
test_y=output(:,n(4501:5000));
%% 創(chuàng)建一個(gè)經(jīng)典Lenet(卷積神經(jīng)網(wǎng)絡(luò)中代表模型,如lenet、alexnet,vgg16,resnet等)
% rand(‘state’,0)
cnn.layers = {
%第一層
struct(‘type’, ‘i’) %輸入層
%第二層
struct(‘type’, ‘c’, ‘outputmaps’, 9, ‘kernelsize’, 3) %卷積層–相當(dāng)于隱含層節(jié)點(diǎn)為9
% 卷積后的圖像大小為(4-3+1)(4-3+1)=22
struct(‘type’, ‘s’, ‘scale’, 2) %池化層 利用一個(gè)22的池化層把卷積后的圖像降維原來(lái)的一半
% (2/2)(2/2)=1*1
};
%% 訓(xùn)練 CNN
% 參數(shù)設(shè)置
opts.alpha = 0.5;% 學(xué)習(xí)率
opts.batchsize = 20; %批訓(xùn)練大小 batchsize整數(shù)倍必須是總訓(xùn)練樣本大小,選擇更小的批數(shù)據(jù) 這樣計(jì)算的更快,電腦所需內(nèi)存也會(huì)大幅減小
opts.numepochs = 200;%學(xué)習(xí)迭代次數(shù)
cnn = cnnsetup(cnn, train_x, train_y);
cnn = cnntrain(cnn, train_x, train_y, opts);
% % 訓(xùn)練誤差曲線
figure
plot(cnn.rL)
xlabel(‘訓(xùn)練次數(shù)次數(shù)’)
ylabel(‘誤差’)
title(‘訓(xùn)練誤差曲線’)
%% 測(cè)試模型有效性
% load net_cnn
% 訓(xùn)練集
% [er1, bad1 , a1, h1] = cnntest(cnn, train_x, train_y);
% h1=(mapminmax(‘reverse’,h1,outputps));
% a1=(mapminmax(‘reverse’,a1,outputps));
% disp(‘展示CNN訓(xùn)練集精度’)
% figure
% plot(h1,‘r-o’)
% hold on
% plot(a1,‘k–')
% legend(‘預(yù)測(cè)輸出’,‘期望輸出’)
% xlabel(‘樣本數(shù)/個(gè)’)
% ylabel(‘標(biāo)簽類別’)
% title(‘CNN網(wǎng)絡(luò)輸出與期望輸出對(duì)比–訓(xùn)練集’)
% 測(cè)試集
[er2, bad2 , a2, h2] = cnntest(cnn, test_x, test_y);
% disp(‘展示CNN測(cè)試集精度’)
[~,h2]=max(mapminmax(‘reverse’,h2,outputps));
[~,a2]=max(mapminmax(‘reverse’,a2,outputps));
[a2,mx] = sort(a2);
h2 = h2(mx);
figure
plot(a2(1,:),'r-’)
hold on
plot(h2(1,:),‘b-o’)
hold off
legend(‘期望輸出’,‘預(yù)測(cè)輸出’)
xlabel(‘樣本’)
ylabel(‘PPX’)
title(‘CNN網(wǎng)絡(luò)輸出與期望輸出對(duì)比–測(cè)試集’)
figure
plot(er2(1,:),‘k-*’)
ylabel(‘PPX誤差’)
zhunquelv = sum(a2==h2)/length(h2)
function net = cnntrain(net, x, y, opts)
m = size(x, 3);
numbatches = m / opts.batchsize;
if rem(numbatches, 1) ~= 0
error(‘numbatches not integer’);
end
net.rL = [];
for i = 1 : opts.numepochs
disp(['epoch ' num2str(i) '/' num2str(opts.numepochs)]);tic;kk = randperm(m);for l = 1 : numbatchesbatch_x = x(:, :, kk((l - 1) * opts.batchsize + 1 : l * opts.batchsize));batch_y = y(:, kk((l - 1) * opts.batchsize + 1 : l * opts.batchsize));net = cnnff(net, batch_x);net = cnnbp(net, batch_y);net = cnnapplygrads(net, opts);if isempty(net.rL)net.rL(1) = net.L;endnet.rL(end + 1) = 0.85 * net.rL(end) + 0.15 * net.L;endtoc;
end
end
function [er, aa, h,y] = cnntest(net, x, y1)%,outputps,outputps
% feedforward
an = cnnff(net, x);
% h = mapminmax(‘reverse’,an.o,outputps);
% y = mapminmax(‘reverse’,y1,outputps);
h = an.o;
y = y1;
er = h-y;
aa = sum(sum(abs(er./h)))/(size(er,1)*size(er,2));
end
效果圖
結(jié)果分析
從效果圖上看,CNN卷積神經(jīng)網(wǎng)絡(luò)分類準(zhǔn)確率可達(dá)到百分子80以上。
展望
CNN是一種深度信念網(wǎng)絡(luò),優(yōu)點(diǎn)在可以處理大輸入數(shù)據(jù),能訓(xùn)練中自動(dòng)降維,訓(xùn)練的過(guò)程就是降維的過(guò)程,缺點(diǎn)是擬合逼近能力不強(qiáng),收斂面比較平滑,基于這些,可以和其他擬合能力強(qiáng)的神經(jīng)網(wǎng)絡(luò)結(jié)合,比如極限學(xué)習(xí)機(jī),RBF等,結(jié)合后的神經(jīng)網(wǎng)絡(luò),即可處理大輸入數(shù)據(jù),又具有無(wú)限逼近的能力