美文网首页
cs231n assignment1

cs231n assignment1

作者: 没天赋的学琴 | 来源:发表于2020-05-29 22:43 被阅读0次

       cs231n的assignment1主要是通过使用numpy库,来构造三个:KNNMulticlass SVM以及Softmaximage classification pipeline;而且在构造pipeline的同时,尽可能编写出vectorvized的代码。最后还要求实现一个两层神经网络的图像分类器,同样也会涉及如何从图像中提取更高层次的图像特征,来提高分类器的效果。
       在assignment1中使用的是CIFAR-10数据集;CIFAR-10数据集里一共有10类,包含60000张图片,50000张用了训练,10000张作为测试;每张图片的大小为3 x 32 x 32。而assignment1已经提供了数据读取以及预处理的函数(主要读取数据,然后做reshape与transpose处理)。在这次作业中,需要将图片做为向量输入,所以会看到对数据的预处理,是将其flatten()展开成向量。


    KNN(K-NearestNeighbour)

       KNN是机器学习算法中的一种,主要流程:

    1. 将测试集(N_{test}个向量)的数据输入
    2. 计算测试集中各个数据与训练集(N_{train}个向量)中各个数据的距离,得到结果为dist,其大小(N_{test}, N_{train})
    3. dist按行进行从小到大的排序,然后选择排序后的前K列做为候选
    4. 统计K个候选所对应的类别,数量最多的,则为该测试数据所对应的类别
         KNN分类器比较特别的一个地方在于,并不需要对分类器进行训练,只需加载训练数据集合;而在测试阶段,需要计算测试数据与训练数据的距离,因此训练数据必须保存在模型,不能丢弃。而KNN分类器的hyperparameter也仅有“K”,因此在调参方面来看,相对方便。
         在assignment1中,计算dist矩阵时的实现方式,会影响模型的性能;在assignment1中,分别渐进地实现两个循环到一个循环到无需循环来计算dist矩阵。前两种实现方式较为简单,而对于compute_distances_no_loops的实现,只需利用(a-b)^2 = a^2 - 2ab + b^2numpybroadcast机制即可完成(由于作业中的距离要求为欧氏距离)。

    SVM

       assignment1的第二部分是实现线性SVM分类器,SVM的整个流程如下:

    1. 先计算scores = xW + b,得到数据关于C个类别的分数,其中x \in R^{N \times M}, W \in R^{M \times C},b \in R^{C}
    2. 选择得分最高的作为该数据的所属类别

    在模型训练的阶段,其loss functionhinge loss具体是:
    L_i = \sum_{j \neq y_i} {max(0, s_j - s_{y_i} + \Delta ) }
    那么关于整个训练集的loss function就是:L = { {1} \over {N} } \sum L_i + regularize term

       关于L_i = \sum_{j \neq y_i} {max(0, s_j - s_{y_i} + \Delta ) }的梯度推导ds的情况如下:
    ds = \begin{cases} -1 \times {num \, about \, nonezero} & j = y_i\\ 0 & s_j - s_{y_i} + \Delta \leq 0, j \neq y_i \\ 0.5 & s_j - s_{y_i} + \Delta > 0, j \neq y_i \end{cases}
    那么可以推导出dW = x.T \times ds


    softmax

       assignment1的第三部分,构造softmax分类器。整个流程与SVM的一样,先计算数据关于10个类别的分数,然后选择分数最高的作为其归类;而不同的地方在于,loss function改为:
    L_i = - log( { {e^{s_{y_i} }} \over {\sum _{j} { e^{s_j} } } } )
    关于softmax的梯度推导,可以参考一下博主蜗牛一步一步往上爬的推导讲解,写得很详细清晰,剩余的步骤与上述的SVM一样。
       从上面两部分可以看到,主要都是先通过线性模型scores = xW + b算出关于10个类别的得分,然后得分高者则将其归于其中一类;分类器的训练就是是希望使正确类的得分可以上升,错误类的得分降低;上述的softmax functionSVM function其实就是分类器的训练目标、优化目标,而定义不同的loss function则会训练成不同的分类器。其实线性分类器,主要是指其决策边界是线性的,而其决策边界为:xW + b = 0。当分数大于0则为边界的一侧,由于所有边界会将整个空间分成很多部分,因此在哪一侧的分数较高,则被划分为其中归属。


    Two Layer Network

       assignment1的第四部分,构造两层神经网络的分类器,网络结构:

    1. FC (3 * 32 * 32, 50)
    2. ReLU
    3. FC (50, 10)

    而使用的loss functionsoftmax loss funtion,使用的训练方法是SGD。这部分需要调整的hyperparameter不仅仅是learning rate,还有模型结构、训练方法等等;开始有炼丹的味道。


    Img Feature Extraction

       在前面的部分,分类器都是直接将图片每个像素展开成一个向量,然后将改向量作为输入。而这部分,会首先从每张图像中,提取出Histogram of Oriented Gradients (HOG)HSV两种特征,然后拼接成向量,作为分类器的输入。HOG可以认为是标准图像的texture,而HSV可以表征图像的颜色。从assignment1中可以感受到,若使用这两个feature来代替原生像素作为输入,是用两层神经网络的分类器,分类效果最终可以到达约55%,效果有较大的提高。


    小结

       assignment1主要是完成KNN、两个线性分类器SVMsoftmax以及一个两层神经网络。这一部分主要是练手与熟悉两个loss function,这些loss function以及其梯度推导在后续会较为常用;并且也简略地实现了一个两层神经网络,也是为后续部分做一个简单地了解。
       在assignment1中两个线性分类器的项目结构,是先定义一个类linear classifier,里面定义好train()predict()以及loss();然后对于两类分类器再继承linear classifier,重写loss();而具体loss()的实现,则类似定义静态函数那样来实现。

    类图.png
       在该作业中,实现的gradietn check,主要是通过随机抽取相应的权重,计算来计算numerical_gradient然后与analysis_gradient的差距来进行gradietn check

    相关文章

      网友评论

          本文标题:cs231n assignment1

          本文链接:https://www.haomeiwen.com/subject/vrbiphtx.html