cs231n的第一部分主要为knn,svm,softmax以及two_layer_network,作为入门,主要难点在于损失函数构建及梯度求导。
算法 | 代码 | 重难点 |
---|---|---|
KNN | cs231n/classifiers/k_nearest_neighbor.py \qquad knn.ipynb | noloop求距离 交叉验证 |
SVM | cs231n/classifiers/linear_svm.py | 求导 |
softmax | cs231n/classifiers/softmax.py | 求导 |
neural_net | cs231n/classifiers/neural_net.py | 求导 |
KNN(k-Nearest Neighbor)
KNN算法的步骤如下:
- 训练时,分类器读入训练集并保存
- 测试时,kNN通过比较所有训练图像,然后传递k个最相似的训练实例的标签,哪类标签最多,测试图像就属于此类。
其中,求两图像之间的相似度有L1和L2两种算法: d 1 ( I 1 , I 2 ) = ∑ p ∣ I 1 p − I 2 p ∣ d 2 ( I 1 , I 2 ) = ∑ p ( I 1 p − I 2 p ) 2 d _ { 1 } \left( I _ { 1 } , I _ { 2 } \right) = \sum _ { p } \left| I _ { 1 } ^ { p } - I _ { 2 } ^ { p } \right| \qquad d _ { 2 } \left( I _ { 1 } , I _ { 2 } \right) = \sqrt { \sum _ { p } \left( I _ { 1 } ^ { p } - I _ { 2 } ^ { p } \right) ^ { 2 } } d