CS231n学习笔记
图像分类基础知识
-
深度学习算法大概总结为两个API,一个train函数,一个predict函数。
def train(): #Memorize training data def predict(): #
-
给出两幅图片如何进行比较,其中最简单的一种方法是 L 1 L_1 L1距离,也成为曼哈顿距离。像素之间做差后的绝对值求和。
L 1 d i s t a n c e : d 1 ( I 1 , I 2 ) = ∑ p ∣ I 1 p − I 2 p ∣ L_1 \quad distance: \quad d_1(I_1,I_2)=\sum_p \mid I^p_1-I^p_2 \mid L1distance:d1(I1,I2)=p∑∣I1p−I2p∣
这也是K最近邻算法,它的复杂度: T r a i n : O ( 1 ) P r e d i c t : O ( N ) Train: \quad O(1) \quad Predict: \quad O(N) Train:O(1)Predict:O(N)
另一种方法是 L 2 L_2 L2距离,也称为欧式距离,取像素插值平方和的平方根。
L 2 d i s t a n c e : d 2 ( I 1 , I 2 ) = ∑ p ( I 1 p − I 2 p ) 2 L2 \quad distance: \quad d_2(I_1,I_2)=\sqrt{\sum_p(I^p_1-I^p_2)^2} L2distance:d2(I1,I2)=p∑(I1p−I2p)2
不同的距离度量,会在你的预测空间里,对底层的几何或拓扑结构做出不同的假设。
L 2 L_2 L2距离和 L 1 L_1 L1距离都不适合用来衡量图像的相似性,因为即使这个图像Boxed或者Shifted,距离还是一样的。
究竟如何区别图像中的不同呢?
Linear Classification
权重矩阵的每一行就是对该类的权重值。将图像的pixels矩阵拉为一个列向量。bias也是一个列向量,对每一个类的偏置。
可以将权重矩阵中的每一行理解为对该类的模板,通过这个模板与图像点积计算得到像素值。(也就是说这一行可以再转换为图像)
线性分类器的问题是,每一个类只能学习一个模板.
todo:[07] 3 损失函数和优化介绍,线性分类和k最近邻的作业还没有做