此算法構造分類器的過程就是構造一個樣本集。根據樣本集進行分類。
一、分類原理:
(一)如何分類呢?
①要分類的圖片爲x
②得到圖片x的特徵向量
③得到樣本集中每個樣本的特徵向量。對每個類的特徵向量加和取平均得到每個類別的樣本平均。
④圖片x的特徵向量跟哪個樣本平均距離近,則說明該圖片與哪個類別更相似,則其屬於哪個類別。
(二)舉個例子:
我們需要對紫色的變體五角星進行分類,由於它與紅點平均樣本更相近,則將它分到五角星類別中。
二、如何構造存儲樣本
樣本集中容納的樣本數是一個定值K。當前類別數爲t。每個類別可以存儲的樣本數量則爲K/t,結果進行四捨五入,取整數。每當增加新的類別時,都會重新構造樣本集。分兩種情況,對於新增類別需要在樣本集中添加k/t個樣本。對於舊類別,需要再樣本集中減少樣本數量到k/t個。
(一)爲新增類別在樣本集中添加k/t個樣本:
1.用最近的數據表示模型求得新增類別中每個樣本的向量。
2.接下來就是得到m=k/t個有序的樣本。
m個樣本並不是越靠近樣本均值的排在前面。這樣可能存在一個問題,因爲以後我們需要用m個樣本的均值作爲整個類別的均值。並且m的值是越來越小的。很有可能m個接近樣本均值的樣本偏向一側,這樣,m個樣本取平均值則與樣本均值相差甚遠。
m個樣本應該是一個一個增加,每增加一個,例如增加的是第k個樣本,則保證前k個樣本的平均值與樣本均值距離最近,這樣每增加一個樣本都可以保證加和取平均與樣本均值距離最近。所以就算之後每個類都會動態的減少存儲樣本,剩下的樣本向量的平均值也可以代表樣本均值。
(二)爲每個舊類別在樣本集中較少樣本數量到m=k/t個:
在每個舊類別存儲樣本中取前m個。這m個加和取平均也可很好地代表該類的樣本均值。
三、如何獲得某圖片的向量
(一)得到數據表示所用網絡:cnn網絡。
隱層:幾層的cnn網絡隱層用什麼層都無所謂,
輸出層:神經元與類別個數相同,每個神經元用sigmoid函數作爲激活函數。
(二)得到圖片向量的流程:
1.將存儲的數據集和新增類別的數據集合並形成一個包含新舊所有類別的新的數據集。
2.每個舊類的樣本x_i輸入到舊模型中得到輸出q_i,備用。
3.損失函數:計算輸出層每個神經元sigmoid函數損失之和。新類別神經元與舊類別神經元的損失函數計算稍有差別,
(1)新類別神經元的輸出越接近標籤的值(0或1)損失值越小,所以新類別神經元的損失函 數爲Cost(g(x_i), y_i)
(2)而舊類別神經元的輸出越接近該樣本在舊模型中的輸出越好,所以舊類別神經元的損失函數爲Cost(g(x_i), q_i)。此損失稱爲蒸餾損失。
四、補充
(一)爲何要用蒸餾損失?
在舊類別上,儘可能使舊類別樣本在新模型的輸出接近於在舊模型中的輸出。從而達到新模型汲取舊模型的知識的目的,減弱對舊類別分類的遺忘。
(二)爲何在舊類別上,標籤用q_i 和不用y_i?
如果用y_i就相當於用新的數據集重新訓練了一個新模型。與舊模型完全無關。由於舊類別中樣本數據在減少,所以新模型在舊類上的訓練會隨着類別個數的增加而越來越不充分。會造成欠擬合。而如果儘可能的保持新舊模型在舊樣本的輸出相近,可以減弱這個問題。畢竟就舊模型對舊類別的訓練比新模型充分。
可以在我的csdn中找到論文文檔。名稱爲論文名稱。