图像梯度

深度学习之BN(批量标准化)

纵然是瞬间 提交于 2020-01-13 12:18:51
BN作为最近一年来深度学习的重要成果,已经广泛被证明其有效性和重要性。虽然还解释不清其理论原因,但是实践证明好用才是真的好。 一、什么是BN 机器学习领域有个很重要的假设: 独立同分布假设 ,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。BN就是深度神经网络训练过程中使得每层网络的输入保持相同分布。 二、为什么要使用BN 根据论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》所讲内容,BN主要是解决Internal Convariate Shift问题。那么什么是Internal Convariate Shift呢? 可以这样解释:如果ML系统实例集合<X,Y>中的输入值X的分布老是变,这不符合IID假设,网络模型很难学习到有效的规律。对于深度学习这种包含很多隐层的网络结构,在训练过程中,因为各层参数不停在变化,所以每个隐层都会面临covariate shift的问题,也就是在训练过程中,隐层的输入分布老是变来变去,这就是所谓的“Internal Covariate Shift”,Internal指的是深层网络的隐层,是发生在网络内部的事情,而不是covariate

使用python实现canny算法

╄→гoц情女王★ 提交于 2020-01-13 07:08:45
1. Canny算法概述 Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法。更为重要的是 Canny 创立了边缘检测计算理论(Computational theory of edge detection)解释这项技术如何工作。 通常情况下边缘检测的目的是在保留原有图像属性的情况下,显著减少图像的数据规模。有多种算法可以进行边缘检测,虽然Canny算法年代久远,但可以说它是边缘检测的一种标准算法,而且仍在研究中广泛使用。 2.最优边缘准则 Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是: (1)最优检测:算法能够尽可能多地标识出图像中的实际边缘,漏检真实边缘的概率和误检非边缘的概率都尽可能小; (2)最优定位准则:检测到的边缘点的位置距离实际边缘点的位置最近,或者是由于噪声影响引起检测出的边缘偏离物体的真实边缘的程度最小; (3)检测点与边缘点一一对应:算子检测的边缘点与实际边缘点应该是一一对应。 为了满足这些要求 Canny 使用了变分法(calculus of variations),这是一种寻找优化特定功能的函数的方法。最优检测使用四个指数函数项表示,但是它非常近似于高斯函数的一阶导数。 2. Canny算法实现步骤 第一步:灰度化 第二步:高斯滤波 任何边缘检测算法都不可能在未经处理的原始数据上很好地工作

OpenCV python 图像梯度--sobel图像处理

你说的曾经没有我的故事 提交于 2020-01-13 04:37:53
OpenCV python 图像梯度–sobel图像处理 处理原图:[source.jpg] import cv2 def main ( ) : # 1.导入图片 img_src = cv2 . imread ( "source.jpg" ) # 2.执行sobel算法1 img_sobel_64x = cv2 . Sobel ( img_src , cv2 . CV_64F , 0 , 1 ) img_sobel_64y = cv2 . Sobel ( img_src , cv2 . CV_64F , 1 , 0 ) img_sobel_x = cv2 . convertScaleAbs ( img_sobel_64x ) img_sobel_y = cv2 . convertScaleAbs ( img_sobel_64y ) img_sobel = cv2 . addWeighted ( img_sobel_x , 0.5 , img_sobel_y , 0.5 , 0 ) # 2.执行sobel算法2 img_sobelxy_11 = cv2 . Sobel ( img_src , cv2 . CV_64F , 1 , 1 ) img_sobelxy_11 = cv2 . convertScaleAbs ( img_sobelxy_11 ) # 3.显示图片 cv2 .

Batch Normalization

家住魔仙堡 提交于 2020-01-12 19:24:42
前言: Batch Normalization是深度学习领域在2015年非常热门的一个算法,许多网络应用该方法进行训练,并且取得了非常好的效果。 众所周知,深度学习是应用随机梯度下降法对网络进行训练,尽管随机梯度下降训练神经网络非常有效,但是它有一个缺点,就是需要人为的设定很多参数,比如学习率,权重衰减系数,Dropout比例等。这些参数的选择对训练结果至关重要,以至于训练的大多数精力都耗费在了调参上面。BN算法就可以完美的解决这些问题。当我们使用了BN算法,我们可以去选择比较大的初始学习率,这样就会加快学习的速度;我们还可以不必去理会过拟合中的dropout、正则项约束问题等,因为BN算法可以提高网络的泛化能力;我们再也不需要使用局部响应归一化层,因为BN本身就是归一化的网络;还可以打乱训练数据,防止每批训练的时候,某一个样本经常被选到。通常在训练神经网络之前,我们都会对数据进行归一化处理,为什么呢?因为神经网络训练实际是为了学习数据的分布情况,一旦训练数据与测试数据分布不同,那么网络的泛化能力也会大大降低。另外,如果每一批的训练数据都不同,那么神经网络就会去适应不同训练数据的分布,这样就会大大降低网络训练的速度。深度学习的训练是一个复杂的过程,如果前几层的数据分布发生了变化,那么后面就会积累下去,不断放大,这样就会导致神经网络在训练过程中不断适应新的数据分布,影响网络训练的速度

3直方图与二值化,图像梯度

…衆ロ難τιáo~ 提交于 2020-01-12 15:39:26
1直方图 #直方图--增强对比度 def equalHist_demo(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) dst = cv.equalizeHist(gray) cv.imshow("equalHist_demo", dst) def clahe_demo(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) clahe = cv.createCLAHE(clipLimit=5.0, tileGridSize=(8, 8)) dst = clahe.apply(gray) cv.imshow("clahe_demo", dst) #直方图投影--视频跟踪 2二值化 #二值化 import cv2 as cv import numpy as np def threshold_demo(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) ret, binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY|cv.THRESH_OTSU)#OTSU计算阈值 print("threshold value %s"%ret) cv.imshow("binary",

人工智能实验四:深度学习算法及应用(DNN&CNN)

走远了吗. 提交于 2020-01-12 08:43:37
人工智能实验四报告:深度学习算法及应用 文章目录 人工智能实验四报告:深度学习算法及应用 实验目的 实验要求 实验硬件 实验软件 实验内容与步骤 MNIST数据集 具体实现 DNN(深度神经网络) 概述 具体设计 代码实现 结果输出 结果分析 为啥我又用了CNN(卷积神经网络)? CNN(卷积神经网络) 概述 具体设计 代码实现 结果输出 结果分析 思考题 实验目的 了解深度学习的基本原理 能够使用深度学习开源工具识别图像中的数字 了解图像识别的基本原理 实验要求 解释深度学习原理 对实验性能进行分析 回答思考题 实验硬件 计算机 实验软件 软件:windows操作系统 应用软件:TensorFlow、PyCharm、Python、Google Colab 实验内容与步骤 安装开源深度学习工具设计并实现一个深度学习模型,它能够学习识别图像中的数字序列。使用数据训练它,可以使用人工合成的数据(推荐),或直接使用现实数据。 MNIST数据集 通过下面的代码我们可以对其中的图片有一个大致的把握: import matplotlib . pyplot as plt # 训练集 train_images = mnist . train . images train_labels = mnist . train . labels # 验证集 validation_images = mnist

元学习系列(七):MAML与Meta-SGD

拜拜、爱过 提交于 2020-01-11 05:56:51
meta learning的一个重点在于如何在模型中引入先验知识,在孪生网络、原型网络等模型中,他们利用训练集作为先验知识,通过对比测试样本和训练样本进行分析,在神经图灵机等记忆增强神经网络中,模型引入了外部记忆,在训练过程中通过优化外部记忆,从而在训练新任务时,能通过外部记忆更快更准确地学习,而接下来要介绍的MAML,则从模型的参数初始化入手。 重新再说一次,小样本学习或者元学习的目的就是对于一个新任务,比如关于新类别的分类任务,模型在原来的基础上,只需要学习几个样本,经过几次迭代,就能达到很好的效果。 MAML算是给予了元学习一个新方向,像这种开拓性的模型,理解起来比其他改进性的模型要困难,所以我打算先详细讲一下如何通俗地理解MAML的思想。 首先我们来看一个例子,现在有四个洞打地鼠,之前地鼠每个洞都出现过,而下一次地鼠出现的地点是随机的,那么你要站在哪里才能在一分钟内打到地鼠。 如果我们用传统的机器学习或者深度学习模型去分析,模型可能会根据上几次地鼠出现的地点去预测下一次它出现的地点,然后结合不同地点的距离分析出你应该站的位置,比如说上几次地鼠都出现在1号洞,那么模型就很有可能建议你站在1号洞附近等待。 可是这样做可能有一个问题,就是你站在一号洞附近,就有可能离4号洞比较远,万一地鼠下一次出现在4号洞,你就赶不及了,所以,在这种要求下

循环神经网络和LSTM

我们两清 提交于 2020-01-10 08:39:29
MENU 循环神经网络 定义 应用领域 模型结构 问题 LSTM 基本概念 核心思想 循环神经网络 定义 循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network) 应用领域 RNN的应用领域有很多, 可以说只要考虑时间先后顺序的问题都可以使用RNN来解决.这里主要说一下几个常见的应用领域: 自然语言处理(NLP): 主要有视频处理, 文本生成, 语言模型, 图像处理 机器翻译, 机器写小说 语音识别 图像描述生成 文本相似度计算 音乐推荐、网易考拉商品推荐、Youtube视频推荐等新的应用领域. 模型结构 问题 RNN存在梯度消失和梯度爆炸问题(BP算法和长时间依赖造成的): RNN的算法, 它处理时间序列的问题的效果很好, 但是仍然存在着一些问题, 其中较为严重的是容易出现梯度消失或者梯度爆炸的问题(BP算法和长时间依赖造成的). 注意: 这里的梯度消失和BP的不一样,这里主要指由于时间过长而造成记忆值较小的现象. 因此, 就出现了一系列的改进的算法, 这里介绍主要的两种算法: LSTM 和 GRU. LSTM 和 GRU对于梯度消失或者梯度爆炸的问题处理方法主要是:

深度学习的Tips

☆樱花仙子☆ 提交于 2020-01-07 08:39:26
引言 本文主要讲解了在进行深度学习时一些实用的提示。是 李宏毅 深度学习-Tips for Trainning DNN 的笔记。 深度学习的方法 经过三步骤后得到一个神经网络,接下来判断在训练集上的表现如何?如果结果不好则回头看看三个步骤哪里出了问题;如果在训练集上的正确率很好,则拿训练集来试试,如果此时在测试集上的准确率不好,则说明是过拟合了;如果在训练集和测试集都得到很好的结果话,就说明这个网络是比较nice的。 不要错怪过拟合 在上图右56层的网络的错误率比20层的还要高,不能这样就说是过拟合导致的。从上图左可以看到在训练集上20层的结果本来就比56层的就好,说明这个网络没有训练好。 训练集上的结果不好与测试集上的结果不好是不一样的,有不同的途径可以解决这些问题。比如Dropout可以用于解决由于参数多而样本少导致的过拟合问题。 针对这些问题的解决方法可以有上面几种,比如如果在训练集上的结果不好,我们可以尝试换一个激活函数。 在手写数字识别中,激活函数就从 Sigmoid 换到了 relu 。 激活函数是 Sigmoid 的情况下,当隐藏层的数量到了9,10层的时候,整个准确率就不忍直视了。见 深度学习实例——Keras实现手写数字识别 造成上面这种情况有个原因是 梯度消失问题(Vanishing Gradient Problem) 当网络很深的时候

优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)

一个人想着一个人 提交于 2020-01-07 06:52:02
在机器学习、深度学习中使用的优化算法除了常见的梯度下降,还有 Adadelta,Adagrad,RMSProp 等几种优化器,都是什么呢,又该怎么选择呢? 在 Sebastian Ruder 的这篇论文中给出了常用优化器的比较,今天来学习一下: https://arxiv.org/pdf/1609.04747.pdf 本文将梳理: 每个算法的梯度更新规则和缺点 为了应对这个不足而提出的下一个算法 超参数的一般设定值 几种算法的效果比较 选择哪种算法 0.梯度下降法深入理解 以下为个人总结,如有错误之处,各位前辈请指出。 对于优化算法,优化的目标是网络模型中的参数θ(是一个集合,θ 1 、 θ 2 、 θ 3 ...... )目标函数为损失函数L = 1/N ∑ L i (每个样本损失函数的叠加求均值)。这个损失函数L变量就是θ,其中L中的参数是整个训练集,换句话说,目标函数(损失函数)是通过整个训练集来确定的,训练集全集不同,则损失函数的图像也不同。那么为何在mini-batch中如果遇到鞍点/局部最小值点就无法进行优化了呢?因为在这些点上,L对于θ的梯度为零,换句话说,对θ每个分量求偏导数,带入训练集全集,导数为零。对于SGD/MBGD而言,每次使用的损失函数只是通过这一个小批量的数据确定的,其函数图像与真实全集损失函数有所不同,所以其求解的梯度也含有一定的随机性