新手上路之opencv神經網路有監督學習分類

2021-06-25 22:05:34 字數 1494 閱讀 4325

水平有限難免錯誤,批判性**。

神經網路的理論太多了,下面給個鏈結大家可以去看下:

原理能懂當然好了,其實不懂也不影響使用,只要明白神經網路的基礎結構就行了。下面來說說opencv裡面使用神經網路需要注意的地方。

第一步是訓練

神經網路和svm的不同是需要在呼叫train方法之前建立結構。即有多少層,每層有多少神經元。建立方法如下:

int classlablecount=5;

mat layersizes=(mat_(1,3) 《其中feature_vec_mat是mat結構,他的rows表示總共的訓練樣本,cols表示訓練樣本的維度,classlablecount表示需要分類數量,上面方法表示神經網路有三層,輸入層有feature_vec_mat.cols維,隱藏層有300個神經元,輸出層有5個維度。這樣訓練好的神經網路的引數大有feature_vec_mat.cols*300這麼多個。上面如果寫成

mat layersizes=(mat_(1,3) <<2000,1000,1000,5);

這樣表示有4層,輸入層,隱藏層,隱藏層,輸出層。需要維護的權值就有2000*1000*1000這麼多。不過不用擔心,有個模型叫做卷積神經網路,它的共享權值可以解決這些問題。遺憾的是opencv還沒有引入,對於新手來說需要等等再研究。

神經網在訓練的時候不是像一般的方法在train方法的時候給標籤,在predict返回標籤。神經網路在訓練的時候是給的向量,返回的也是向量。

cvann_mlp mlp;

mlp.train(feature_vec_mat,label_mat,mat(),mat(),params);

這裡的label_mat不是n*1而是n*classcout維度的,例如feature_vec_mat第一行的向量對應的是標籤為3的類,一共有5類,label_mat第一行就應該是0 0 1 0 0。

params一般使用opencv文件中推薦的引數

cvann_mlp_trainparams params;

params.term_crit=cvtermcriteria( cv_termcrit_iter + cv_termcrit_eps, 1000, 0.01 );

params.train_method=cvann_mlp_trainparams::rprop;

params.bp_dw_scale = 0.1;

params.bp_moment_scale = 0.1;

params.rp_dw0 = 0.1; 

params.rp_dw_plus = 1.2;

params.rp_dw_minus = 0.5;

params.rp_dw_min = flt_epsilon; 

params.rp_dw_max = 50.;

第二步是檢測

mlp.predict(sample,res);

兩個引數都是mat,其中res返回的是乙個1*classcout維度的mat,找到中間最大的數,就代表分類結果。



新手上路之c指標理解 筆記

曾經指標讓我如夢如幻,指標如霧啊,很多人都被折磨的要死不活的,問老師吧,你又不是計算機的,曉得那麼清楚幹嘛,看了一些網上大牛們和老師們的高見,分享一下心得,有錯誤的地方,還請多多指正.為啥需要指標呢,我不用它,照樣可以用其他方式實現,感覺用的還那麼方便易懂.指標的好處在 呢?早期cpu遠沒有如今的強...

新手上路之Hibernate(5) 繼承對映

之前的幾篇文章主要介紹的是關係對映。之所以用好幾篇的文章來介紹關係對映,其重要性與常用行可見一斑。還有一種對映,也就是今天要介紹的 繼承對映,也是很重要的一種對映模式。繼承對映的實現有三種策略 1 單錶繼承。每棵類繼承樹使用乙個表。2 具體表繼承。每個子類乙個表。3 類表繼承。每個具體類乙個表。下面...

神經網路學習之 Hopfield神經網路

1982年,美國加州理工學院的優秀物理學家hopfield提出了hopfield神經網路。hopfield神經網路引用了物理力學的分析方法,把網路作為一種動態系統並研究這種網路動態系統的穩定性。dhnn 離散型hopfield神經網路 這是一種單層全反饋網路,共有n個神經元。其特點是任一神經元的輸出...