斯坦福大学李飞飞团队图像分类课程笔记
斯坦福大學(xué)李飛飛團隊圖像分類課程筆記
Stanford image classification course notes
這是斯坦福CS231n課程圖像分類基礎(chǔ)知識。
目標(biāo):這一節(jié)先介紹圖像分類基本特征。
圖像分類,簡單的來說其實就是一個輸入圖像,輸出對該圖像內(nèi)容分類的描述結(jié)果的問題。圖像分類是計算機視覺領(lǐng)域核心知識之一,實際應(yīng)用廣泛。圖像分類的傳統(tǒng)方法是特征描述及檢測,這可能對于一些簡單的圖像分類是非常有效,但現(xiàn)實生活中的實際情況非常復(fù)雜,傳統(tǒng)的分類方法效果較差。其主要任務(wù)是給定一個輸入圖片,在一定的標(biāo)簽幾個中,輸出該輸入對應(yīng)的集合中其中一類的標(biāo)簽。
舉例:在下面貓的圖片中,圖片被表示成一個3維數(shù)字矩陣(RGB彩色圖片)。其中,圖像分類的目標(biāo)就是將這組數(shù)字矩陣轉(zhuǎn)換到一個單獨的標(biāo)簽(如“Cat”),主要任務(wù)是對于一個給定的圖片,預(yù)測其類別標(biāo)簽。
困難&挑戰(zhàn):對于人類來說,識別貓已經(jīng)是特別簡單的事情,因為之前就大量接觸貓這類圖像,對其獨特的特征有深入的認(rèn)識,所以人類識別貓就是一個簡單的任務(wù),但是對于計算機,那就難于上青天。
在下面,列舉了至今計算機視覺領(lǐng)域的棘手問題,也是現(xiàn)在亟待需解決的困難:
·
剛體&非剛體的變化:不同類型其變化都不一樣;
·
多視角:收集同一個物體圖像,獲取的角度是多變的;
·
多尺度:在實際應(yīng)用中,很多物體的尺寸都是千變?nèi)f化;
·
隨機遮擋:圖片中的目標(biāo)可能被隨意擋住。有時候只有小部分是可見的,學(xué)習(xí)特征較偏面;
·
光照條件:在像素層面上,光照的影響非常大;
·
類內(nèi)差異:一類物體的個體之間有許多不同的對象,每個都有自己的外形。
數(shù)據(jù)驅(qū)動方法:如何寫一個圖像分類的算法呢?怎么寫一個從圖像中認(rèn)出貓的算法?
因此,采取的方法和教小孩兒看圖識物類似:給模型很多圖像數(shù)據(jù),讓其不斷去學(xué)習(xí),學(xué)習(xí)到每個類的特征。這就是數(shù)據(jù)驅(qū)動方法!
既然第一步需要將已經(jīng)做好分類標(biāo)注的圖片作為訓(xùn)練集,下面就看看訓(xùn)練數(shù)據(jù)集長什么樣?如下圖:
圖像分類流程。在課程視頻中,圖像分類就是輸入元素為像素值的數(shù)組(灰色圖片和彩色圖片維度不一樣),然后給它分配一個分類標(biāo)簽。完整流程如下:
·
輸入:輸入是包含N個圖像的集合,每個圖像的標(biāo)簽是K種分類標(biāo)簽中的一種。這個集合稱為訓(xùn)練集。
·
訓(xùn)練:該階段的任務(wù)是使用訓(xùn)練集來學(xué)習(xí)每個類到底長什么樣,也就是學(xué)習(xí)每個類別獨特的特征。一般該步驟叫做訓(xùn)練分類器或者訓(xùn)練一個分類模型。
·
測試:讓分類器來預(yù)測它未曾見過的圖像的分類標(biāo)簽,并以此來評價分類器的質(zhì)量。會把分類器預(yù)測的標(biāo)簽和圖像真正的分類標(biāo)簽對比。毫無疑問,分類器預(yù)測的分類標(biāo)簽和圖像真正的分類標(biāo)簽如果一致,那就是好事,這樣的情況越多越好。
Nearest Neighbor分類器
實現(xiàn)一個Nearest
Neighbor分類器。雖然這個分類器和卷積神經(jīng)網(wǎng)絡(luò)沒有任何關(guān)系,實際中也極少使用,但通過實現(xiàn)它,可以讓讀者對于解決圖像分類問題的方法有個基本的認(rèn)識。
圖像分類數(shù)據(jù)集:CIFAR-10。一個非常流行的圖像分類數(shù)據(jù)集是CIFAR-10。這個數(shù)據(jù)集包含了60000張32X32的小圖像,一共有10個類別。這60000張圖像被分為包含50000的訓(xùn)練集和包含10000的測試集。在下圖中可以看見10個類的10張隨機圖片。
假設(shè)現(xiàn)在有CIFAR-10的50000張圖片作為訓(xùn)練集,希望將余下的10000作為測試集并給他們打上標(biāo)簽。Nearest Neighbor算法將會拿著測試圖片和訓(xùn)練集中每一張圖片去比較,然后將它認(rèn)為最相似的那個訓(xùn)練集圖片的標(biāo)簽賦給這張測試圖片。上面右邊的圖片就展示了這樣的結(jié)果。請注意上面10個分類中,只有3個是準(zhǔn)確的。比如第8行中,馬頭被分類為一個紅色的跑車,原因在于紅色跑車的黑色背景非常強烈,所以這匹馬就被錯誤分類為跑車了。
那么具體如何比較兩張圖片呢?在本例中,就是比較32x32x3的像素塊。最簡單的方法就是逐個像素比較,最后將差異值全部加起來。換句話說,就是將兩張圖片先轉(zhuǎn)化為兩個向量和,然后計算他們的L1距離:
這里的求和是針對所有的像素。下面是整個比較流程的圖例:
以圖片中的一個顏色通道為例來進行說明。兩張圖片使用L1距離來進行比較。逐個像素求差值,然后將所有差值加起來得到一個數(shù)值。如果兩張圖片一模一樣,那么L1距離為0,但是如果兩張圖片很是不同,那L1值將會非常大。
下面,讓我們看看如何用代碼來實現(xiàn)這個分類器。首先,我們將CIFAR-10的數(shù)據(jù)加載到內(nèi)存中,并分成4個數(shù)組:訓(xùn)練數(shù)據(jù)和標(biāo)簽,測試數(shù)據(jù)和標(biāo)簽。在下面的代碼中,Xtr(大小是50000x32x32x3)存有訓(xùn)練集中所有的圖像,Ytr是對應(yīng)的長度為50000的1維數(shù)組,存有圖像對應(yīng)的分類標(biāo)簽(從0到9):
Xtr, Ytr, Xte,
Yte
load_CIFAR10(‘data/cifar10/’)
a magic function we provide
flatten out all images to be one-dimensional
Xtr_rows = Xtr.reshape(Xtr.shape[0], 32 * 32 * 3) # Xtr_rows
becomes 50000 x 3072
Xte_rows = Xte.reshape(Xte.shape[0], 32 * 32 * 3) # Xte_rows
becomes 10000 x 3072
現(xiàn)在我們得到所有的圖像數(shù)據(jù),并且把他們拉長成為行向量了。接下來展示如何訓(xùn)練并評價一個分類器:
nn = NearestNeighbor()
create a Nearest Neighbor classifier
class
nn.train(Xtr_rows, Ytr) # train the
classifier on the training images and labels
Yte_predict = nn.predict(Xte_rows) # predict labels on the test images
and now print the classification accuracy, which is the average number
of examples that are correctly predicted (i.e. label matches)
print ‘a(chǎn)ccuracy: %f’ % ( np.mean(Yte_predict == Yte) )
作為評價標(biāo)準(zhǔn),常常使用準(zhǔn)確率,它描述了預(yù)測正確的得分。請注意以后實現(xiàn)的所有分類器都需要有這個API:train(X, y)函數(shù)。該函數(shù)使用訓(xùn)練集的數(shù)據(jù)和標(biāo)簽來進行訓(xùn)練。從其內(nèi)部來看,類應(yīng)該實現(xiàn)一些關(guān)于標(biāo)簽和標(biāo)簽如何被預(yù)測的模型。這里還有個predict(X)函數(shù),它的作用是預(yù)測輸入的新數(shù)據(jù)的分類標(biāo)簽。現(xiàn)在還沒介紹分類器的實現(xiàn),下面就是使用L1距離的Nearest Neighbor分類器的實現(xiàn)套路:
import numpy as
np
class NearestNeighbor(object):
def init(self):
pass
def train(self, X, y):
""" X is N x D where each row is an example. Y is
1-dimension of size N “”"
# the nearest neighbor classifier simply remembers all the training dataself.Xtr = Xself.ytr = y
def predict(self, X):
""" X is N x D where each row is an example we wish to
predict label for “”"
num_test = X.shape[0]# lets make sure that the output type matches the input typeYpred = np.zeros(num_test, dtype
=
self.ytr.dtype)
# loop over all test rowsfor i in
xrange(num_test):
# find the nearest training image to the i'th test image# using the L1 distance (sum of absolute value differences)distances = np.sum(np.abs(self.Xtr
X[i,:]),
axis
min_index = np.argmin(distances) # get the index with smallest distanceYpred[i] = self.ytr[min_index]
predict the label of the nearest example
return Ypred
如果用這段代碼跑CIFAR-10,會發(fā)現(xiàn)準(zhǔn)確率能達到38.6%。這比隨機猜測的10%要好,但是比人類識別的水平(據(jù)研究推測是94%)和卷積神經(jīng)網(wǎng)絡(luò)能達到的95%還是差多了。點擊查看基于CIFAR-10數(shù)據(jù)的Kaggle算法競賽排行榜。
距離選擇:計算向量間的距離有很多種方法,另一個常用的方法是L2距離,從幾何學(xué)的角度,可以理解為它在計算兩個向量間的歐式距離。L2距離的公式如下:
換句話說,依舊是在計算像素間的差值,只是先求其平方,然后把這些平方全部加起來,最后對這個和開方。在Numpy中,只需要替換上面代碼中的1行代碼就行:
distances = np.sqrt(np.sum(np.square(self.Xtr - X[i,:]), axis = 1))
注意在這里使用了np.sqrt,但是在實際中可能不用。因為求平方根函數(shù)是一個單調(diào)函數(shù),它對不同距離的絕對值求平方根雖然改變了數(shù)值大小,但依然保持了不同距離大小的順序。所以用不用它,都能夠?qū)ο袼夭町惖拇笮∵M行正確比較。如果在CIFAR-10上面跑這個模型,正確率是35.4%,比剛才低了一點。
L1和L2比較。比較這兩個度量方式是挺有意思的。在面對兩個向量之間的差異時,L2比L1更加不能容忍這些差異。也就是說,相對于1個巨大的差異,L2距離更傾向于接受多個中等程度的差異。L1和L2都是在p-norm常用的特殊形式。
k-Nearest Neighbor分類器
可能注意到了,為什么只用最相似的1張圖片的標(biāo)簽來作為測試圖像的標(biāo)簽?zāi)?#xff1f;這不是很奇怪嗎!是的,使用k-Nearest Neighbor分類器就能做得更好。它的思想很簡單:與其只找最相近的那1個圖片的標(biāo)簽,找最相似的k個圖片的標(biāo)簽,然后讓他們針對測試圖片進行投票,最后把票數(shù)最高的標(biāo)簽作為對測試圖片的預(yù)測。所以當(dāng)k=1的時候,k-Nearest Neighbor分類器就是Nearest Neighbor分類器。從直觀感受上就可以看到,更高的k值可以讓分類的效果更平滑,使得分類器對于異常值更有抵抗力。
上面示例展示了Nearest Neighbor分類器和5-Nearest Neighbor分類器的區(qū)別。例子使用了2維的點來表示,分成3類(紅、藍(lán)和綠)。不同顏色區(qū)域代表的是使用L2距離的分類器的決策邊界。白色的區(qū)域是分類模糊的例子(即圖像與兩個以上的分類標(biāo)簽綁定)。需要注意的是,在NN分類器中,異常的數(shù)據(jù)點(比如:在藍(lán)色區(qū)域中的綠點)制造出一個不正確預(yù)測的孤島。5-NN分類器將這些不規(guī)則都平滑了,使得它針對測試數(shù)據(jù)的泛化(generalization)能力更好(例子中未展示)。注意,5-NN中也存在一些灰色區(qū)域,這些區(qū)域是因為近鄰標(biāo)簽的最高票數(shù)相同導(dǎo)致的(比如:2個鄰居是紅色,2個鄰居是藍(lán)色,還有1個是綠色)。
在實際中,大多使用k-NN分類器。但是k值如何確定呢?
用于超參數(shù)調(diào)優(yōu)的驗證集
在機器學(xué)習(xí)或者深度學(xué)習(xí)領(lǐng)域,參數(shù)和超參數(shù)是一個常見的問題,根據(jù)經(jīng)驗給出了一個很狹隘的區(qū)分這兩種參數(shù)的方法。
參數(shù):就是模型可以根據(jù)數(shù)據(jù)可以自動學(xué)習(xí)出的變量。如:深度學(xué)習(xí)的權(quán)重等;
超參數(shù):就是用來確定模型的一些參數(shù),超參數(shù)不同,模型是不同的(這個模型不同的意思就是有微小的區(qū)別,比如假設(shè)都是CNN模型,如果層數(shù)不同,模型不一樣,雖然都是CNN模型。),超參數(shù)一般就是根據(jù)經(jīng)驗確定的變量。在深度學(xué)習(xí)中,超參數(shù)有:學(xué)習(xí)速率,迭代次數(shù),層數(shù)等等。
在選擇模型算法的同時會有很多選擇,比如KNN中k的選擇等案例。所有這些選擇,被稱為超參數(shù)。一般來說,這些超參數(shù)的設(shè)置或取值是模型訓(xùn)練艱難的過程之一。
主要是通過實驗來決定選擇哪個值。就是這么做的,但這樣做的時候要非常細(xì)心。特別注意:決不能使用測試集來進行調(diào)優(yōu)。如果這樣實施后,會發(fā)現(xiàn)效果特征好,但是算法在實際運行的時候,遇到新來的特征,會發(fā)現(xiàn)效果特別差,遠(yuǎn)遠(yuǎn)低于之前的預(yù)期,這種情況在該領(lǐng)域也有專有的稱呼——過擬合。
所以,最終測試的時候再使用測試集,可以很好地近似度量所設(shè)計的分類器的泛化性能。
測試數(shù)據(jù)只用一次,在模型訓(xùn)練和驗證結(jié)束后,最終才會使用該數(shù)據(jù),主要為了評價模型的好壞。
針對這,其實有很多調(diào)優(yōu)的方法。可以從訓(xùn)練集中取出一部分?jǐn)?shù)據(jù)用來調(diào)優(yōu),稱之為驗證集(validation set)。最后,會作圖分析哪個k值表現(xiàn)最好,然后用這個k值來運行測試集,并作出對算法的評價。
交叉驗證。是用來驗證分類器的性能一種統(tǒng)計分析方法,基本思想是把在某種意義下將原始數(shù)據(jù)(dataset)進行分組,一部分做為訓(xùn)練集(train set),另一部分做為驗證集(validation set),首先用訓(xùn)練集對分類器進行訓(xùn)練,在利用驗證集來測試訓(xùn)練得到的模型(model),以此來做為評價分類器的性能指標(biāo)。常見CV的方法如下:
§
Hold-Out Method
將原始數(shù)據(jù)隨機分為兩組,一組做為訓(xùn)練集,一組做為驗證集,利用訓(xùn)練集訓(xùn)練分類器,然后利用驗證集驗證模型,記錄最后的分類準(zhǔn)確率為此分類器的性能指標(biāo)。此種方法的好處的處理簡單,只需隨機把原始數(shù)據(jù)分為兩組即可,其實嚴(yán)格意義來說Hold-Out Method并不能算是CV,因為這種方法沒有達到交叉的思想,由于是隨機的將原始數(shù)據(jù)分組,所以最后驗證集分類準(zhǔn)確率的高低與原始數(shù)據(jù)的分組有很大的關(guān)
系,所以這種方法得到的結(jié)果其實并不具有說服性。
§
Double Cross
Validation(2-fold Cross
Validation,記為2-CV)
做法是將數(shù)據(jù)集分成兩個相等大小的子集,進行兩回合的分類器訓(xùn)練。在第一回合中,一個子集作為training set,另一個便作為testing set;在第二回合中,則將training set與testing set對換后,再次訓(xùn)練分類器,而其中比較關(guān)心的是兩次testing sets的辨識率。不過在實務(wù)上2-CV并不常用,主要原因是training set樣本數(shù)太少,通常不足以代表母體樣本的分布,導(dǎo)致testing階段辨識率容易出現(xiàn)明顯落差。此外,2-CV中分子集的變異度大,往往無法達到“實 驗過程必須可以被復(fù)制”的要求。
§
K-fold Cross
Validation(K-折交叉驗證,記為K-CV)
將原始數(shù)據(jù)分成K組(一般是均分),將每個子集數(shù)據(jù)分別做一次驗證集,其余的K-1組子集數(shù)據(jù)作為訓(xùn)練集,這樣會得到K個模型,用這K個模型最終的驗證 集的分類準(zhǔn)確率的平均數(shù)作為此K-CV下分類器的性能指標(biāo)。K一般大于等于2,實際操作時一般從3開始取,只有在原始數(shù)據(jù)集合數(shù)據(jù)量小的時候才會嘗試取 2。K-CV可以有效的避免過學(xué)習(xí)以及欠學(xué)習(xí)狀態(tài)的發(fā)生,最后得到的結(jié)果也比較具有說服性。
§
Leave-One-Out Cross
Validation(記為LOO-CV)
如果設(shè)原始數(shù)據(jù)有N個樣本,那么LOO-CV就是N-CV,即每個樣本單獨作為驗證集,其余的N-1個樣本作為訓(xùn)練集,所以LOO-CV會得到N個模 型,用這N個模型最終的驗證集的分類準(zhǔn)確率的平均數(shù)作為此下LOO-CV分類器的性能指標(biāo)。相比于前面的K-CV,LOO-CV有兩個明顯的優(yōu)點:
(1)每一回合中幾乎所有的樣本皆用于訓(xùn)練模型,因此最接近原始樣本的分布,這樣評估所得的結(jié)果比較可靠。
(2)實驗過程中沒有隨機因素會影響實驗數(shù)據(jù),確保實驗過程是可以被復(fù)制的。
但LOO-CV的缺點則是計算成本高,因為需要建立的模型數(shù)量與原始數(shù)據(jù)樣本數(shù)量相同,當(dāng)原始數(shù)據(jù)樣本數(shù)量相當(dāng)多時,LOO-CV在實作上便有困難幾乎就是不顯示,除非每次訓(xùn)練分類器得到模型的速度很快,或是可以用并行化計算減少計算所需的時間。
這就是5份交叉驗證對k值調(diào)參結(jié)果。
實際應(yīng)用。在實際情使用中由于耗時而不選擇交叉驗證。一般直接把訓(xùn)練集按比例分成訓(xùn)練集和驗證集,但這也是根據(jù)具體情況來定的:如果超參數(shù)數(shù)量多,可能就想用更大的驗證集,而驗證集的數(shù)量不夠,那么最好還是用交叉驗證。
常用的數(shù)據(jù)分割模式。給出訓(xùn)練集和測試集后,訓(xùn)練集一般會被均分。這里是分成5份。前面4份用來訓(xùn)練,黃色那份用作驗證集調(diào)優(yōu)。如果采取交叉驗證,那就各份輪流作為驗證集。最后模型訓(xùn)練完畢,超參數(shù)都定好了,讓模型跑一次測試集,以此測試結(jié)果就是模型的評價結(jié)果。
Nearest Neighbor分類器的優(yōu)劣
Nearest Neighbor分類器在某些特定情況(比如數(shù)據(jù)維度較低)下,可能是不錯的選擇。但是在實際的圖像分類工作中很少使用。因為圖像都是高維度數(shù)據(jù),而高維度向量之間的距離通常是反直覺的。下面的圖片展示了基于像素的相似和基于感官的相似是有很大不同的:
在高維數(shù)據(jù)上,基于像素的的距離和感官上的非常不同。上圖中,右邊3張圖片和左邊第1張原始圖片的L2距離是一樣的。很顯然,基于像素比較的相似和感官上以及語義上的相似是不同的。
這里還有個視覺化證據(jù),可以證明使用像素差異來比較圖像是不夠的。z這是一個叫做t-SNE的可視化技術(shù),它將CIFAR-10中的圖片按照二維方式排布,這樣能很好展示圖片之間的像素差異值。在這張圖片中,排列相鄰的圖片L2距離就小。
上圖使用t-SNE的可視化技術(shù)將CIFAR-10的圖片進行了二維排列。排列相近的圖片L2距離小。可以看出,圖片的排列是被背景主導(dǎo)而不是圖片語義內(nèi)容本身主導(dǎo)。
具體說來,這些圖片的排布更像是一種顏色分布函數(shù),或者說是基于背景的,而不是圖片的語義主體。比如,狗的圖片可能和青蛙的圖片非常接近,這是因為兩張圖片都是白色背景。從理想效果上來說,肯定是希望同類的圖片能夠聚集在一起,而不被背景或其他不相關(guān)因素干擾。為了達到這個目的,不能止步于原始像素比較,得繼續(xù)前進。
小結(jié)
簡要說來:
·
介紹了圖像分類問題。在該問題中,給出一個由被標(biāo)注了分類標(biāo)簽的圖像組成的集合,要求算法能預(yù)測沒有標(biāo)簽的圖像的分類標(biāo)簽,并根據(jù)算法預(yù)測準(zhǔn)確率進行評價。
·
介紹了一個簡單的圖像分類器:最近鄰分類器(Nearest Neighbor classifier)。分類器中存在不同的超參數(shù)(比如k值或距離類型的選取),要想選取好的超參數(shù)不是一件輕而易舉的事。
·
選取超參數(shù)的正確方法是:將原始訓(xùn)練集分為訓(xùn)練集和驗證集,在驗證集上嘗試不同的超參數(shù),最后保留表現(xiàn)最好那個。
·
如果訓(xùn)練數(shù)據(jù)量不夠,使用交叉驗證方法,它能幫助在選取最優(yōu)超參數(shù)的時候減少噪音。
·
一旦找到最優(yōu)的超參數(shù),就讓算法以該參數(shù)在測試集跑且只跑一次,并根據(jù)測試結(jié)果評價算法。
·
最近鄰分類器能夠在CIFAR-10上得到將近40%的準(zhǔn)確率。該算法簡單易實現(xiàn),但需要存儲所有訓(xùn)練數(shù)據(jù),并且在測試的時候過于耗費計算能力。
·
最后,知道了僅僅使用L1和L2范數(shù)來進行像素比較是不夠的,圖像更多的是按照背景和顏色被分類,而不是語義主體分身。
在接下來的課程中,將專注于解決這些問題和挑戰(zhàn),并最終能夠得到超過90%準(zhǔn)確率的解決方案。該方案能夠在完成學(xué)習(xí)就丟掉訓(xùn)練集,并在一毫秒之內(nèi)就完成一張圖片的分類。
小結(jié):實際應(yīng)用k-NN
如果希望將k-NN分類器用到實處(最好別用到圖像上,若是僅僅作為練手還可以接受),那么可以按照以下流程:
預(yù)處理的數(shù)據(jù):對數(shù)據(jù)中的特征進行歸一化(normalize),讓其具有零平均值(zero mean)和單位方差(unit variance)。在后面的小節(jié)會討論這些細(xì)節(jié)。本小節(jié)不討論,是因為圖像中的像素都是同質(zhì)的,不會表現(xiàn)出較大的差異分布,也就不需要標(biāo)準(zhǔn)化處理了。
如果數(shù)據(jù)是高維數(shù)據(jù),考慮使用降維方法,比如PCA(wiki ref, CS229ref, blog
ref)或隨機投影。
將數(shù)據(jù)隨機分入訓(xùn)練集和驗證集。按照一般規(guī)律,70%-90% 數(shù)據(jù)作為訓(xùn)練集。這個比例根據(jù)算法中有多少超參數(shù),以及這些超參數(shù)對于算法的預(yù)期影響來決定。如果需要預(yù)測的超參數(shù)很多,那么就應(yīng)該使用更大的驗證集來有效地估計它們。如果擔(dān)心驗證集數(shù)量不夠,那么就嘗試交叉驗證方法。如果計算資源足夠,使用交叉驗證總是更加安全的(份數(shù)越多,效果越好,也更耗費計算資源)。
在驗證集上調(diào)優(yōu),嘗試足夠多的k值,嘗試L1和L2兩種范數(shù)計算方式。
如果分類器跑得太慢,嘗試使用Approximate Nearest Neighbor庫(比如FLANN)來加速這個過程,其代價是降低一些準(zhǔn)確率。
對最優(yōu)的超參數(shù)做記錄。記錄最優(yōu)參數(shù)后,是否應(yīng)該讓使用最優(yōu)參數(shù)的算法在完整的訓(xùn)練集上運行并再次訓(xùn)練呢?因為如果把驗證集重新放回到訓(xùn)練集中(自然訓(xùn)練集的數(shù)據(jù)量就又變大了),有可能最優(yōu)參數(shù)又會有所變化。在實踐中,不要這樣做。千萬不要在最終的分類器中使用驗證集數(shù)據(jù),這樣做會破壞對于最優(yōu)參數(shù)的估計。直接使用測試集來測試用最優(yōu)參數(shù)設(shè)置好的最優(yōu)模型,得到測試集數(shù)據(jù)的分類準(zhǔn)確率,并以此作為的kNN分類器在該數(shù)據(jù)上的性能表現(xiàn)。
總結(jié)
以上是生活随笔為你收集整理的斯坦福大学李飞飞团队图像分类课程笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CVPR目标检测与实例分割算法解析:FC
- 下一篇: 摄像头Camera标定Calibrati