cs231n

cs231n-整理

谁说胖子不能爱 提交于 2020-03-04 04:07:21
一.杂论 1.1 训练集,验证集,测试集的区别 训练集:利用标签不断的进行网络参数(权重)的更新,但是每次训练都有一定的训练参数(学习率等) 验证集:用来选择训练集中最好的训练参数(学习率等) 测试集:用来真实的评价模型或者参数的结果 1.2 max函数的梯度: 其中一个为零梯度,另一个为正常梯度计算 1.3 卷积维度的计算: 卷积输出的维度=(输入维度+增补维度-卷积核维度)/步幅+1 1.4 硬件使用 CPU 核数较少,但运算很快,操作数很多,并且可以单独运行,适合做通信处理。 GPU 核数很多,但运算慢,操作有限,不能单独运行,适合进行高度并行的处理(矩阵运算) FPGA:可编程门阵列. ASIC:特定用途集成电路 1.5全连接模块 全连接模块会产生大量的参数,可以用池化替代 1.6 跨卷积与反向跨卷积 跨卷积:调整卷积核的步幅 反向跨卷积:将卷积得到的结果再乘上卷积核,并移动一定的步长(相乘结果) 两者可以使用步长比来命名 1.7 目标函数 将最终的目标作为目标函数可以更加有效的得到对应的结果 1.8 忽略细节 不准确的说,人们往往只知道某项技术可以达到怎样的功能,但是产生这样效果的原因却尚未没解开 1.9 减小模型复杂度 剪枝: (1)降低模型的复杂度 (2)防止过拟合 (3)先训练神经网络,再去除连接,再训练。 权值共享:对一些接近的权值,使用一个近似进行表示,学习

CS231n assignment1笔记

谁说胖子不能爱 提交于 2020-03-02 13:12:41
KNN no_loop计算dists矩阵: 参考 KNN中no-loop矩阵乘法代码 损失函数 Numpy中ndim、shape、dtype、astype的用法 Python numpy函数:hstack()、vstack()、stack()、dstack()、vsplit()、concatenate() SVM for i in range ( num_train ) : scores = X [ i ] . dot ( W ) #第i个训练集在10个维度上的数值 correct_score = scores [ y [ i ] ] #真实数值 for j in range ( num_att ) : if j == y [ i ] : continue margin = scores [ j ] - correct_score + 1 # note delta = 1 if margin > 0 : #如果差距>1则计入误差 loss += margin dW [ : , j ] += X [ i ] . T ##通过求导得到 dW [ : , y [ i ] ] += - X [ i ] . T 这里的优化参见下图 cs231n官方笔记 Softmax 分子常常较大,在分式的分子和分母都乘以一个常数 C 通常将 C 设为 log C = − max ⁡ j f j

斯坦福大学cs231n作业参考(中文版)

巧了我就是萌 提交于 2020-02-27 17:59:34
cs231n2016冬季课程作业完成,在原先的基础上进行了翻译和中文注释,同时增加了16之后版本的部分新作业文件,已经全部跑通,需要的欢迎自取。 斯坦福大学的 CS231n(全称:面向视觉识别的卷积神经网络)一直是计算机视觉和深度学习领域的经典课程,每年开课都吸引很多学生。这门课由AI圈领军人李飞飞老师亲自设计教学,专注深度学习在计算机视觉领域的应用,内容涵盖多种神经网络具体结构与训练应用细节,质量和内容都非常之高。 github地址: https://github.com/hanlulu1998/CS231n 外部资源参考地址: 所有课程资料、PPT等: http://cs231n.stanford.edu/syllabus.html 课程官网: http://cs231n.stanford.edu/ 中文字幕视频地址: https://www.bilibili.com/video/av16585576/ (整理版本: https://www.bilibili.com/video/av58778425 ) 中文笔记: https://zhuanlan.zhihu.com/p/21930884 作业详解地址: https://zhuanlan.zhihu.com/p/30748903 来源: https://www.cnblogs.com/hanlulu1998/p

cs231n Lecture2 Image Classification

僤鯓⒐⒋嵵緔 提交于 2020-02-22 17:25:30
1.数据驱动:图像分类 面对的困难挑战是视角变化,大小变化,形变,遮挡,光照条件,背景干扰,类内差异。 Nearest Neighbor分类器 在 CIFAR-10 数据集上,总共6W张图片,有10类。32×32×3 5W做训练集,1W做测试集。每张测试图片属于哪一类,就是直接计算两张图片的所有像素的差值,一个测试图片和5W个训练集图片分别比较,最后哪个差值小就是和这个图片一类。 L1 (Manhattan)distance L2 (Euclidean)distance 你会发现准确率能达到38.6%。这比随机猜测的10%要好,但是比人类识别的水平(据研究推测是94%)和卷积神经网络能达到的95%还是差多了 k - Nearest Neighbor Classifier(KNN) 不找最近的一个图片的标签作为记过,找K个图片,然后投票决定图片标签 用于超参数调优的验证集 这里有K和which distance 两个超参数需要确定, 不要用你的test data来调优找到超参数 在训练集中,使用交叉循环验证,分成5份,用4份做训练集,一份做验证集 一旦找到最优的超参数,就让算法以该参数在测试集跑且只跑一次,并根据测试结果评价算法。 对最优的超参数做记录。记录最优参数后,是否应该让使用最优参数的算法在完整的训练集上运行并再次训练呢?因为如果把验证集重新放回到训练集中

Cs231n作业:Q1-4 Two-Layer Neural Network exercise(未完成)

不想你离开。 提交于 2020-02-07 08:01:25
Cs231n作业:Assignment 1 Q4 - Two-Layer Neural Network exercise two_layer_net Implementing a Neural Network Forward pass: compute scores Forward pass: compute loss Backward pass Train the network Train a network Debug the training Tune your hyperparameters lnline Question two_layer_net Implementing a Neural Network 在这个练习中,我们将开发一个具有全连接层的神经网络来执行分类,并在CIFAR-10数据集上进行测试。 # A bit of setup import numpy as np import matplotlib . pyplot as plt from cs231n . classifiers . neural_net import TwoLayerNet % matplotlib inline plt . rcParams [ 'figure.figsize' ] = ( 10.0 , 8.0 ) # set default size of plots plt .

cs231n--反向传播

陌路散爱 提交于 2020-02-01 21:35:39
原博客:https://blog.csdn.net/sinat_36458870/article/details/82824529(此处只做学习记录用) 回顾上次的内容,其实就会发现,虽然我们构造好了损失函数,可以简单使用导数的定义解决损失函数优化问题,但是并不高效。 1. 该课程,主要是 : 反向传播形成直观而专业的理解 利用链式法则递归计算表达式的梯度 理解反向传播过程及其优点。 如果你想:理解、实现、设计和调试神经网络,请再看一遍。 目的:给出f(x)(x是输入数据的向量),计算 ∇ f ( x ). 2. 通过简单表达式理解梯度 先看看二元乘法函数: f ( x , y ) = x y, 求一下偏导数 f ( x , y ) = x y → d f/ d x ​ = y d f/ d y ​ = x 啥意思呢? 请记住导数的意义:函数变量在某个点周围的很小区域内变化,而导数就是-->变量变化导致的函数在该方向上的变化率 d f ( x ) ​/ d x = lim (h-->0) ( f ( x + h ) − f ( x )) / h ​ 等同于: ∇ f ( x ) = lim (h-->0) ( f ( x + h ) − f ( x )) / h ​ 官方解释:若x = 4, y=-3, 则f(x,y) = -12, x的导数 ∂ f/ ∂ x = − 3

cs231n笔记:最优化

对着背影说爱祢 提交于 2020-01-30 23:45:01
本节是cs231n笔记:最优化,并介绍了梯度下降方法,然后应用到逻辑回归中。 引言 在上一节线性分类器中提到,分类方法主要有两部分组成: 1. 基于参数的评分函数 。能够将样本映射到类别的分值。 2. 损失函数 。用来衡量预测标签和真实标签的一致性程度。 这一节介绍第三个重要部分: 最优化(optimization)。 损失函数能够让我们定量的评估得到的权重w的好坏,而最优化的目标就是找到一个w,使得损失函数的值最小。工作流程如下图: (x,y)是给定的数据集,w是权重矩阵,通过初始化得到。向前传递到评分函数中得到类别的评分值并存储在向量f中。损失函数计算评分函数值f与类标签y的差值,正则化损失只是一个关于权重的函数。在梯度下降过程中,我们计算权重的梯度,然后使用梯度更新权重。一旦理解了这三个部分的关系,我们可以使用更加复杂的评分函数来代替线性映射,比如神经网络、甚至卷积神经网络等,而损失函数和优化过程这两部分则相对保持不变。 梯度下降   梯度下降的思想是,要寻找某函数的最值,最好的方法是沿着函数的梯度方向寻找,移动量的大小称为步长。梯度下降的公式如下:   我们常常听说过梯度上升、梯度下降,那么两者的区别又是什么呢?其实这两者是一样的,只是公式中的减法变成加法,因此公式是: 梯度上升是用来求函数的最大值,而梯度下降是用来求最小值。普通的梯度下降版本如下: # 普通的梯度下降

『cs231n』卷积神经网络的可视化与进一步理解

拈花ヽ惹草 提交于 2020-01-29 15:45:58
cs231n的第18课理解起来很吃力,听后又查了一些资料才算是勉强弄懂,所以这里贴一篇博文(根据自己理解有所修改)和原论文的翻译加深加深理解,其中原论文翻译比博文更容易理解,但是太长,而博文是业者而非学者所著,看着也更舒服一点。 另,本文涉及了反向传播的backpropagation算法,知乎上有个回答很不错,备份到文章里了,为支持原作者,这里给出知乎 原文连接 可视化理解卷积神经网络 这张PPT是本节课的核心,下面我来说说这张图。 可视化神经网络的思想就是构建一个逆向的卷积神经网络,但是不包括训练过程,使用原网络各个层的feature map当作输入,逆向生成像素级图片(各个层对应的具体逆操作实现方法下面的文献中有介绍),目的是研究每一层中每一个神经元对应的(或者说学习到的)特征到底是什么样的。 我们首先获取某一层的feature map,然后将除了想要研究的那个神经元之外所有神经元置零,作为返卷积网络的输入(a图所示),经过逆向重构后,得到的图片就反映了这个神经元学习到的特征。 Relu层的逆处理得到了特殊关注,向前传播中,小于零的神经元直接置零(b1),如果按照计算梯度的反向传播算法( backpropagation )的话那么应该在向前传播时置零的位置仍然置零(b2),而原论文按照deconvent的方法,相当于把Relu对称化,直接对反向的特征图进行了标准的Relu

【深度之眼cs231n第七期】笔记(二)

做~自己de王妃 提交于 2020-01-28 17:06:52
目录 数据驱动方法 语义鸿沟 数据驱动方法 k最临近算法(KNN) 距离度量方法 L1距离 L2距离 K的选择 超参数 KNN的问题 测试时非常慢 距离度量的问题 维度灾难 总结 数据驱动方法 语义鸿沟 对于一幅图像,人眼看到的是猫,计算机看到的是数字矩阵。猫的标签和数字矩阵间的差距就是语义鸿沟。 如何把标签和数字矩阵联系起来(事实上就是图片分类)对计算机来说是一个很难的问题。 问题1:如何把它们联系起来? 问题2:当我们移动相机,从另一个方向拍摄猫的照片时,图像上的数字几乎都改变了,但是它还是表示同一只猫。如何才能把变化后的图像也认成猫? 光线改变时,它还是猫 这些不同姿势的还是猫 我们没有直接的方法识别一只猫。一个较直接的想法就是,先识别出耳朵,眼睛等,然后写一些方法来识别它。比如耳朵、眼睛等符合一定条件的就是猫。 但这并不是一个很好的方法。首先,这种算法很容易出错(看上面神奇的姿势);其次,识别其他的东西又需要设计新的算法。 所以我们考虑用数据驱动的方法。 数据驱动方法 首先获取带标签的数据集,然后训练分类器,得出一个模型,模型已经总结出识别的要素。最后用模型识别新的图片。 函数不再是只有一个(输入图片,识别它是否是猫),而是有两个,一个训练函数(用数据集来训练模型),一个预测函数(使用模型来识别这是不是一只猫)。 k最临近算法(KNN)

cs231n第二讲笔记整理(下)

浪子不回头ぞ 提交于 2020-01-25 00:56:43
任务标题: 学习线性分类器 任务详情: 观看第二讲:图像分类 第6课时视频;观看knn与线性分类器知识点提点 学习内容提要: 第二讲:图像分类 ·6线性分类器 对于32 * 32 * 3一张图彩色图,f(x,w)线性分类器与knn区别 线性分类器模型函数f(x,w)=wx+b (可以看成一种模板匹配方法) 线性分类器的缺点也就是存在的问题 Ps: f(x,w)线性分类器与knn区别 线性分类器的缺点也就是存在的问题 ·homework 作业:训练KNN分类器(assignment1 中的 knn.ipynb) 作业下载链接: 链接:https://pan.baidu.com/s/1sAHQASS19YIlnE_kKQwkeQ 密码:mgej 打卡内容: 1. f(x,w)线性分类器与knn区别 线性分类器是参数模型中最简单的列子,在深度学习中整个描述都是关于函数F的正确结构,你可以发挥自己的想象来编写不同的函数,用不同的,复杂的方式来组合数据和权重。 线性分类器的工作方式如下,其实质是给不同的像素点分配不同的权重。 Knn通过距离度量来划分种类,线性分类器是通过平面来划分类别。 knn没有可以学习的权重,线性分类器有可以学习的权重w。 3. 线性分类器为什么可以看成一种模板匹配方法 权重矩阵的每一行对应一个模板,这个类的图像模板与像素之间有一个相似之处