cs231n lecture2 image classification

1、图片分类若采用最近邻法

 1 import numpy as np
 2 
 3 class NearestNeighbor:
 4     def _init_(self):
 5         pass
 6   
 7     def train(self, X, y):
 8         self.Xtr = X
 9         self.ytr = y
10   
11     def predict(self, X):
12         num_test = X.shape[0]
13         Y_pred = np.zeros(num_test, dtype = self.ytr.dtype)
14     
15         for i in range(num_test):
16             distances = np.sum(np.abs(self.Xtr - X[i, :]), axis = 1)
17             min_index = np.argmin(distances)
18             Y_pred[i] = self.ytr[min_index]
19     
20     return Y_pred

train函数时间复杂度为O(1),test函数时间复杂度为O(n),n为训练集大小。

训练时间短,但测试时间过长。

一般最好是训练时间较长,测试时间短,如CNN。

2、超参数:不是学习到的参数而是自己人工设置的参数。

如K近邻算法中的K值和距离度量算法的选择。

3、数据集划分:

划分为训练集、验证集、测试集。验证集用来选择超参数,只在测试集上测试一次。

当数据集比较小时,可采用k折交叉验证的方法,即将数据集划分为k份,其中k - 1份作为训练集,剩下的1份作为验证集,取k份数据集分别作为验证集的结果的平均值作为最终结果。

然而由于交叉验证计算代价高,在实践中使用较少。

4、KNN(K最近邻)优缺点:

当特征个数较少时适合用。另外可通过kd树、k均值等方法减少时间复杂度。

 

 

另外通过L2距离来比较图片是和人类直觉不同的,如上图中,原始图片分别经过平移、遮挡、变色,但得到的图片和原始图片的L2距离相同,

这和人类直觉显然不符。

 

 

在上面的图片中,相邻的图片L2距离较小,可以发现一些背景相似的图片距离较小,相对于主体,背景对类别的影响更大。

posted @ 2019-08-04 22:28  bloglxc  阅读(115)  评论(0编辑  收藏  举报