亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

opencv BP神經(jīng)網(wǎng)絡(luò)使用過程

Original 2016-11-10 14:14:52 750
abstract: 1.OpenCV中的神經(jīng)網(wǎng)絡(luò)OpenCV中封裝了類CvANN_MLP,因而神經(jīng)網(wǎng)絡(luò)利用很方便。 首先構(gòu)建一個網(wǎng)絡(luò)模型:    CvANN_MLP ann;    Mat structure(1,3,CV_32SC1);    structure.at<uchar>(0) = 10;   

 1.OpenCV中的神經(jīng)網(wǎng)絡(luò)

OpenCV中封裝了類CvANN_MLP,因而神經(jīng)網(wǎng)絡(luò)利用很方便。

 

首先構(gòu)建一個網(wǎng)絡(luò)模型:

    CvANN_MLP ann;

    Mat structure(1,3,CV_32SC1);

    structure.at<uchar>(0) = 10;

    structure.at<uchar>(0) = 4;

    structure.at<uchar>(0) = 2;  // structure中表示每一層中神經(jīng)元數(shù)目

    ann.create(structure,CvANN_MLP::SIGMOID_SYM,1,1);  // 很明顯第二個參數(shù)選擇的是激活函數(shù)的類型

 

然后需要對訓(xùn)練數(shù)據(jù)放在兩個Mat結(jié)構(gòu)中。第一個是存儲訓(xùn)練數(shù)據(jù)的Mat train,第二個是存儲類別的Mat label。其中,train的每一行代表一個訓(xùn)練樣例,label的對應(yīng)的一行是訓(xùn)練樣例的類別。比如有25個屬于7個類別的訓(xùn)練樣例,每個樣例為16維向量。則train結(jié)構(gòu)為25*16,label結(jié)構(gòu)為25*7。需要解釋的是類別數(shù)據(jù),label中一行表示樣例所處類別,如果屬于第一類則為(1,0,0,0,0,0,0),第二類為(0,1,0,0,0,0,0)...

 

接下來需要給ann提供一個樣例的權(quán)重向量Mat weight,它標(biāo)記的是訓(xùn)練樣例的權(quán)重,這里都初始化為1:

Mat weight;

 weight.ones(1,25,CV_32FC1);

 

接下來可以做訓(xùn)練了:

ann.train(train,label,weight);

訓(xùn)練結(jié)束后用ann來做分類,輸入為Mat testSample,testSample為1*16的向量,輸出為Mat output,output為1*7向量:

ann.predict(testSample,output);

最后找到output中的最大值就知道所屬類別maxPos了:

int maxPos;

double maxVal;

minMaxLoc(output,0,&maxVal,0,&maxPos);

 

2.神經(jīng)網(wǎng)絡(luò)的訓(xùn)練

int CvANN_MLP::train(constMat& inputs, constMat& outputs, 

constMat& sampleWeights, constMat& sampleIdx=Mat(), 

CvANN_MLP_TrainParams params=CvANN_MLP_TrainParams(), intflags=0 );

1) inputs:輸入矩陣。它存儲了所有訓(xùn)練樣本的特征。假設(shè)所有樣本總數(shù)為nSamples,而我們提取的特征維數(shù)為ndims,

則inputs是一個nSamples?ndims的矩陣,每個樣本的特征占一行。

2) outputs:輸出矩陣。我們實際在訓(xùn)練中,我們知道每個樣本所屬的種類,假設(shè)一共有nClass類。那么我們將outputs設(shè)置為

一個nSample*nClass列的矩陣,每一行表示一個樣本的預(yù)期輸出結(jié)果,該樣本所屬的那類對應(yīng)的列設(shè)置為1,其他都為0。

比如我們需要識別0-9這10個數(shù)字,則總的類數(shù)為10類,那么樣本數(shù)字“3”的預(yù)期輸出為[0,0,1,0,0,0,0,0,0,0];

3) sampleWeights:一個在使用RPROP方法訓(xùn)練時才需要的數(shù)據(jù),所以這里我們不設(shè)置,直接設(shè)置為Mat()即可。

4) sampleIdx:相當(dāng)于一個遮罩,它指定哪些行的數(shù)據(jù)參與訓(xùn)練。如果設(shè)置為Mat(),則所有行都參與。

5) params:這個在剛才已經(jīng)說過了,是訓(xùn)練相關(guān)的參數(shù)。

3.神經(jīng)網(wǎng)絡(luò)的測試

float CvANN_MLP::predict(constMat&inputs,Mat&outputs)

圖像進(jìn)行特征提取,把它保存在inputs里,通過調(diào)用predict函數(shù),我們得到一個輸出向量,它是一個1*nClass的行向量,

其中每一列說明它與該類的相似程度(0-1之間),也可以說是置信度。我們只用對output求一個最大值,就可得到結(jié)果。

這個函數(shù)的返回值是一個無用的float值,可以忽略。


Release Notes

Popular Entries