Featured image of post CS231 第二讲 图像分类

CS231 第二讲 图像分类

cs231n note

开始学cs231n了,期望是一周3-4节,尽量4周完成掉

课程主页:https://cs231n.stanford.edu/

作业:https://cs231n.stanford.edu/schedule.html

图像分类

图像通常由数据矩阵定义,更一般地说是数据张量,识别图像对于机器来说是个很大的挑战,举个例子,人类不管从什么角度看一个物体他都是一样的,但是当一个摄像机对准一个物体并转动,像素值实时都在改变,除此之外,光照,物体遮挡等等对于图像的识别来说都是挑战

机器学习采用了数据驱动的方法:

  • 收集图像及其标签的数据集
  • 使用机器学习算法训练分类器
  • 在新图像上评估分类器

下面是分别对应步骤2和3的接口

Nearest Neighbor Classifier

设定一个距离函数,对于一对图像(query data和training data),返回一个定义两者相似度的值

下面是两种常见的计算距离的方式

首先是L1距离,定义为两个图像所有像素差绝对值的总和

不过我们不难发现,训练函数是$O(1)$的,而预测函数是$O(n)$的,这并不是我们想要的

因此我们把Nearest Neighbor自然推广到k-Nearest Neighbor,k值该如何选择才比较合适,以及距离函数该如何选择,这两个量就被称作超参数,也就是需要决策的变量Ruhr设置超参数有很多办法,第一种方法是把部分训练数据作为验证集,在训练集上训练模型,然后通过验证集的效果来选择超参数,然后用超参数对测试集进行结果复现,并在测试集验证

更好的方法是用交叉验证设置超参数,把训练数据分成若干分区,然后每个分区轮流作为验证集,在一组数据上训练数据然后再下一组数据评估模型,迭代,最后取结果的评估值作为结果

在实际中,k Nearest Neighbor从来不用,首先因为效率太低,其次它的距离是按照每个像素点之间来计算的,因此很容易识别错误,例如把颜色相近的猫识别成老虎,亦或者当有物体遮挡的时候,你去计算他的L2距离是相等的,但是实际上差别却很大,最后,当数据的维度很大的时候,计算会非常的慢

线性分类器

线性分类器就是给定一张图片,转换成向量然后计算

$$ f(x,W)=Wx + b\tag{1} $$

这里输出结果是10维向量,然后根据分量决定图片属于哪一类

但是线性分类器并不是所有东西都能解决(就比如上图,根据结果图片是狗,😓),对于无法分类大量分离的数据实例就无法解决

使用 Hugo 构建
主题 StackJimmy 设计