课程资源:CS231n Convolutional Neural Networks for Visual Recognition
作业一:CS231n Convolutional Neural Networks for Visual Recognition
目录
最简单的线性分类器
1. 线性分类器是最简单的参数模型之一
2. 函数解释
3. 简单线性分类器思想(模板匹配思想)
模板匹配
权重矩阵的可视化结果 (线性分类器缺陷)
4. 线性分类器的几何表示形式
5. 简化参数(合并W和b)
6. 图像数据预处理
最简单的线性分类器 1. 线性分类器是最简单的参数模型之一
- x:输入参数,32*32*3的数组,32是像素点的位置,3是RGB通道对应的三个值
- W:权重
- 输出是10个类型分别对应的分数,如输入是一只猫,那么输出的对应猫的评分就会比较大
- 在参数模型中,我们要做的工作是总结我们对训练数据的认识并且把他们都运用在得出参数W中。在测试时,我们不再需要输入实际的训练数据,而是只需要得知f函数,和输入需要测试的图像,就可以得出结果,效率大大提升
函数模型: f(x,W) = Wx + b
- 输入:32*32*3的三维数组,我们把它拉长为一个3072*1的列矩阵。
- 我们想要得到的是10个类的得分,即输出需要是一个10*1的向量,因此根据矩阵的乘法规则,我们需要将W设置成10*3072的矩阵,因此10*3072*3072*1即可得到10*1的输出矩阵。
- 我们会在Wx后面在偏差项bias(偏好值),bias也是10*1的向量。
- bias偏差项:设置偏好值,如果你更希望某一类图片被识别出来,那么就设置该类别的bias大一些,比如训练集中猫的图片比狗多,那猫的bias就设置的比狗大。
- 一个权重矩阵相当于10个类的单独的分类器,分别代表着权重矩阵的每一行。
- 线性分类器计算一个类的分数是所有3个颜色通道的所有像素值的加权和。
例子:输入图像为4个像素,识别范围有3个类(猫、狗和船)
输入x:把2*2的输入拉伸为一个4*1的列向量,
输出:3*1矩阵,设置W为3*4的矩阵,再加上3*1的bias,最终得到3个类的分别得分
可以看出这个权重矩阵的效果并不好,因为cat的得分很低,相反,dog的得分最高
3. 简单线性分类器思想(模板匹配思想) 模板匹配简单线性分类器是一种模板匹配的思想(template matching)
Interpretation of linear classifiers as template matching. Another interpretation for the weights W is that each row of W corresponds to a template (or sometimes also called a prototype) for one of the classes. The score of each class for an image is then obtained by comparing each template with the image using an inner product (or dot product) one by one to find the one that “fits” best. With this terminology, the linear classifier is doing template matching, where the templates are learned. Another way to think of it is that we are still effectively doing Nearest Neighbor, but instead of having thousands of training images we are only using a single image per class (although we will learn it, and it does not necessarily have to be one of the images in the training set), and we use the (negative) inner product as the distance instead of the L1 or L2 distance.
权重矩阵W的每一行都对应着识别范围中每一个类的对应模板,而每一类的分数就是通过输入图像与每一个模板依次做点乘而获得的。而线性分类器中的模板是通过学习而获得的。
权重矩阵的可视化结果 (线性分类器缺陷)在CIFAR-10数据集中有10个类,根据我们已经训练好的一个线性分类器,我们可以把权重矩阵的每一行拿出来,对其进行可视化分析,可以得到10张对应每个类别最强特征的图像。
可以发现,在ship类中,蓝色像素点较多,因此在进行分类时,船的模板会相应给在蓝色背景里的船一个较高的分数。
然而观察马的类模板图片时,我们可以看到模板中的马有两个头,左右边都有一个头,说明该模板把马的不同方向的图片合并成了一个模板;再看汽车类模板图,可以看到最终表现出的车的颜色是红色,说明在dataset中红颜色的车占比重大,那么使用该模板进行识别时,别的颜色的车可能就没法被识别出来。
因此线性分类器在模板的提取方面是有缺陷的,幸运的是卷积神经网络等更复杂的模型可以解决该问题。展望未来,神经网络将能够在其隐藏层中开发中间神经元,以检测特定的汽车类型(例如绿色汽车朝左、蓝色汽车朝前等),而下一层的神经元可以将这些神经元结合起来通过各个汽车检测器的加权和来获得更准确的汽车分数。
4. 线性分类器的几何表示形式线性分类器的工作就是尝试把数据集中的每一类图像都使用一条线将其划归在一块特定的区域中。如下图所示。
- 每个类的得分函数F就是上图中的每一个不同颜色的线,如红色代表汽车分类器,蓝色代表飞机分类器等。红线显示空间中汽车类得分为零的所有点。红色箭头表示增加的方向,因此红线右侧的所有点都有正(并且线性增加)分数,而左侧所有点都有负(并且线性减少)分数。
- W权值矩阵的每一行每一行WW是其中一个类的分类器。这些数字的几何解释是,当我们更改WW,像素空间中对应的线会向不同方向旋转。
- b,允许我们的分类器移动这些行。特别要注意,如果没有偏置项,当x=0时无论权重如何,总是会给出零分,因此所有线都将被迫穿过原点。
可以把W和b合并成一个矩阵,比如在CIFAR-10数据集中,输入的3072*1的向量要变成3073*1,多的一维为常量1,因为权值矩阵变成了10*3703,前3702列是W,最后一列是b的列矩阵。
6. 图像数据预处理在上面的示例中,我们使用了原始像素值(范围为 [0…255])。在机器学习中,总是对输入特征执行归一化是一种非常常见的做法(在图像的情况下,每个像素都被认为是一个特征)。特别是,通过从每个特征中减去平均值来使数据居中是很重要的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)