目前对CS231n课程的学习是把课程的中文笔记过了一遍,大概是了解了相关的术语,知识层面略知一二。
近期做了CS231n课程的assignment1,作业的代码在网上一般都有,我主要用以学习kNN、SVM、Softmax分类器,一个两层的神经网络分类器。理解代码的难度主要在于numpy函数的理解。
一、kNN
kNN分类器是作业中几个分类器中最简单的一个,其训练过程即是保存训练集的全部数据,而在测试的时候,将验证图片的数据与训练数据一一对比,求出其欧氏距离,进行比较,进行结果输出。这种分类器的准确率不仅低,而且相当耗时。
二、SVM
支持向量机和Softmax分类器都是线性模型,其损失函数不同。由于采用了随机梯度下降的迭代方法,要计算梯度,可参考Optimization: Stochastic Gradient Descent。
三、Softmax
Softmax 是和 SVM 一起对比介绍的,只是把 hinge Loss 换成 cross-entropy Loss,即交叉熵损失。当然,其中的梯度计算同SVM的计算方法一样。
四、Neural Network
作业中要完成的是一个两层的神经网络分类器。前向传播和计算 loss 的逻辑和 Softmax 分类器差不多,难点在于梯度的计算。因为要涉及 矩阵对矩阵 的梯度计算。可以参考课程笔记中 Gradients for vectorized operations 的内容。
五、Features
作业中主要是提取图像特征,与我前一个笔记相关,先提取HOG特征,作为训练集进行训练,通过调参根据准确率来寻找最优参数。