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

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

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

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

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

 

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

    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ù)的類型

 

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

 

接下來需要給ann提供一個樣例的權重向量Mat weight,它標記的是訓練樣例的權重,這里都初始化為1:

Mat weight;

 weight.ones(1,25,CV_32FC1);

 

接下來可以做訓練了:

ann.train(train,label,weight);

訓練結束后用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)絡的訓練

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

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

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

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

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

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

一個nSample*nClass列的矩陣,每一行表示一個樣本的預期輸出結果,該樣本所屬的那類對應的列設置為1,其他都為0。

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

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

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

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

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

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

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

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

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


Notes de version

Entrées populaires