本文共 1588 字,大约阅读时间需要 5 分钟。
课程地址:
http://write.blog.csdn.net/mdeditor 课件地址: http://cs231n.stanford.edu/slides/2017/本节课程内容简介:
图像分类的图像分类对于人来来说是很容易的事情。但是对于机器来说却很困难,这是因为对机器输入一幅图片,它不是看到一幅图像,而是得到一个具有不同数值的巨大矩阵(网络),比如800x800像素的图像,它接受到的是800x800个像素,RGB通道的各个值构成的三维矩阵。根据这个矩阵,机器要输出一个类别,与图像的标签进行对比,相同则分类正确。
(语义差距) 语义上的标签与输入的像素值存在巨大的差别。 有很多因素会导致图像的像素矩阵会完全改变,比如拍照的角度移动一点点,那图像像素矩阵的值都会改变,但这个图像代表的仍然是猫。另外一些因素有光照、不同形态、遮挡、背景干扰、猫的种类不同等。 以上图片的类别都应该输出猫,尽管它们的图像矩阵区别可能很大。 编写分类程序的思想: 最简单的分类器:KNN 在CIFAR-10数据集上训练模型并验证。 KNN的思想是,输入一个图像,找到与它最相似的K个图片集合,然后选择这个图片集合中类别最多的一个类别。那么,图像类别预测的问题就转化为,如何把两幅图像进行比较。这里用的是L1距离,又称曼哈顿距离。 使用python实现这个KNN的程序代码如下: 因为图像的分类过程会与数据集中的每一幅图做比较(曼哈顿距离),假设图像数据集的容量为N,则要计算N次,时间复杂度是O(N).训练时间复杂度是O(1),预测时间复杂度O(N)。 图像分类的速度与数据集的大小成线性函数。(然而我们希望在训练时花费时间没有关系,关键在测试的时候要快啊。) 在实践中,测试时间表现非常重要。 距离矩阵还可以选择L2距离,又名欧几里得距离。 L1取决于你选择的坐标系,如果你改变了坐标系,也会改变两个像素点的L1距离。L2则不论在什么坐标系,都不会改变两个像素点的距离。所以如果你的输入特征,单个的向量有重要的意义,那么选择L1比较合适。如果你不知道各个输入的向量代表什么,那就选择L2。通过选择不同的距离矩阵,我们可以将KNN应用于各种类型的数据,不止向量,不止图像,还可以用于文本等。 KNN的分类效果如下:不同颜色的点为不同类别。
选择超参数的方法: 使用K折来验证模型的性能。 (在深度学习中,K折交叉验证的代价太大了,一般不会这么做。) KNN在图像分类上的表现不佳,且它的距离矩阵(L1 OR L2)计算图像之间的差别都不合适。 比如在上图中显示的,这四幅图像(orginal,shifted,messed up,darkened)的L2距离都相同(刻意制作的),然而KNN无法很好的捕捉图像的这些特征。 神经网络搭建者~底下几层的卷积层,顶层的线性分类器。 对于一个模型,我们输入一幅图像,想要得到一个句子来描述它。 为了达到以上的效果,我们需要让一个卷积神经网络(CNN)“看着”这幅图,然后再让一个循环神经网络(RNN)输出这个描述。然后我们就像搭积木一样,把这些网络结构叠在一起。深度学习就像搭建积木,而线性分类器就是那一个个积木 回到CIFAR-10数据集 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fa1DZEAr-1572932709262)(https://img-blog.csdn.net/20170814155903112?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTlhIWUQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)] 最简单的分类过程: