国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

opencv BP神經網絡使用過程

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

 1.OpenCV中的神經網絡

OpenCV中封裝了類CvANN_MLP,因而神經網絡利用很方便。

 

首先構建一個網絡模型:

    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中表示每一層中神經元數目

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

 

然后需要對訓練數據放在兩個Mat結構中。第一個是存儲訓練數據的Mat train,第二個是存儲類別的Mat label。其中,train的每一行代表一個訓練樣例,label的對應的一行是訓練樣例的類別。比如有25個屬于7個類別的訓練樣例,每個樣例為16維向量。則train結構為25*16,label結構為25*7。需要解釋的是類別數據,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.神經網絡的訓練

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

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

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

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

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

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

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

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

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

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

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

3.神經網絡的測試

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

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

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

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


Release Notes

Popular Entries