cs231n

cs231n作业:Assignment1-Image features exercise

本小妞迷上赌 提交于 2020-01-20 16:50:21
# Use the validation set to tune the learning rate and regularization strength from cs231n . classifiers . linear_classifier import LinearSVM learning_rates = [ 1e - 9 , 1e - 8 , 1e - 7 ] regularization_strengths = [ 5e4 , 4e5 , 5e5 , 6e5 , 5e6 ] results = { } best_val = - 1 best_svm = None ################################################################################ # TODO: # # Use the validation set to set the learning rate and regularization strength. # # This should be identical to the validation that you did for the SVM; save # # the best trained classifer in best_svm. You might also

CS231n学习笔记七

独自空忆成欢 提交于 2020-01-18 06:15:01
更好的优化方法 前面 随机梯度法 ,当损失函数沿一个方向改变很快而沿另一个方向改变很慢时,此时更新方向会很曲折,收敛速度很慢。而且更新过程可能会停在损失函数的 局部最小值点 或者 鞍点 ,一般在维度低的时候更可能停在局部最小值处,维度高的时候停在鞍点处的可能性更大。 带动量的梯度法 从物理的角度看:随机的初始化参数相当于在某个位置初始速度为零的粒子。优化过程可以看作是模拟参数向量(即粒子)在山坡上滚动的过程,当粒子到达 局部最小值点 或者 鞍点 时由于还带有速度,会继续更新 第一种表示方式: v t + 1 = ρ v t − α ∇ f ( x t ) x t + 1 = x t + v t v_{t+1}=\rho v_t-\alpha \nabla f(x_t)\\ x_{t+1}=x_t+v_t v t + 1 ​ = ρ v t ​ − α ∇ f ( x t ​ ) x t + 1 ​ = x t ​ + v t ​ 第二种表示方式: v t + 1 = ρ v t + ∇ f ( x t ) x t + 1 = x t − α v t v_{t+1}=\rho v_t+\nabla f(x_t)\\ x_{t+1}=x_t-\alpha v_t v t + 1 ​ = ρ v t ​ + ∇ f ( x t ​ ) x t + 1 ​ = x t ​ − α v t

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

不想你离开。 提交于 2020-01-10 05:40:33
线性分类器 神经网络可以由很多小的网络组成,就像一个大积木是由很多小的基本块组成一样。 比如我们想要一个模型:输入一幅图像,然后输出描述图片的句子。那么我们可以让卷积神经网络只关注图片,循环神经网络只关注语言,然后把两个网络组合在一起,就像搭积木一样,最后得到我们想要的模型。 而线性分类器是参数模型中最简单的例子,相当于积木中最基础的块。 在CIFAR中,我们将写一个关于图像x和参数W的函数F,输出是10个数字,代表10个类别的分数。我们希望W能总结训练数据中的知识,这样最后预测时就有可能运行在较小的终端设备上了。 假设我们的输入是32*32*3的一副图像,那么我们想要得到10个分数,我们的W就需要是10*3072大小的。我们通常还会添加一个偏置项,它是10*1的向量。它是关于类偏好的。比如,你的数据不均衡,猫的数据多于狗的。那么,猫这一项的偏置项就会比其他的高。 这里有个简单的例子关于线性分类器是如何运作的。这里的W和b就是我们想要训练得到的东西。 线性分类器也称为模板匹配,因为W矩阵中的每一行对应于图像的某个模板。也就是说,只有在图像像素较大的地方,W的数值也大,图像像素较小的地方,W的值也小,才会得到较高的分数,也就是说W和图像是相似的。 如果我们将W矩阵的行向量还原回一幅图像,我们可以更直接地看到为什么叫模板匹配。比如第二张图,整体上能看出比较像一辆车

cs231n笔记(一)

北城以北 提交于 2020-01-04 17:19:24
目录 计算机视觉发展历程 计算机视觉的各种任务 计算机视觉发展历程 1.人类想了解视觉的原理→探测猫的大脑皮层→发现它对边缘信息更敏感 2.视觉世界太复杂了→简化为简单的几何形状→识别和重建这些形状 3.(表示物体)建立3D模型:边缘、端点、虚拟线条→边缘与深度信息、场景的不连续性拼凑起来→3D 4.(表示物体)用圆柱或圆圈-线表示人形 5.(识别物体)猫对边缘信息更敏感,所以尝试通过物体边缘来识别物体 6.(识别物体)目标识别太难了,先做目标分割→把图片中的像素点归类到不同的区域(虽然我们并不知道它是什么东西,但是我们知道他们是类似的) 7.(识别物体)人类对面部信息很敏感,所以面部检测发展得比较快 8.(识别物体)SIFT特征匹配(基于特征的目标识别):直接识别一个整体是很困难的(影响因素:遮挡、尺度缩放、旋转、亮度变化等)但是有些特征在上面的影响因素下保持不变。 先找出不变的特征,用这些特征进行精确匹配,最后匹配整个目标 9.(识别物体)金字塔匹配(识别整幅图像):图片里的各种特征可以告诉我们这是厨房还是风景。 从图片的各个分块中提取这些特征,并把它们放在一起作为一个整体,然后拿去做分类 10.(识别物体)特征用于识别人体姿态(方向梯度直方图、可变形部件模型) 11.识别是很复杂的问题,所以模型的维数往往比较高,训练数据量不够时容易发生过拟合(一个不恰当的比喻

斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时3

可紊 提交于 2019-12-27 17:31:15
课时3 计算机视觉历史回顾与介绍下 ImageNet有5000万张图片,全部都是人工清洗过得,标注了超过2万个分类。 CS231n将聚焦于视觉识别问题,图像分类关注的是大图整体;物体检测告诉你东西具体出现在图片的哪里以及物体之间的联系是什么之类的。 CNN是深度学习架构的一种,2012年之前的imageNet,都是特征+支持向量机的,也是分层结构,但没有端到端的特征; Kunihiko Fukushima提出了一个模型,称为Neocognitron,是神经网络架构的开端。 数据本身并没有什么意义,但是在深度学习架构中,数据成了高性能架构的驱动力,来执行端到端的训练,帮助解决过拟合问题,只要有足量的数据。 愿景 :给电脑一张图片,电脑可以输出描述性文字(一句话之类的)。 来源: https://www.cnblogs.com/bxyan/p/6730138.html

斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时26&&27

假装没事ソ 提交于 2019-12-27 17:30:57
课时26 图像分割与注意力模型(上) 语义分割: 我们有输入图像和固定的几个图像分类,任务是我们想要输入一个图像,然后我们要标记每个像素所属的标签为固定数据类中的一个 使用卷积神经,网络为每个小区块进行分类,对在区块的中间打上标签,对图像的全部区块分类完毕,我们就可以得到每个像素所对应的标签,这个操作实际上非常耗时,因为一张图片将会被分割非常多的小块。 如果这些神经网络具有相关的结构,通过这个图像金字塔方法的话,这些图像的输出将会有不同的感受野。 语义分割的迭代精化 我们有一个输入图像,他们被分割成三个通道,我们把输出从卷积神经网络中拿出来,同时把对应的下采样版本的图像拿出来。然后我们再重复这一过程,所以这个过程,其实是有点增加输出有效的感受野,同时也对输入图像有更多的处理。 即时分割或者实时检测和分割: 我们有一些分类需要去识别,给定一张图像需要输出对应图像的不同分类实例,而分实例我们也需要分割到具体每个像素是属于哪个实例。 实例分割 我们给他一副输入图像,CNN还要依赖于外部的候选区域,就是计算机视觉中低层次信息得离线处理操作,预测物体在图像中的具体的位置。每个分割候选我们可以抽取出一个bounding box,来提取边界框裁剪输入图像,喂给卷积神经网络去抽取特征,同时并行的执行RCNN,再一次我们拿到相应的块图像,进行裁剪,但这里我们实际上有候选的分割

(Review cs231n) Optimized Methods

蹲街弑〆低调 提交于 2019-12-27 17:30:45
Mini-batch SGD的步骤: 1.Sample a batch of data 2.Forward prop it through the graph,get loss 3.backprop to calculate the gradient 4. updata the parameters using the gradient The initialization of weights is important. 如果 初始化过小, 经过激活后网络中权值的update就会 趋于0;如果过大,就可能出现梯度爆炸;尝试xavier initialization main loop: while True: data_batch = dataset.sample_data_batch() loss = network.forward(data_batch) loss = network.backward() x += -learning_rate * dx 不同的参数更新方案有不同的优化途径和优化速度,SGD方法是所有方法中最慢的。 The problems of SGD and why SGD is slow? 假设一个损失函数空间,损失函数的垂直方向非常陡峭,水平方向非常shallow 水平方向上的梯度非常小,垂直方向上梯度很大。 更新方式如上,补救的一种方式是 动量更新:

斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时7

安稳与你 提交于 2019-12-27 17:30:37
课时7 线性分类器损失函数与最优化(下) 我们为什么要最大化对数概率而非直接最大化概率? 你在做逻辑斯蒂回归时,如果你只是想要最大化概率,那你使用log是无意义的。因为log函数是单调函数,最大化概率和最大化对数概率是等价的。 Softmax vs. SVM 我们调整其中的评分,使值上下浮动,对于SVM而言,分类正确率可能不会改变。因为测试样例中的边界是由一个大数决定的,SVM对于那种误分类评分低的样例不是很在意。但是对Softmax而言,任何一个测试样例都能提升分类器的性能。SVM具有附加的稳定性,一旦样例满足边界条件,这个样例点就不会影响损失函数,而Softmax则要将所有样例点都纳入考量。SVM分类器对一小搓接近于分类边界的样例较为敏感,对于离边界很远的样例点不敏感;而softmax是一个基于所有数据的函数。 正则化损失只作用于权重并不作用于数据 实际操作过程中,当你想要给神经网咯建立一个新模型时,你需要求解损失值,然后求解梯度值,然后你还要进行梯度值的检查,确保你的微积分求解是正确的。 因为要找出损失值的最小值,而梯度值为负值时才会不断向下找最小值。 步长也叫作学习速率,是最需要关注的重要参数 我们拥有完整的数据集,但是在实际操作的时候我们只是从训练集取样出一批用来估算损失函数的梯度。从而我就有了初始的更新方向,然后我们再把这个过程一次又一次的重复

斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时5

佐手、 提交于 2019-12-27 17:30:28
课时5 数据驱动的图像分类方式:K最邻近与线性分类器(下) 在参数化方法中,我们要做的是构造一个函数,输入一张图片,对每一类输出一个数值。对任意一张图片,我们会计算出它到底属于哪一类。这些参数有时候也会被称作权重。我们不能改原始图像,但是我们可以修改权重,我们希望把它设成对训练集中每张图像可以实现正确输出的值。 我们没办法应对不同大小的图片,但是我们可以做到的最简单的事情是改变每一张图片的大小使他们变成相同的大小。然后我们就可以确定的把它们转换成在空间上都对齐的列。事实上,目前最前沿水平的方法只使用方形的图片。 有一种比较局限的W分类器的解释: 类似于模板匹配 从定义出发,神经网络可以具备多个模型,分别针对于不同的车,然后结合这些模型给出更强大的分类器,使分类更加合理。 可以把图片看成有很高维度的。线性分类器都在描述在这个3072维度空间上的梯度,而这些分数就是在这个取样空间中负点指向正点方向的梯度。我们会随机的初始化这些分类器,也就是说这条线代表的分类器在开始优化的时候,这个分类器会逐渐的移动渐渐的把属于你要找的类的点与其他点分隔开,从而完成训练。 损失函数可以定量的测定分类器工作的好坏。损失函数能够定量的测量每一个W,通过这个函数,我们不需要控制W的初始值。一旦找到一个W,使得你损失的值非常低,则可以说这个分类器正确的分类你所有的图片。在优化的过程中,我们会选择一个随机的W开始

(Review cs231n) ConvNet

落爺英雄遲暮 提交于 2019-12-27 17:30:17
概念 神经网络的深度和数据据体的深度(图像的通道数channels)要主要区分。 输入 1.得到一些数据,作为网络的输入。 2.在CNN中有filter,the size of filter is small。如上的filter为5*5,深度为3,这个3要在深度上穿过 输入数据的每一个位置,输入数据是三个通道; 3.filter 要完全覆盖输入数据的全部深度,用filter来和输入图像做卷积运算。 filter要在整个图像的空域范围内全部位置滑动,每一个位置filter和图像做点乘。这个filter是要学习的用W表示,我们也要学习这些filter,可以把filter看作是你的一堆W,然后在图像范围内滑动这个filter。 as folllows: $w^{T}x + b$ where w denotes the filter and x denotes the patch of input image, 大小是5*5*3的小区域。 激活图给出了每个空间位置出滤波器的反应,将5*5的filter在32*32的输入数据上滑动,得到了28*28的激活图。 hei = 32; wid = 32; stride = 1; count = 0; step1 = 0; step2 = 0; pathchSize = 5; for x = 1 + step1: stride : hei -