- 博客(50)
- 收藏
- 关注
原创 切片、迭代、列表生成式、生成器和迭代器-python
一、关于切片相关1、读取元素(1)较为笨拙的方法>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']>>> r = []>>> n = 3>>> for i in range(n):... r.append(L[i])... >>> r['Michael', 'Sarah', 'Tracy'](2)经典方法通过切片的方式获取元素值&
2022-01-23 23:17:56 293
原创 RepVGG网络结构解读
论文连接:论文代码:一、RepVGG网络结构的细节RepVGG与目前业界较优的网络模型在精度和性能上的比较,左边的RepVGG为轻量级和中量级的网络模型结构的对比结果图,右边的RepVGG为重量级的网络模型结构的对比结果图。可以发现RepVGG在精度和速度上均取得非常有竞争力的结果。重量级的RepVGG网络模型在ImageNet数据集上的精度超过了80%,这是基础模型的首次能够达到这个精度,非常令人惊喜。1、网络结构作者提出了一个简单但强大的卷积神经网络架构,该架构具有类似于VGG的
2021-01-17 23:09:08 4208 2
原创 时间复杂度和空间复杂度分析
如何评价一段代码或算法的性能和好坏?目前衡量代码质量的指标主要有两个:分别为时间复杂度和空间复杂度。其中时间复杂度指的是执行当前算法所消耗的时间,空间复杂度指的是指执行当前算法需要占用多少内存空间。有的时候时间和空间是不可兼得的,需要从中去取一个平衡点。下面简单描述一下如何计算时间复杂度和空间复杂度一、时间复杂度利用大O符号表示法来表示时间复杂度,即T(n) = O(f(n))。其中f(n) 表示每行代码执行次数之和,而 O 表示正比例关系,这个公式的全称是:算法的渐进时间复杂度。for(i=
2021-01-17 22:08:28 378
原创 字符串相关leetcode—python实现(二)
1、翻转单词顺序序列(1)问题:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?...
2020-03-27 23:06:27 306
原创 字符串相关leetcode—python实现(一)
1、替换空格(1)题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。(2)思路:将字符串转换成list的形式进行处理,用join的方式将list转化成string形式(3)实现代码:def replaceSpace(self, s): s = list(s) n=len(s)...
2020-03-27 00:29:41 332
原创 VGGNet网络模型
一、VGGNet模型简介 VGGNet由牛津大学的视觉几何组(Visual Geometry Group,简称VGG)提出的,在ILSVRC-2014中取得了定位任务第一名和分类任务第二名,它总共有19层。其突出贡献在于证明使用很小的卷积(3*3)来增加网络深度可以有效提升模型的效果,而且VGGNet对其他数据集具有很好的泛化能力。VGGNet的缺点就是需要更大的存储空间,参数量达到达到140
2017-09-11 13:49:29 2753
原创 GoogLeNet网络模型
一、GoogleNet模型简介 GoogleNet和VGG是2014年imagenet竞赛的双雄,这两类模型结构有一个共同特点是go deeper。跟VGG不同的是,GoogleNet做了更大胆的网络上的尝试而不是像VGG继承了Lenet以及AlexNet的一些框架,该模型虽然有22层,但大小却比AlexNet和VGG都小很多,性能优越。 深度学习以及神经网络快速发展,人们容易通过更高性能的
2017-09-11 10:28:04 5745
原创 RNN网络详解
一、RNN网络简介 RNN网络的目的是用来处理序列数据,保存前后序列之间的前后关系,让网络对于信息具有记忆能力。对于传统的神经网络模型,它是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于一些问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的,再比如你要判断一个人说话的情感,肯定
2017-09-09 14:29:04 5761
原创 AlexNet模型
一、AlexNet模型简介 上面对LeNet这个网络模型进行了介绍,该模型对手写数字是被具有较高的识别率,但是对于大数据量、复杂的物体图片分类,该模型的效果还是远远达不到要求的。在此背景下,AlexNet模型被提出,该模型在2012年imagenet上的图像分类challenge上赢得了的冠军。AlexNet模型证明了CNN在复杂模型下的有效性,并使用GPU使得大数据训练在可接受的时间范围内得
2017-09-07 20:53:36 3042
原创 LeNet网络模型
一、LeNet模型 LeNet模型是一种用来识别手写数字的最经典的卷积神经网络,他是Yann LeCun在1998年设计并提出的。当年美国大多数银行就是用它来识别支票上面的手写数字的。它的识别准确性非常高。 LeNet的网络模型框架如下图所示: 下面对网络模型的每一层进行分析: LeNet-5包含输入共有8层,每层都包含可训练参数(连接权重)。 第一层:输入层。输
2017-09-06 22:14:20 5688
原创 CNN网络层详解
常见的CNN网络主要包含下面几个网络结构:卷积层、激活函数、池化层和全连接层。下面对这几个结构在卷积神经网络中的作用进行介绍。 一、卷积层 1.1 卷积操作和卷积层的作用 在介绍卷积层的作用之前,自己先介绍一下卷积操作的概念。以下图为例,较大网格表示一幅图片,有颜色填充的网格表示一个卷积核,卷积核的大小为3*3。假设我们做步长为1的卷积操作,表示卷积核每次向右移动一个像素(当移动到边界时回
2017-09-05 18:27:00 5100
原创 动态规划详解
一、基本思想 动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。 由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子
2017-08-20 23:32:51 1076
原创 贪心算法详解
一、简介 1.1 贪心算法基本思想 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。 1.2 贪心算法跟动态规划的区别 贪
2017-08-20 15:08:22 1470
原创 分治算法详解
一、分治算法的基本思想 当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思
2017-08-20 10:44:37 1222
原创 神经网络中常见的激活函数
一、背景 为什么要使用激活函数?之前其实也有点困惑,最近整理了一下之前的笔记,总写一下。 首先是第一个问题:为什么要使用激活函数以及它的作用是什么?使用激活函数的原因在于,以两类数据的分类为例,这些数据真正能线性可分的情况还是比较少的,此时如果数据不是线性可分的我们又该如何分类呢?这个时候我们就无法再简单利用一条直线来对数据进行很好的划分,这时我们需要加入非线性的因素来对数据进行分类。所
2017-08-19 18:57:29 6617
原创 快速排序以及常见排序算法性能对比
一、快速排序(交换排序) 1.1 简介 快速排序(Quick Sort)由图灵奖获得者Tony Hoare发明,被列为20世纪十大算法之一。冒泡排序的升级版,交换排序的一种。快速排序的时间复杂度为O(nlog(n))。 快速排序的基本思想是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个
2017-08-15 11:38:54 1985
原创 堆排序和归并排序
一、堆排序 1.1 简介 堆排序与快速排序,归并排序一样都是时间复杂度为O(n*logn)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的堆。 堆的定义:n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。其中i=1,2,…,n/2向下取整。 情形1:ki <= k2i 且ki <= k2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki
2017-08-15 11:05:57 4511
原创 直接插入排序和希尔排序
一、直接插入排序(插入排序) 1.1 基本思想和原理 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。 要点:设立哨兵,它有两个作用: ① 进人查找(插入位置)循环之前,它保存了R[i]的副本,使不致于因记录后移而丢失R[i]的内容; ② 它的主要作用
2017-08-15 00:05:53 678
原创 冒泡排序和简单选择排序
一、冒泡排序(交换排序) 1.1 基本思想和原理 冒泡排序是一种交换排序,它的思想是: 每次比较两个相邻的元素, 如果他们反序就把他们交换位置,直到没有反序的记录为止。 以下面五个数为例, 从大到小排序, 对相邻的两位进行比较,数据为:12, 35, 99, 18, 76 * 第一趟: * 第一次比较: 35, 12, 99, 18, 76 * 第二次比较
2017-08-14 21:11:15 2439
原创 七大查找常见算法(下)
一、线性索引查找 1.1 简介 前面讲的几种比较高效的查找方法是基于有序的基础之上的(详见七大查找常见算法(上)),而事实上,数据集可能增长非常快,例如,某些微博网站或大型论坛的帖子和回复总数每天都是成百万上千万条,或者一些服务器的日志信息记录也可能是海量数据,要保证记录全部是按照当中的某个关键字有序,其时间代价是非常高昂的,所以这种数据都是按先后顺序存储的。 对于这样的查找表,我们如
2017-08-14 18:44:39 17839 2
原创 神经网络优化方法(避免过拟合,提高模型泛化性)
一、背景简介 在深度学习和机器学习的各种模型训练过程中,在训练数据不够多时,自己常常会遇到的问题就是过拟合(overfitting),过拟合的意思就是模型过度接近训练的数据,使得模型的泛化能力降低,泛化能力降低表现为模型在训练集上测试的误差很低,但是真正在验证集上测试时却发现error很大,如下图所示。所以此时得到的过拟合的模型不是我们想要的模型,我们需要对模型进行优化,从而提高其泛化性能,使
2017-08-08 17:57:41 20754 1
原创 七大查找常见算法(上)
一、顺序查找算法 1.1 基本思想 顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从最后一个开始逐个比较,直到找出与给定关键字相同的数为止,它的缺点是效率低下。 1.2 实现代码 (1) C++实现://顺序查找int Sequence_Search(int a[], int value, int n){ int i;
2017-08-08 11:13:40 2716
原创 RANSAC 特征匹配算法解析
一、RANSAC特征匹配算法简介 RANSAC算法是RANdom SAmple Consensus的缩写,意为随机抽样一致。表面上的意思就是从匹配样本中随机取样,寻找一致的样本点。RANSAC算法是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。它是在1981年由Fischler和Bolles最先提出。 在利用已有算法进行特征点匹配时,常存在的一个问题
2017-07-18 10:53:37 13360 3
原创 ORB 特征点检测匹配算法
一、ORB算法 ORB是是ORiented Brief的简称。这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB:An Efficient Alternative to SIFTor SURF”的文章中提出。ORB算法分为两部分,分别是特征点提取和特征点描述。在ORB算法中,是用FAST
2017-07-18 09:06:37 6445
原创 BRIEF 特征点描述算法
一、BRIEF特征点描述算法简介 BRIEF是Binary Robust Independent Elementary Features的缩写。这个特征描述子是由EPFL的Calonder在ECCV2010上提出的。主要思路就是在特征点附近随机选取若干点对,将这些点对的灰度值的大小,组合成一个二进制串,并将这个二进制串作为该特征点的特征描述子。这种方法摈弃了利用区域灰度直方图描述特征点的传统方
2017-07-16 10:08:43 3876
原创 FAST特征点检测算法
一、FAST算法简介 如今,特征点检测的算法有很多,从最初的Moravec,到Harris,再到SIFT、SUSAN、GLOH、SURF算法,可以说特征点提取算法层出不穷。各种改进算法PCA-SIFT、ICA-SIFT、P-ASURF、R-ASURF、Radon-SIFT等也是搞得如火如荼。其中上面的算法如SIFT、SURF提取到的特征效果非常好(有较强的不变性),但是时间消耗依然很大,而在一
2017-07-14 16:27:25 6485
原创 OpenCV SIFT特征点提取算法
一、SIFT算法 1、简介 SIFT是Scale-invariant feature transform的缩写,翻译过来的意思就是尺度不变特征转换,它是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points)及其有关scale 和 orientation 的描述子得到特征并进行图像特征点匹配,具体为在空间尺度中寻找极值点,并提取
2017-07-14 15:43:01 3632 1
原创 仿射变换和SURF特征点匹配
一、仿射变换 1.1、仿射变换简介 仿射变换(Affine Transformation)是空间直角坐标系的变换,从一个二维坐标变换到另一个二维坐标,仿射变换是一个线性变换,他保持了图像的“平行性”和“平直性”,即图像中原来的直线和平行线,变换后仍然保持原来的直线和平行线,仿射变换比较常用的特殊变换有平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotatio...
2017-07-09 21:00:37 2949
原创 重映射与SURF特征点检测与匹配
一、重映射 1.1、简介 重映射在图像处理中主要的功能为:将一个图像中一个位置的像素放置到另一个图像指定位置的过程,可以根据自己设定的函数将图像进行变换,较常见的功能有关于x轴翻转,关于y轴翻转,关于x、y轴翻转。为了完成映射过程,有必要获得一些插值为非整数像素坐标,因为源图像与目标图像的像素坐标不是一一对应的。在实际应用中,我们通过重映射来表达每个像素的位置 (x,y),转换关系如下图所示
2017-07-09 15:12:34 1101
原创 OpenCV 霍夫变换直线检测(SHT、MSHT和PPHT)
一、霍夫变换简述 霍夫变换(Hough Transform)是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是从黑白图像中检测直线(线段)。霍夫变换是在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。 霍夫变换是于1962年由PaulH
2017-07-08 17:14:20 6260 2
原创 OpenCV图像边缘检测(Laplace算法)
一、Laplace算法简介 二阶微分在亮的一边是负的,在暗的一边是正的。常数部分为零。可以用来确定边的准确位置,以及像素在亮的一侧还是暗的一侧。 拉普拉斯算子是最简单的各向同性微分算子,具有旋转不变性。一个二维图像函数 的拉普拉斯变换是各向同性的二阶导数,定义为: 其中: 由于 Laplacian使用了图像梯度,它内部的代码其实是调用了 Sobel 算子的。同时,可以让一幅图
2017-07-08 11:19:27 2596
原创 OpenCV图像边缘检测(sobel算法)
一、sobel算法简介 索贝尔算子(Sobel operator)主要用作边缘检测,它是一离散性差分算子,它结合了高斯平滑和微分求导,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量。 Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当
2017-07-08 10:39:52 8778
原创 OpenCV图像边缘检测(Canny算法)
一、图像边缘检测简介 图像的边缘是指图像局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,既从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值。图像的边缘部分集中了图像的大部分信息,图像边缘的确定与提取对于整个图像场景的识别与理解是非常重要的,同时也是图像分割所依赖的重要特征,边缘检测主要是图像的灰度变化的度量、检测和定位,自从1959提出图像边缘检测以来,经
2017-07-08 09:59:06 2345
原创 OpenCV 2.4.9核心模块介绍
在自己的笔记本电脑里,OpenCV常用到的主要的核心模块都放C:\Users\cyk6625\Downloads\opencv\build\include\opencv2路径下,如下图所示,下面将按照图片上的顺序对这些核心模块的作用进行简单的介绍。 1、calib3d模块 它就是Calibration(校准)加3D这两个词的组合缩写。这个模块主要是相机校准和三维重建相关的内容。基本的多视角几
2017-07-06 20:24:02 1266
原创 线性回归及梯度下降算法详解
一、线性回归问题 回归最简单的定义是,给出一个点集D,用一个函数去拟合这个点集,并且使得点集与拟合函数间的误差最小,如果这个函数曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称为二次回归。 总的来说,回归的目的就是建立一个回归方程用来预测目标值,回归的求解就是求这个回归方程的回归系数。预测的方法当然十分简单,回归系数乘以输入值再全部相加就得到了预测值。 下面以一元
2017-07-05 12:04:37 11538
原创 深度解析卷积神经网络的实现细节
一、卷积神经网络概述 卷积神经网络是一种特殊的深层的神经网络模型,它的特殊性体现在两个方面,一方面它的神经元间的连接是非全连接的,这是由局部感知原理所启发的;另一方面权重是共享的(即相同的),即在利用一个滤波器提取图像的特征时使用的权重是同一个。它的非全连接和权值共享的网络结构使之更类似于生物神经网络,这降低了神经网络模型的复杂度,减少了权值的数量。 下面以单层神经网络为例来简述卷积神经
2017-07-04 22:22:27 1420
原创 反向传播算法的公式推导(BP算法)
假设训练的样本集包含m个样例,因为此时对于单个样本我们将神经网络的代价函数定义为: 其中hW,b(x)为输入数据x经过神经网络前向传播得到的输出结果,y为期望值。 所以对于这个包含m个样本集的数据集而言,整体的代价函数应为: 上式关于J(W,b)定义中的第一项是一个均方差项。第二项是一个权重衰减项,其目的是减小权重的幅度,防止过度拟合。 在实际应用当中,我们使用批量梯度下降算
2017-07-04 11:49:21 7214
原创 反向传播算法的案例解析
三、反向传播算法的案例 3.1、前向传播计算 以下面神经网络的基本结构,已对神经网络进行了初始化,赋予了权重、偏置和输入输出: 对网络开始前向传播计算: 因为h1使用了神经元激励函数,所以h1的输出为: 同理可得,h2的输出为: 继续前向传播,计算o1节点的输出为: 同理,得到o2节点的输出为: 接下来就是计算总的误差: 计算好误差,接下俩就需要利用
2017-07-04 09:32:29 1794
原创 前馈神经网络和反向传播算法
一、前馈神经网络 在对多层神经网络进行分析前,先对神经网络中的一些字符进行一些说明: 下图为一个多层神经网络的简单示意图: 每个神经元的表达式如下: 所以可知前向传播的步骤如下,就是一步一步对节点对应的值进行计算: 二、反向传播算法 反向传播算法是为了更好更快的训练前馈神经网络,从而得到神经网络每一层的权重参数和偏置参数。下面以一组图来讲解前向传播和反向
2017-07-03 23:28:00 6261
原创 神经网络解析和深度学习简介
一、前言 我们首先来看一个经典的神经网络结构: 上面的神经网络是有三个部分组成,分别为输入层、隐藏层和输出层。输入层有3个输入单元,隐藏层有4个单元,输出层有2个单元。根据这个神经网络我们说明三点: (1)设计一个神经网络时,输入层与输出层的节点数往往是固定的,而中间层则可以自由指定; (2)神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向,跟训练时的数据流有一定的区别
2017-07-03 18:24:02 1414
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人