图像梯度

算法学习--梯度下降

自古美人都是妖i 提交于 2019-12-02 18:09:36
本文为自己在查看一些书和网上的链接后整理所得,非商业性质。 感谢各位前辈的无私分享,若有侵权,请在文章后留言,会尽快删除。 参考链接:https://www.jianshu.com/p/c7e642877b0e 参考链接原文中有详细的介绍,此文中大多数内容摘录自参考链接,但主要目的是作为自己回顾梯度下降知识的笔记,关注的为思路并非具体实现。 梯度下降的场景假设 梯度下降法的基本思想可以类比为一个走向山谷的过程。假设这样一个场景:一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致 可视度很低 。因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走。然后 每走一段距离 ,都反复采用同一个方法,最后就能成功的抵达山谷。 假设这座山最陡峭的地方是无法通过肉眼立马观察出来的,而是需要一个复杂的工具来测量,同时,这个人此时正好拥有测量出最陡峭方向的能力。所以,此人每走一段距离,都需要一段时间来测量所在位置最陡峭的方向,这是比较耗时的。那么为了在太阳下山之前到达山底,就要尽可能的减少测量方向的次数

深度学习入门

谁说我不能喝 提交于 2019-12-02 14:50:43
Deep Learning with Pytorch_002 chapter03_深入研究神经网络的构建块 在上一章中,我们使用Py Torch的低级操作来构建模块,如网络体系结构、损失函数和优化器。在本章中,我们将探讨解决现实世界问题所需的神经网络的一些重要组成部分,以及PyTorch如何通过提供大量的高级函数来抽象出大量的复杂性。 本章将讨论以下主题: 深入研究神经网络的各种构建块 探索PyTorch中的高级功能来构建深度学习体系结构 将深度学习应用在一个真实图像分类问题 任何深入的学习训练都需要获取数据,构建一个总体上是将一堆层聚集在一起的体系结构。 理解PyTorch为构建层、损失函数和优化器提供的更高层次的抽象。 层次——神经网络的基本块 最重要的层之一——线性层 对输入的数据应用线性变换: y = x A T + b y y = xA^T + by y = x A T + b y torch.randn(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor 返回一个由均值为0、方差为1的正态分布(标准正态分布)中的随机数组成的张量。 o u t i ∼ N ( 0 , 1 ) out i ∼N(0,1) o u t i ∼ N ( 0 ,

tf.train.GradientDescentOptimizer().minimize()细致探索

孤街浪徒 提交于 2019-12-01 20:37:05
1.tf.train.GradientDescentOptimizer().minimize() 其中的minimize可以拆为以下两个步骤: ① 梯度计算 ② 将计算出来的梯度应用到变量的更新中 拆开的好处是,可以对计算的梯度进行限制,防止梯度消失和爆炸 #方法1:拆开为两部分 import tensorflow as tf tf . reset_default_graph ( ) #创建变量 with tf . variable_scope ( 'var' ) : weights = tf . get_variable ( name = 'w' , initializer = tf . constant ( 2.0 ) ) input = tf . get_variable ( name = 'x' , initializer = tf . constant ( 3.0 ) ) loss = weights * input * input #定义优化器,计算梯度和应用梯度 print ( loss ) print ( 'weight_name:' , weights . name ) print ( 'input_name:' , input . name ) optimizer = tf . train . GradientDescentOptimizer (

优达学城自动驾驶课程项目——车道检测

时光总嘲笑我的痴心妄想 提交于 2019-12-01 17:20:21
  汽车在道路上行驶需要遵循一定的行驶规则,路面的车道则起到规范汽车行驶规则的作用。车道的种类有很多种,如单行线、双行线,虚线、网格线等,不同颜色、形状的车道线代表着不同的行驶规则,汽车和行人可以根据这些规则来使用道路,避免冲突。因此,准确检测并识别车道类型,并按照相应规则正确行驶,是汽车实现自动驾驶的基础。   优达学城的自动驾驶项目课程包含了一个车道线检测项目,其主要目的就是教给无人车如何检测并识别车道,本文档将该项目内容进行总结整理。   车道线检测方法主要分为两类:(1)基于道路特征的车道线检测;(2)基于道路模型车道线检测。基于道路特征的车道线检测作为主流检测方法之一,主要是利用车道线与道路环境的物理特征差异进行图像的分割与处理,从而突出车道线特征,以实现车道线的检测。该方法复杂度较低,实时性较高,但容易受到道路环境干扰。基于道路模型的车道线检测主要是基于不同的二维或三维道路图像模型(如直线型、抛物线型、样条曲线型、组合模型等),采用相应方法确定各模型参数,然后进行车道线拟合。该方法对特定道路的检测具有较高的准确度,但局限性强、运算量大、实时性较差。   本项目采用的是基于道路灰度特征的车道线检测方法。主要流程如下: (1)灰度图像转换   自动驾驶车载摄像头实时拍摄的照片为RGB格式,为了能够提取其灰度特征,首先要将3通道的RGB图形转换为单通道的gray图

GAN3

孤街浪徒 提交于 2019-12-01 09:45:23
转载 GAN阶段性小结(损失函数、收敛性分析、训练技巧、应用“高分辨率、domain2domain”、研究方向) 对于GAN的研究已经有了一段时间,有以下感觉: 1.感觉赶了一个晚班车,新思路很难找到了,再往下研究就需要很深入了 2.在图像领域已经有了大量的工作,效果很不错;而在自然语言领域,目前来说效果并不显著(当然目前CV本来发展就领先于NLP) 3.接下来会结合实验室的优势,在与强化学习的结合、对话生成、VQA上做进一步研究 4.我会对GAN领域的各个方面逐步写总结,做一个类似tutorial的文档,帮助大家快速了解GAN,感觉它已经是一个基本的组件一样,不用那么高大上 以前看论文总是在PDF上草草总结,时间一久基本就都忘了,只能记个大概,这是做研究的大忌,也是老师经常强调的一点,接下来我们定期把看过的论文总结发布在知乎专栏,用来督促自己 总结的时候,我会把别人的总结精简,再加上我自己的理解,这样站在巨人的肩膀上速度会快一些,分析也会更加深入一些,同时该有的引用和参考我都把原作者的链接放在下面 希望可以交流分享,督促自己,方便别人 GAN相对RBMs、DBMs、DBMs、VAE的优势 RBMs, DBNs and DBMs all have the difficulties of intractable partition functions or intractable

Pytorch入门教程

淺唱寂寞╮ 提交于 2019-11-30 19:44:59
  记得刚开始学TensorFlow的时候,那给我折磨的呀,我一直在想这个TensorFlow官方为什么搭建个网络还要画什么静态图呢,把简单的事情弄得麻烦死了,直到这几天我开始接触Pytorch,发现Pytorch是就是不用搭建静态图的Tensorflow版本,就想在用numpy一样,并且封装了很多深度学习高级API,numpy数据和Tensor数据相互转换不用搭建会话了,只需要一个转换函数,搭建起了numpy和TensorFlow爱的桥梁。   Pytorch自17年推出以来,一度有赶超TensorFlow的趋势,是因为Pytorch采用动态图机制,替代Numpy使用GPU的功能,搭建网络灵活。 Pytorch和TensorFlow的区别: TensorFlow是基于静态计算图的,静态计算图是先定义后运行,一次定义多次运行(Tensorflow 2.0也开始使用动态计算图) PyTorch是基于动态图的,是在运行的过程中被定义的,在运行的时候构建,可以多次构建多次运行 张量   Pytorch中的Tensor和ndarray类似,区别在于ndarray不能再GPU上加速,而Tensor可以使用GPU加速 构建一个未初始化3*3的矩阵 import torchx = torch.empty(3,3) # tensor([[1.0469e-38, 5.9694e-39, 8

文献笔记:Plasmonic metagratings for simultaneous determination of Stokes parameters

假装没事ソ 提交于 2019-11-30 16:42:15
等离子体元分析用于同时测定斯托克斯参数 摘要: 测量光的偏振态是一个固有的难题,因为正交偏振态之间的相位信息在检测过程中往往会丢失。 在本文中,我们提出了在适当设计的相位梯度双折射元表面上,归一化斯托克斯参数与衍射对比的等价性,并引入了全极化双折射元的概念。 元网格由三个交织的元表面组成,通过同时进行(即 (平行)相应衍射强度的测量,可以立即揭示被测偏振态的斯托克斯参数。 基于800 nm波长反射的等离子体元表面,我们设计并实现了相梯度双折射元表面和相应的元配准,而所制备组件的实验表征令人信服地展示了预期的功能。 我们预见在任何感兴趣的频率范围内,在紧凑的偏振设置中使用元agrating. 1. 介绍 测量光的偏振态是一个固有的难题,因为正交偏振态之间的相位信息在检测过程中往往会丢失。因此,确定偏振通常需要一系列测量, 在探测器前连续放置适当排列的偏振器 ,从而最终获得与椭圆偏振参数类似的 斯托克斯参数 ,充分描述偏振状态。 作为一种一次性测量偏振状态的方法,通过将入射光束分成几束,并使用多个偏振镜和探测器,可以使测量过程并行化,(虽然这种方法增加了光学系统的尺寸和复杂性)。 尽管在确定偏振方面存在诸多不便,但在大多数应用中,知道这个参数是至关重要的,因为光与物质的相互作用通常依赖于偏振。作为典型的例子,我们提到了平面波在材料界面的反射和传输,在这些界面中,正交极化的菲涅耳系数不同

拉格朗日乘子法和KTT条件

梦想的初衷 提交于 2019-11-30 16:13:54
    这篇博文中直观上讲解了拉格朗日乘子法和 KKT 条件,对偶问题等内容。     首先从无约束的优化问题讲起,一般就是要使一个表达式取到最小值: m i n f ( x ) m i n f ( x )     如果问题是 m a x f ( x ) m a x f ( x ) 也可以通过取反转化为求最小值 m i n − f ( x ) m i n − f ( x ) ,这个是一个习惯。对于这类问题在高中就学过怎么做。只要对它的每一个变量求导,然后让偏导为零,解方程组就行了。 极值点示意图     所以在极值点处一定满足 d f ( x ) d x = 0 d f ( x ) d x = 0 (只是必要条件,比如 f ( x ) = x 3 f ( x ) = x 3 在 x = 0 x = 0 处就不是极值点),然后对它进行求解,再代入验证是否真的是极值点就行了。对于有些问题可以直接通过这种方法求出解析解(如最小二乘法)。     但是也有很多问题解不出来或者很难解,所以就需要梯度下降法、牛顿法、坐标下降法之类的数值迭代算法了(感知机 、logistic 回归中用到)。     对于这些迭代算法就像下面这张图一样,我们希望找到其中的最小值。一个比较直观的想法是先找一个起点,然后不断向最低点靠近。就先把一个小球放到一个碗里一样。 迭代算法     一开始要找一个起始点

PyTorch学习笔记

瘦欲@ 提交于 2019-11-30 12:49:33
【PyTorch深度学习60分钟快速入门 】Part1:PyTorch是什么?来源:https://www.cnblogs.com/leejack/p/8370634.html import torch import numpy as np #用于替代NumPy(torch对象叫张量,带前缀和括号,并用逗号分隔,numpy对象叫数组,用空格分隔),#torch可以使用GPU的计算力,一种深度学习研究平台,可以提供最大的灵活性和速度 x = torch.Tensor(5, 3) #创建一个5x3且未初始化的矩阵,如果将首字母大写的Tensor改成小写tensor,会报错 #print(x) x = torch.rand(5, 3)#创建一个随机初始化的矩阵rand表示0~1之间均匀分布的随机数 #print(x) #print(x.size()) y = torch.rand(5, 3) #print(x + y) #print(torch.add(x, y)) result = torch.Tensor(5, 3) #print(result) torch.add(x, y, out=result) #print(result) y.add_(x) #原地替换,任何原地改变张量值的操作后缀都是固定的_,例如:x.copy_(y)、x.t_(),都将原地改变x的值。 #print(y

梯度下降解决线性回归问题(带超详细注释)

馋奶兔 提交于 2019-11-30 12:39:22
学习笔记 # -*- coding=utf-8 -*- # 梯度下降方法快速解决线性回归问题 import numpy as np import matplotlib.pyplot as plt import tensorflow as tf # -----------------------------------------------模拟准备直线 y=0.1 * x + b 附近100个点的坐标--------------------------- # 构建数据 points_num = 100 vectors = [] # 使用numpy 正态随机函数 随机初始化100个点 # 点的坐标(x,y)值对应一个线性方程 y = 0.1 * x + 0.2 # 权重(Weight 0.1 偏差(Bias) 0.2 for i in range(points_num): # np.random.normal(mean,stdev,size) 返回均值为mean,标准差为stdev,长度为size的列表 x1 = np.random.normal(0.0,0.66) y1 = 0.1 * x1 + 0.5 + np.random.normal(0.0,0.04) vectors.append([x1,y1]) # -----------------------------------