CS231n课程笔记
文章平均质量分 66
CS231n是Stanford的图像处理课程,主要专注于使用深度学习方法解决图像分类问题,后期也涉及到自然语言处理、强化学习相关的内容。本专栏为博主学习CS231n过程中的课程笔记和作业笔记。
silent56_th
大学生一枚,对机器学习、图像处理感兴趣,偶尔也会刷刷leetcode或者hihocoder。希望在这里可以和大家多多交流,互相学习。
展开
-
CS231n课程笔记1:Introduction
CS231n课程简介CS231n是Stanford的CV课程,主要专注于解决图像分类问题。网址为 http://vision.stanford.edu/teaching/cs231n/index.html,视频网上有很多。 作者水平不高,这里也仅仅是自己的课程笔记与大家分享,记录一些课程中的重要知识点,欢迎各路大神指教。从作者收到的风评来看,这门课的水准不高,但因为最近要自己设计训练CNN模型,所原创 2016-12-11 22:43:30 · 2251 阅读 · 0 评论 -
CS231n课程笔记2.1:图像分类问题简介&KNN
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。课程笔记1. 图像分类问题简介a. API: input image, output labelb. 难点:i.illumination (光强)ii. deformation (变形)iii. occlusion (遮挡)iv. background cl原创 2016-12-12 15:16:55 · 735 阅读 · 0 评论 -
CS231n课程笔记2.2:线性分类器
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。课程笔记这篇是CS231n课程笔记2.1:图像分类问题简介&KNN的下篇,两篇一起构成Lecture2的笔记。 上一篇介绍了kNN,那个是无参数的算法,只需要记录训练集即可,所以对于大数据集,kNN的模型很大。 这里先简介线性分类器,线性体现在score的获原创 2016-12-13 22:13:09 · 535 阅读 · 0 评论 -
CS231n课程笔记3.1:线性分类器(SVM,softmax)的误差函数、正则化
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。课程笔记这篇是线性分类器的第二部分,回忆线性分类器的线性体现在score的获得,即score = Wx+b,然后predict_label = argmax(score)。具体细节以及关于线性分类器的解释请参考CS231n课程笔记2.2:线性分类器。 如果不考原创 2016-12-15 01:13:34 · 2236 阅读 · 0 评论 -
CS231n课程笔记3.2:梯度下降
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。课程笔记上一篇 CS231n课程笔记3.1:线性分类器(SVM,softmax)的误差函数、正则化介绍了线性分类器的最后优化的目标函数,这节介绍优化方法:梯度下降。梯度下降不仅可以用于解线性分类器,还可以用于优化任意目标函数,得到局部最优解,只是因为线性分类器+原创 2016-12-16 16:52:41 · 763 阅读 · 0 评论 -
CS231n作业笔记1.1: KNN中的距离矩阵vectorize的实现方法(无循环)
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。作业笔记KNN部分主要关注与距离矩阵的计算。输入是X_test[test_num,D], X_train[train_num,D],其中D为特征维度,train_num、test_num分别是训练集以及测试机大小。返回dist[test_num,train_nu原创 2016-12-17 00:13:40 · 2433 阅读 · 1 评论 -
CS231n作业笔记1.2: KNN的交叉验证
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。作业笔记关于KNN的实现详见 CS231n作业笔记1.1: KNN中的距离矩阵vectorize的实现方法(无循环)。1. 切分训练集np.split函数用于切分训练集,注意必须是等分,而且返回list类型。 X_train_folds = np.array(原创 2016-12-17 21:50:02 · 2307 阅读 · 0 评论 -
CS231n作业笔记1.3:SVM的误差函数以及反向传播(非向量及向量算法)
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。作业笔记SVM的Loss Function请参考 CS231n课程笔记3.1:线性分类器(SVM,softmax)的误差函数、正则化。1. 非向量的误差计算这部分属于作业自带部分,使用loop计算,如果margin大于0,就叠加,最后加入正则项。2. 非向量的梯原创 2016-12-19 01:07:14 · 3108 阅读 · 0 评论 -
CS231n作业笔记1.4:随机梯度下降(SGD)
CS231n简介详见 CS231n课程笔记1:Introduction。 本文都是作者自己的思考,正确性未经过验证,欢迎指教。作业笔记1. 随机梯度下降这部分是对SVM模型进行随机梯度下降,求取近似最优解。关于随机梯度下降的知识请参考CS231n课程笔记3.2:梯度下降,关于SVM的误差以及梯度计算请参考 CS231n作业笔记1.3:SVM的误差函数以及反向传播(非向量及向量算法)。 实践部分原创 2016-12-19 18:40:21 · 1647 阅读 · 0 评论 -
CS231n课程笔记4.1:反向传播BP
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。课程作业关于BP实现的实例请参考 CS231n作业笔记1.3:SVM的误差函数以及反向传播(非向量及向量算法)。1. 计算图 VS 微积分如果可以直接使用微积分得到gradient,使用BP则会显得效率低下。但是通常情况下我们需要计算多层的神经网络,其中设计很多原创 2016-12-19 21:03:19 · 1954 阅读 · 0 评论 -
CS231n作业笔记1.5:Softmax的误差以及梯度计算
CS231n简介详见 CS231n课程笔记1:Introduction。 本文都是作者自己的思考,正确性未经过验证,欢迎指教。作业笔记Softmax的误差函数以及正则项请参考 CS231n课程笔记3.1:线性分类器(SVM,softmax)的误差函数、正则化。 代码部分请参考 python、numpy、scipy、matplotlib的一些小技巧。 注:这里只写了向量化的实现方法,因为非向量原创 2016-12-20 17:35:25 · 2348 阅读 · 0 评论 -
CS231n作业笔记1.6:神经网络的误差与梯度计算
CS231n简介详见 CS231n课程笔记1:Introduction。 本文都是作者自己的思考,正确性未经过验证,欢迎指教。作业笔记这里实现的是一个两层神经网络(含有一个隐层),激活函数使用的是ReLU,误差函数使用的是softmax,使用了L2正则项。1. scores计算需要注意的有 1. 最后一层不使用激活函数 2. 注意加bias的时候,使用了broadcasting,所以在反向传原创 2016-12-21 16:08:40 · 3446 阅读 · 0 评论 -
CS231n课程笔记4.2:神经网络结构
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。课程笔记关于神经网络的实现请参考: CS231n作业笔记1.6:神经网络的误差与梯度计算。1. 神经网络结构 如上图所示,两层之间都是全连接,隐层函数都是用激活函数。两层神经网络,激活函数使用ReLU的形式为scores = W2 max(0,W1*X+b1)原创 2016-12-22 19:37:12 · 570 阅读 · 0 评论 -
CS231n作业笔记1.7:基于特征的图像分类之调参
CS231n简介详见 CS231n课程笔记1:Introduction。 本文都是作者自己的思考,正确性未经过验证,欢迎指教。作业笔记1. SVM的交叉验证&调参交叉验证的具体内容请参考CS231n课程笔记5.4:超参数的选择&交叉验证。 交叉验证部分的代码和SVM作业中的一模一样,详情请参考CS231n作业笔记1.4:随机梯度下降(SGD),CS231n作业笔记1.3:SVM的误差函数以及反原创 2016-12-23 18:33:01 · 2018 阅读 · 1 评论 -
CS231n课程笔记5.1:神经网络历史&激活函数比较
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。课程笔记关于神经网络的简介请参考 CS231n课程笔记4.2:神经网络结构。1. 神经网络历史具有神经网络的结构,但是使用电门手动构造函数。[Frank Rosenblatt, ~1957: Perceptron;Widrow and Hoff, ~1960:原创 2016-12-24 16:43:03 · 1086 阅读 · 0 评论 -
CS231n课程笔记5.2:数据预处理&权重矩阵初始化
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。课程笔记1. 数据预处理1.1. 归一化如下图所示,归一化即使得重心位于原点,方差为1。对于归一化的优点请参考CS231n课程笔记5.1:神经网络历史&激活函数比较。 1.2. PCA & 白化如下图所示,PCA是作用于原数据上的一个线性变换,使得协方差矩阵对原创 2016-12-27 15:17:49 · 1957 阅读 · 0 评论 -
CS231n作业笔记2.1:两层全连接神经网络的分层实现
CS231n简介详见 CS231n课程笔记1:Introduction。 本文都是作者自己的思考,正确性未经过验证,欢迎指教。作业笔记1. 神经网络的分层实现实现全连接层+ReLU层的前向传播与后向传播。 参考资料:CS231n课程笔记4.2:神经网络结构,CS231n课程笔记4.1:反向传播BP, CS231n作业笔记1.6:神经网络的误差与梯度计算,CS231n作业笔记1.5:Softma原创 2016-12-27 18:58:47 · 5418 阅读 · 0 评论 -
CS231n作业笔记2.2:多层神经网络的实现
CS231n简介详见 CS231n课程笔记1:Introduction。 本文都是作者自己的思考,正确性未经过验证,欢迎指教。作业笔记这部分就是二层神经网络的拓展,详情参考CS231n作业笔记2.1:两层全连接神经网络的分层实现。 注:这部分不包括dropout以及batch normalization。1. 初始化参数注:这次使用了normal函数,也可以使用randn函数 self.原创 2016-12-28 19:07:22 · 1285 阅读 · 0 评论 -
CS231n作业笔记2.3:优化算法Momentum, RMSProp, Adam
CS231n简介详见 CS231n课程笔记1:Introduction。 本文都是作者自己的思考,正确性未经过验证,欢迎指教。作业笔记本部分实现的是Momentum,RMSProb, Adam三种优化算法,优化算法是用于从随机点出发,逐渐找到局部最优点的算法。关于各种优化算法的详细介绍,请参考CS231n课程笔记6.1:优化迭代算法之SGD,Momentum,Netsterov Momentum原创 2016-12-29 21:13:51 · 6525 阅读 · 3 评论 -
CS231n作业笔记2.4:Batchnorm的实现与使用
CS231n简介详见 CS231n课程笔记1:Introduction。 本文都是作者自己的思考,正确性未经过验证,欢迎指教。作业笔记Batchnorm的思想简单易懂,实现起来也很轻松,但是却具有很多优良的性质,具体请参考课程笔记。下图简要介绍了一下Batchnorm需要完成的工作以及优点(详情请见CS231n课程笔记5.3:Batch Normalization): 需要注意的有:最后原创 2017-01-03 21:21:48 · 9188 阅读 · 6 评论 -
CS231n作业笔记2.5:dropout的实现与应用
CS231n简介详见 CS231n课程笔记1:Introduction。 本文都是作者自己的思考,正确性未经过验证,欢迎指教。作业笔记dropout中唯一需要注意的就是为了平衡train与test,通过除以期望值即可。1. 前向传播 if mode == 'train': mask = (np.random.rand(*x.shape)<p) out = x*mask / p原创 2017-01-04 13:38:14 · 2388 阅读 · 0 评论 -
CS231n作业笔记2.6:卷积层以及池化层的实现
CS231n简介详见 CS231n课程笔记1:Introduction。 本文都是作者自己的思考,正确性未经过验证,欢迎指教。作业笔记就是简单实现一下卷积层以及池化层,唯一的难点在于确定索引值,稍微注意一下就好。1. 卷积层1.1. 前向传播 N, C, H, W = x.shape F, C, HH, WW = w.shape stride = conv_param['stride'原创 2017-01-04 20:53:02 · 968 阅读 · 0 评论 -
CS231n课程笔记5.3:Batch Normalization
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。Batch Normalization1. 原理BN(Batch Normalization)的原理很简单,就是对于给定输入做一个减均值除方差的归一化(可以这么做的原因是上诉归一化操作可导,即可以做BP(反向传播))。当然这么做的优劣难于判断,所以后文给出了改进原创 2017-02-27 21:12:52 · 2575 阅读 · 0 评论 -
CS231n课程笔记5.4:超参数的选择&交叉验证
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。1. 超参数有哪些与超参数对应的是参数。参数是可以在模型中通过BP(反向传播)进行更新学习的参数,例如各种权值矩阵,偏移量等等。超参数是需要进行程序员自己选择的参数,无法学习获得。 常见的超参数有模型(SVM,Softmax,Multi-layer Neura原创 2017-02-28 15:23:42 · 3173 阅读 · 0 评论 -
CS231n课程笔记6.1:优化迭代算法之SGD,Momentum,Netsterov Momentum,AdaGrad,RMSprop,Adam
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。优化迭代算法写在前面:Karpathy推荐Adam作为默认算法,如果full batch的话,在去除所有噪声的情况下尝试L-BFGS(一种二阶优化算法,详情请自行搜索)。关于优化算法的实现请参考CS231n作业笔记2.3:优化算法Momentum, RMSPro原创 2017-03-02 21:47:11 · 8331 阅读 · 2 评论 -
CS231n课程笔记6.2:神经网络训练技巧之Ensemble、Dropout
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。1. EnsembleKarpathy表示:只要使用Ensemble,就可以得到2%的提升。 Ensemble就是训练多个模型,最后把各个模型的结果取均值。 详情请参考 Hinton Neural Network课程笔记10a:融合模型Ensemble, B原创 2017-03-12 16:42:24 · 3067 阅读 · 0 评论 -
CS231n课程笔记7:卷积神经网络入门
CS231n简介详见 CS231n课程笔记1:Introduction。 注:斜体字用于注明作者自己的思考,正确性未经过验证,欢迎指教。课程笔记因为卷积神经网络这个部分涉及繁多,也有不少无法用语言详细解释的细节,所以迟迟没有动笔。这次刚好帮老师做了这部分的PPT,就直接把PPT的部分转化过来,也保留了PPT的逻辑,只能说简单介绍了卷积神经网络,详细的部分会在以后的课程笔记中陆续的补充。 以下内原创 2017-03-19 19:45:54 · 1771 阅读 · 0 评论