雷锋网AI研习社按:CS231n是斯坦福大学开设的计算机视觉与深度学习的入门课程,授课内容在国内外颇受好评。但是只听课不复习,不做作业来巩固知识点的话,效果肯定不好。雷锋网AI研习社在近期的线上公开课上请来了一位技术大牛为大家来讲解这门课的配套作业。
本文根据AI研习社公开课上的直播视频内容整理而成,主要介绍Assignment 1的完成思路与重点部分代码实现。如果你还没开始听CS231n,可直接点击课程链接观看回放视频。
王煦中,CS硕士,主要研究方向为自然语言处理与深度学习。知乎专栏喵神大人的深度工坊(http://t.cn/RTc9wfy)作者,日语及ACGN爱好者。
分享主题:CS231n课后作业讲解第一讲(含代码实现)作业链接:https://github.com/Observerspy/CS231n
分享提纲:
CS231n作业介绍,
kNN的介绍
关于SVM
关于Softmax
关于Two-Layer NN
关于Features
以下是分享内容:
CS231n的全称是CS231n: Convolutional Neural Networks for Visual Recognition,即面向视觉识别的卷积神经网络。该课程是斯坦福大学计算机视觉实验室推出的入门课程,授课内容在国内外颇受好评。所有课程资料、PPT等都可以在网络上下载:http://cs231n.stanford.edu/syllabus.html。课程的目的是帮助学生深入了解深度学习框架的细节,主要面向视觉识别任务(尤其是图像分类任务)的端到端学习模型。
关于kNN
kNN主要分为两步:第一步是训练,分类器简单地记住所有的训练数据。
第二步是测试,比第一步要重要。每一个测试样本要和每一个训练数据分别计算距离,选取k个最近的训练样本的label,通过投票机制获得预测值。
投票机制就是大家在一起对所有的类投票,哪一个类的投票数最多,这个测试样本就会被分为该类的下面。
这个作业主要分为三步,第一步用双循环实现kNN, 双循环就是对每个测试数据和每个训练数据分别计算,第一层循环就是对测试数据的循环,第二层循环是对训练
下面使用单循环实现。单循环要求每个测试数据通过一次计算就可以得到和训练数据整体的距离。训练分为两个部分,首先是每个测试数据和训练数据做差,需要注意参数axis的设置,用了广播机制。
使用无循环实现
具体的实现代码,可以观看回放视频学习。
最后的一个部分是预测:np.argsort()可以对dist进行排序选出k个最近的训练样本的下标;np.bincount()会统计输入数组出现的频数,结合np.argmax()就可以实现vote机制。
该部分作业要求在测试样本中需要得到28%的准确率。
关于线性多分类SVM
推导SVM过程很复杂,这里不涉及过多问题,用线性计算就可以了。注意下面这个式子汇总只有错误的分类才能产生loss。即j=i 正确分类是没有loss的。
分别对Wj和Wyi求导,具体的实现代码可以观看视频回播。这个作业要求在验证集上得到大约40%的正确率。
关于Softmax
Softmax的公式如图
需要注意的是,所有的分类问题都是一对一的,一个测试样本只能分到一个类下面。
loss具体代码实现过程可观看视频回放。有了loss之后,在j=i和j≠i的情况下,分别对w求导:
这部分作业要求在验证集上达到35%的准确率。
第四部分,关于 Two-Layer NN,实现两层的神经网络
具体详解过程见视频回放。实现反向传播后,要求调一些参数在测试集上达到48%以上的准确率。
第五部分:特征
该部分不再直接输入图片,而是输入图片的特征。
使用SVM需要在验证集上达到44%的准确率,使用双层神经网络可以很轻松达到55%以上的准确率,在测试机的分类准确率可达到59.4%。
以上为雷锋网AI研习社公开课上的关键内容提要。视频回放课程可到AI慕课学院观看,或直接点击链接:
http://www.mooc.ai/open/course/364。
作业链接:https://github.com/Observerspy/CS231n