图像梯度

算法学习笔记——梯度下降法原理及其代码实现

懵懂的女人 提交于 2020-01-22 15:47:19
梯度下降法原理以及代码实现 本篇博客承接本人上一篇关于逐步回归算法的引申,本篇将开始整理梯度下降算法的相关知识。梯度下降,gradient descent(之后将简称GD),是一种通过迭代找最优的方式一步步找到损失函数最小值的算法,基本算法思路可总结为如下几点: (1) 随机设置一个初始值 (2) 计算损失函数的梯度 (3) 设置步长,步长的长短将会决定梯度下降的速度和准确度,之后会详细展开 (4) 将初值减去步长乘以梯度,更新初值,然后将这一过程不断迭代 1. 原理讲解——二维平面情形 还是老规矩,先从二维平面场景开始,由易到难,步步深入,先上图: 为了方便思考,我们求解的是对上述函数图像的任意一个点 来说,沿着哪个方向走能够使得该函数的y上升幅度最大,那么逆向思维,该方向一旦求得,该方向的反方向不就是使得y下降速度最快的方向了吗?好,沿着这个思路继续,由于这个方向是我们要求的,不妨设该方向与x轴的夹角为 ,现在我们沿着这个方向走 的距离,将该向量正交分解可知,它只有在水平方向上的分量才会提供使得函数值发生变化的效果,竖直方向上分量不产生任何效果,于是可得以下函数值变化量函数: 显然,当 为0,也就是水平正方向时,可使得该函数值上升最快,也就是说水平负方向可使得该函数值下降最快,至此,二维平面上的使得函数值下降最快的方向我们就找到了: 2. 原理讲解——三维空间情形

Pytorch 学习 (2)

那年仲夏 提交于 2020-01-22 02:47:41
Pytorch 学习 (2) 过年回家,继续学习pytorch。又是一个优秀的人儿。 1.对神经网络的理解 神经网络结构实例如下: 训练一个神经网络的简单过程如下: 定义一个具有权重的神经网络 对整个输入的数据集进行迭代 用神经网络对输入进行处理 计算损失函数(即输出与标签的差值) 反向传播梯度对参数值进行修正 权重等于权重减去学习率与梯度的乘积 代码如下: 笔记存疑: num_flat_features()函数在被调用的后面,逻辑上显得不通顺。 16 * 6 * 6的原因不是很清楚,后面的6*6哪来的。 num_flat_features()为什么这样写不是很清楚。 Pytorch的一大优势就是你只要定义网络向前传播的结构,对于梯度的反向传导可以自动完成。Pytorch中Variable变量包含数据值,梯度值,计算梯度的函数。 我们可以利用定义好的网络做一次简单的前向运算,代码如下: 其中,torch.randn(1,1,32,32)是batch_size=1, 图像通道数为1,图像尺寸为32x32。 接着,我们将网络的梯度置零,用随机生成的数作为梯度向后传播,代码如下: 注意: torch.nn只支持小批量输入,而不接受单个样本。 举个例子,nn.Conv2d的输入为nSamples nChannels Height*Width 如果你只有一个样本,你可以在代码中添加input

Pytorch调研笔记

随声附和 提交于 2020-01-21 16:07:51
Pytorch 训练调研 首先我们简单说明一下,这么多深度学习框架中,为什么选择PyTorrch呢? 因为PyTorch是当前难得的简洁优雅且高效快速的框架。在笔者眼里,PyTorch达到目前深度学习框架的最高水平。当前开源的框架中,没有哪一个框架能够在灵活性、易用性、速度这三个方面有两个能同时超过PyTorch。下面是许多研究人员选择PyTorch的原因。 1、简洁:PyTorch的设计追求最少的封装,尽量避免重复造轮子。不像TensorFlow中充斥着session、graph、operation、name_scope、variable、tensor、layer等全新的概念,PyTorch的设计遵循tensor→variable(autograd)→nn.Module 三个由低到高的抽象层次,分别代表高维数组(张量)、自动求导(变量)和神经网络(层/模块),而且这三个抽象之间联系紧密,可以同时进行修改和操作。 简洁的设计带来的另外一个好处就是代码易于理解。PyTorch的源码只有TensorFlow的十分之一左右,更少的抽象、更直观的设计使得PyTorch的源码十分易于阅读。 2、速度:PyTorch的灵活性不以速度为代价,在许多评测中,PyTorch的速度表现胜过TensorFlow和Keras等框架 。框架的运行速度和程序员的编码水平有极大关系,但同样的算法

深度学习(二)——神经网络基础(多层感知器、反向传播算法)

ⅰ亾dé卋堺 提交于 2020-01-21 01:29:50
深度学习(二)——神经网络基础 文章目录 深度学习(二)——神经网络基础 神经网络的通用分类 神经网络的基本结构 基础架构 人工神经元 激活函数 模型训练与反向传播算法 前向传播 反向传播 梯度消失和梯度爆炸 神经网络的通用分类 人工神经网络模型可以理解为一组基本处理单元,它们紧密地相互连接,对输入进行类似的数学运算后生成期望的输出。基于信息在网络中传播的方式,可以将神经网络分为两个通用类别: 前馈神经网络 前馈神经网络 中信息的流动只能 由前到后 ,也就是说,一层神经元的输出只能作为后一层神经元的输入。这些网络架构可以被称为 有向无环图 。典型的模型有 多层感知器(MLP) 和 卷积神经网络(CNN) 。 反馈神经网络 反馈神经网络 具有形成有向循环的连接,也就是说,后一层神经元也可以反过来作为前一层神经元的输入,这就使得神经网络 可以处理序列数据 。反馈网络还具有 记忆能力 ,可以在其内部存储器中存储信息和序列关系。典型的模型有 循环神经网络(RNN) 和 长短期记忆网络(LSTM) 。 神经网络的基本结构 下面以多层感知器为例,介绍神经网络的基本结构。 基础架构 下图给出了MLP网络架构的一个例子: 这是一个五层感知器的例子,每一层分别含有3、4、2、3、3个人工神经元。我们用这个例子来介绍人工神经网络的一些特点: 分层架构 :人工神经网络包含层次化的处理级别。每个级别被称为

【深度学习】为什么会存在激活函数?

孤者浪人 提交于 2020-01-18 21:56:41
来源: AINLPer 微信公众号( 点击了解一下吧 ) 编辑: ShuYini 校稿: ShuYini 时间: 2019-9-1 引言     在深度学习网络中,我们经常可以看到对于某一个隐藏层节点的激活值计算一般分为两步,如下图:     第一步,输入该节点的值为 x 1 x_1 x 1 ​ , x 2 x_2 x 2 ​ 时,在进入这个隐藏节点后,会先进行一个线性变换,计算出值 z [ 1 ] = w 1 x 1 + w 2 x 2 + b [ 1 ] = W [ 1 ] x + b [ 1 ] z^{[1]}=w_1x_1+w_2x_2+b^{[1]}=W^{[1]}x+b^{[1]} z [ 1 ] = w 1 ​ x 1 ​ + w 2 ​ x 2 ​ + b [ 1 ] = W [ 1 ] x + b [ 1 ] ,上标 1 表示第 1 层隐藏层。     第二步,再进行一个非线性变换,也就是经过非线性激活函数,计算出该节点的输出值(激活值) a ( 1 ) = g ( z ( 1 ) ) a^{(1)}=g(z^{(1)}) a ( 1 ) = g ( z ( 1 ) ) ,其中 g(z)为非线性函数。     那么问题来了,这个激活函数到底有什么用呢,可不可以不加激活函数呢? 什么是激活函数?     激活函数是神经网络中极其重要的概念

梯度和方向导数的概念

南楼画角 提交于 2020-01-18 06:46:11
困扰多年,看了不久以后就又会忘记。 一.方向导数 (1)方向导数是个数值。 二维空间情形: 我们把f(x+Dx,y+Dy)-f(x,y)的值Value1与PP1的距离value2的比值的极值叫做沿PP1的方向导数。 三维空间计算过程相似; 二.梯度 (1)梯度是一个向量。 (2)沿梯度方向的方向导数达到最大值; sxyd.sdut.edu.cn/gaoshu2/lesson/8.7fangxiangdaoshuyutidu.htm 以二维空间为例,对于Z=f(x,y).在某点P(x0,y0)处的梯度可以理解为(DZ/Dx|x=x0,DZ/Dy|y=y0)。具体到离散状态,用差分的形式来表示 就是(一维的表示方法) 沿X方向 (f(x+Dx)-f(x)) 沿Y方向 (f(y+Dy)-f(y)) 梯度的方向表示为Sigta=arctan(Dy/Dx) 所以求解一个图像的各个方向的梯度时,我们采用模板与图像的卷积来进行计算: 分别表示在90度,0度,135度和45度的变化。 总结:某一方向的方向导数也就是f(x,y)在该方向的变化率(也就是f(x+Dx,y+dy)-f(x,y)的值),当该方向与梯度的方向一致时梯度方向也就是方向导数最大的方向,方向导数的值就等于梯度的模。 (参见网址:210.31.100.100/gdsx/?p=61&a=view&r=219) 有一个疑问是

6.1激活函数-数据预处理笔记

岁酱吖の 提交于 2020-01-18 05:50:39
文章目录 处理过程 激活函数 sigmoid函数 问题1 首先是饱和神经元将使梯度消失 问题2 sigmoid是非0中心函数 问题3 exp()是一个计算成本高的函数 tanh激活函数 ReLU激活函数 ReLU改进 leaky relu 实践 数据预处理 初始化网络权重 处理过程 处理过程包括 激活函数 数据预处理 权重初始化 批量归一化 训练过程监控 超参的优化 激活函数 当输入数据,在全连接层或者卷积层,我们将输入乘上权重值,然后将结果输入一个激活函数,或非线性单元。 上图是一些例子 sigmoid函数 每个数被输入sigmoid中,都会被压缩到[0,1]的范围内,然而它从在很多问题。 问题1 首先是饱和神经元将使梯度消失 当x=-10,太过接近sigmoid负饱和区,这个区域本质上是平的所以梯度变为0,我们将返回上游梯度乘一个约为0的数,所以得到一个非常小的梯度,所以某种意义上经过链式法则后让梯度流消失因此0梯度就传递到下游的节点。 当x=0,可以有一个好的梯度可以好的反向传播 当x=10,或者很大正值,它们位于梯度平滑区域,无法得到梯度流的反馈。 问题2 sigmoid是非0中心函数 当输入神经元的数值始终为正,它会乘以某个权重W,然后我们将通过激活函数来运行 权重W梯度如何? 当我们把上游梯度传回来,就是对我们的损失L关于f进行求导,就是dl/df它的值就是正数或负数

图像特征提取之HOG特征

为君一笑 提交于 2020-01-17 08:59:26
目标检测的图像特征提取之(一)HOG特征 zouxy09@qq.com http://blog.csdn.net/zouxy09 1、HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal在2005的CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM的思路为主。 (1)主要思想: 在一副图像中,局部目标的表象和形状(appearance and shape)能够被梯度或边缘的方向密度分布很好地描述。(本质:梯度的统计信息,而梯度主要存在于边缘的地方)。 (2)具体的实现方法是: 首先将图像分成小的连通区域,我们把它叫细胞单元。然后采集细胞单元中各像素点的梯度的或边缘的方向直方图。最后把这些直方图组合起来就可以构成特征描述器。 (3)提高性能: 把这些局部直方图在图像的更大的范围内(我们把它叫区间或block)进行对比度归一化(contrast-normalized),所采用的方法是:先计算各直方图在这个区间(block)中的密度

基于深度学习的图像超分辨率方法 总结 2018.6

不打扰是莪最后的温柔 提交于 2020-01-16 08:24:00
基于深度学习的SR方法 懒得总结,就从一篇综述中选取了一部分基于深度学习的图像超分辨率方法。 原文:基于深度学习的图像超分辨率复原研究进展 作者:孙旭 李晓光 李嘉锋 卓力 北京工业大学信号与信息处理研究室 来源:中国知网 1.基于前馈深度网络的方法 前馈深度网络是典型的深度学习模型之一。网络中各个神经元从输入层开始,接收前一级输入,并输入到下一级, 直至输出层。整个网络中无反馈, 可用一个有向无环图表示。 在深度学习的SR问题中,前馈深度网络能够较好地学习低分辨率图像到高分辨率图像之间的对应关系。在输入层中,它采用卷积的方法提取输入图像的局部特征模式,单向传递给隐含层, 随着隐含层网络层数的加深而学习得到更深层级的特征;最后,由输出层得到重建图像。典型的前馈深度网络包括多层感知器和卷积神经网络(CNN)。 按前馈深度网络的网络类型可以分为以下几类:基于卷积神经网络的方法 (Super resolution using convolution neural network,SRCNN) ;基于极深网络的方法 (Very deep networks for SR,VDSR) ;基于整合先验的卷积神经网络的方法 (SR-CNN with Prior,SRCNN-Pr) ;基于稀疏编码网络的方法(Sparse coding based network,SCN) 和基于卷积稀疏编码的方法

函数梯度及空间曲面切平面

我怕爱的太早我们不能终老 提交于 2020-01-15 05:41:06
函数梯度及空间曲面切平面 求曲面(线)的 \(y=x^2\) 在点 \(P(1,1)\) 处的切线。 解:   令: \(f(x,y)=x^2-y\) ,   则梯度方向为: \(\nabla f(x,y)=2xi-j\)   所以等值面(等高线) \(f(x,y)=x^2-y=0\) 的在点 \(P(1,1)\) 处的法向量为: \(\overrightarrow {n} = (2,-1)\)   所以, \(y=x^2\) 在 \(P(1,1)\) 处的切线(面)方程为:        \(2(x-1)-(y-1)=0\)   即: \(2x-y-1=0\) 总结: 首先重申一下 梯度的概念 :    函数 \(f(\overrightarrow {x})\) 在某点的梯度是这样一个向量:它指向的方向函数增加最快;此时,函数在这个方向的 方向导数 达到最大值,这个最大值就是梯度的模。   所谓“ 梯度垂直于等高线 ” 是指: == \(f(x,y)\) 在某点梯度方向垂直于 \(f(x,y)=C\) 的等高线,而不是垂直于 \(f(x,y)\) 本身==。 ==梯度为等高线在该点的法向量==。 如果两个等值面法线相等,则这两个等值面相切,且有共同的切平面。 这个材料写的还可以: 方向导数与梯度 或者打开学习的正确方式: 梯度,方向导数,切平面 画图说明:   如果把 \(f(x