自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(295)
  • 收藏
  • 关注

原创 AlexNet

AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的。也是在那年之后,更多的更深的神经网路被提出,比如优秀的vgg,GoogleLeNet。其官方提供的数据模型,准确率达到57.1%,top 1-5 达到80.2%. 这项对于传统的机器学习分类算法而言,已经相当的出色。 AlexNet的网络结构示意一下:Alexnet网络中各个...

2018-07-31 00:07:28 1856 4

原创 LeNet-5

LeNet-5卷积神经网络模型 LeNet-5:是Yann LeCun在1998年设计的用于手写数字识别的卷积神经网络,当年美国大多数银行就是用它来识别支票上面的手写数字的,它是早期卷积神经网络中最有代表性的实验系统之一。LenNet-5共有7层(不包括输入层),每层都包含不同数量的训练参数,如下图所示。 LeNet-5中主要有2个卷积层、2个池化层、3个全连接层3种连接方式卷积层 ...

2018-07-31 00:07:21 8273

原创 深拷贝与浅拷贝

在对含有指针成员的对象进行拷贝时,必须要自己定义拷贝构造函数,使拷贝后的对象指针成员有自己的内存空间,即进行深拷贝,这样就避免了内存泄漏发生。 浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。...

2018-07-31 00:07:11 159

原创 ELU激活函数

           ELU激活函数           融合了sigmoid和ReLU,左侧具有软饱和性,右侧无饱和性。 右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。 ELU的输出均值接近于零,所以收敛速度更快。 在 ImageNet上,不加 Batch Normalization 30 层以上的 ReLU 网络会无法收敛,PReLU网...

2018-07-31 00:06:56 44458 1

原创 ReLU,P-ReLU, Leaky-ReLU激活函数

               ReLU的全称是Rectified Linear Units,是一种后来才出现的激活函数。 可以看到,当x<0时,ReLU硬饱和,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。这让我们能够直接以监督的方式训练深度神经网络,而无需依赖无监督的逐层预训练。 然而,随着训练的推进,部分输入会落...

2018-07-31 00:06:39 6310

原创 tanh激活函数

tanh激活函数                      tanh也是一种非常常见的激活函数。与sigmoid相比,它的输出均值是0,使得其收敛速度要比sigmoid快,减少迭代次数。 然而,从图中可以看出,tanh和sigmoid一样具有软饱和性,从而造成梯度消失。...

2018-07-31 00:05:57 8286

原创 sigmoid激活函数

 sigmoid              sigmoid 是使用范围最广的一类激活函数,具有指数函数形状,它在物理意义上最为接近生物神经元。 此外,(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数。 然而,sigmoid也有其自身的缺陷,最明显的就是饱和性。从上图可以看到,其两侧导数逐渐趋近于0 。具有这种性质的称为软饱和激活函数...

2018-07-31 00:05:49 1303

原创 栈的实现(C++)

头文件:#ifndef MYSTACK_H#define MYSTACK_Hclass MyStack{public:    MyStack(int size);             //分配内存初始化栈空间,设定栈容量,栈顶    ~MyStack();                      //回收栈空间内存    bool stackEmpty();        ...

2018-07-31 00:05:38 189

原创 RMSProp均方根反向传播法

RMSPropRMSProp通过引入一个衰减系数,让r每回合都衰减一定比例,类似于Momentum中的做法。具体实现: 需要:全局学习速率 ϵ, 初始参数 θ, 数值稳定量δ,衰减速率ρ中间变量: 梯度累计量r(初始化为0) 每步迭代过程: 1. 从训练集中的随机抽取一批容量为m的样本{x1,…,xm},以及相关的输出yi2. 计算梯度和误差,更新r,再根据r和梯度计算参数更新量...

2018-07-31 00:05:28 2267

原创 Adam自适应矩估计

AdamAdam(Adaptive Moment Estimation)本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。具体实现: 需要:步进值 ϵ, 初始参数 θ, 数值稳定量δ,一阶动量衰减系数ρ1, 二阶动量衰减系数ρ2其中几个取值一般为:δ=1...

2018-07-31 00:05:14 6655

原创 Nesterov Momentum牛顿动量法

Nesterov Momentum这是对之前的Momentum的一种改进,大概思路就是,先对参数进行估计,然后使用估计后的参数来计算误差具体实现: 需要:学习速率 ϵ, 初始参数 θ, 初始速率v, 动量衰减参数α每步迭代过程: 1. 从训练集中的随机抽取一批容量为m的样本{x1,…,xm},以及相关的输出yi2. 计算梯度和误差,并更新速度v和参数θ:      注意在估...

2018-07-30 00:02:53 2672

原创 Momentum动量法

SGD方法的一个缺点是其更新方向完全依赖于当前batch计算出的梯度,因而十分不稳定。Momentum算法借用了物理中的动量概念,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力:        Momentum算法会观察历史梯度vt−1...

2018-07-30 00:02:31 1182

原创 传统梯度下降法面临的挑战

选择适当的学习率α较为困难。太小的学习率会导致收敛缓慢,而学习速度太块会造成较大波动,妨碍收敛。 目前可采用的方法是在训练过程中调整学习率大小,例如模拟退火算法:预先定义一个迭代次数m,每执行完m次训练便减小学习率,或者当cost function的值低于一个阈值时减小学习率。然而迭代次数和阈值必须事先定义,因此无法适应数据集的特点。 上述方法中, 每个参数的 learning rate 都是...

2018-07-30 00:02:21 563

原创 深度神经网络的正则化

1. DNN的L1&L2正则化  L1正则化和L2正则化原理类似,这里重点讲述DNN的L2正则化。    假如我们的每个样本的损失函数是均方差损失函数,则所有的m个样本的损失函数为:     则加上了L2正则化后的损失函数是:    其中,λ即我们的正则化超参数,实际使用时需要调参。而w为所有权重矩阵W的所有列向量。2. DNN通过集成学习的思路正则化   ...

2018-07-30 00:02:13 314

原创 DNN前向传播算法

所谓的DNN的前向传播算法也就是利用若干个权重系数矩阵W,偏倚向量b来和输入值向量x进行一系列线性运算和激活运算,从输入层开始,一层层的向后计算,一直到运算到输出层,得到输出结果为值。 输入: 总层数L,所有隐藏层和输出层对应的矩阵W,偏倚向量b,输入值向量x 输出:输出层的输出aL 1) 初始化a1=x 2)   for l=2 to L, 计算:              (矩阵...

2018-07-30 00:02:03 807

原创 EM算法

EM算法解决这个的思路是使用启发式的迭代方法,既然我们无法直接求出模型分布参数,那么我们可以先猜想隐含数据(EM算法的E步),接着基于观察数据和猜测的隐含数据一起来极大化对数似然,求解我们的模型参数(EM算法的M步)。由于我们之前的隐藏数据是猜测的,所以此时得到的模型参数一般还不是我们想要的结果。不过没关系,我们基于当前得到的模型参数,继续猜测隐含数据(EM算法的E步),然后继续极大化对数似然,求...

2018-07-30 00:01:53 227

原创 处理不平衡数据

我们做分类算法训练时,如果训练集里的各个类别的样本数量不是大约相同的比例,就需要处理样本不平衡问题。也许你会说,不处理会怎么样呢?如果不处理,那么拟合出来的模型对于训练集中少样本的类别泛化能力会很差。 如何解决这个问题呢?一般是两种方法:权重法或者采样法。 权重法是比较简单的方法,我们可以对训练集里的每个类别加一个权重class weight。如果该类别的样本数多,那么它的权重就低,反之则权重...

2018-07-30 00:01:38 320

原创 异常特征样本清洗

我们在实际项目中拿到的数据往往有不少异常数据,有时候不筛选出这些异常数据很可能让我们后面的数据分析模型有很大的偏差。那么如果我们没有专业知识,如何筛选出这些异常特征样本呢?常用的方法有两种。 第一种是聚类,比如我们可以用KMeans聚类将训练样本分成若干个簇,如果某一个簇里的样本数很少,而且簇质心和其他所有的簇都很远,那么这个簇里面的样本极有可能是异常特征样本了。我们可以将其从训练集过滤掉。 ...

2018-07-30 00:01:30 1687

原创 特征的标准化和归一化

z-score标准化:这是最常见的特征预处理方式,基本所有的线性模型在拟合的时候都会做 z-score标准化。具体的方法是求出样本特征x的均值mean和标准差std,然后用(x-mean)/std来代替原特征。这样特征就变成了均值为0,方差为1了。 max-min标准化:也称为离差标准化,预处理后使特征值映射到[0,1]之间。具体的方法是求出样本特征x的最大值max和最小值min,然后用(x-m...

2018-07-30 00:01:22 2803

原创 树中两个节点的最低公共祖先

思路:先求出根结点到两个节点的路径,保存在链表或者list中,然后问题转换为求两条路径的最后一个公共结点。bool GetNodePath(const TreeNode* pRoot, const TreeNode* pNode, list<const TreeNode*>& path){    if(pRoot == pNode)        return tru...

2018-07-30 00:01:12 182

原创 SQL设计的优化

在执行数据库的查询时,如果要查询的数据有很多,假设有2000万条,用什么方法可以提高查询效率(速度)?在数据库设计,SQL设计方面有什么优化的方法?注:本题考查的是大数据量数据条件下,数据库设计和数据查询优化的问题,是数据库知识的深度考查。结合本题目,已知数据量为2000万条,为了提高查询效率,需要从数据库的设计、SQL设计方面入手,结合数据库的基础知识,尽量多地总结出提高查询效率的方法,...

2018-07-29 00:12:58 238

原创 数据库创建索引的规则

数据库适合创建索引的规则如下:表的主键,外键应该创建索引; 数据量比较大的表应该创建索引; 经常需要和其他表建立连接,在连接字段应该创建索引; 经常出现在where子句中的字段,应该创建索引。数据库不适合创建索引的情况:比较大的文本字段或者长度较长的字段,不适合创建索引; 频繁进行数据操作的表,不适合创建过多的索引,因为额外维护索引表需要更多的开销; 小型表(数据量低于300行...

2018-07-29 00:12:50 6032

原创 存储过程

存储过程是为了完成某一特定功能由用户定义的一组SQL语句的集合。它经过第一次编译后再次调用不需要再次编译,从而提高数据库的执行效率。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行该存储过程。存储过程可调用其他存储过程。使用存储过程的优点:执行速度快,只在创造时进行编译,数据库对其进行了一次性解析及优化,不需要每次执行再编译。 降低网络流量。存储过程是编译好的代码直接...

2018-07-29 00:12:37 159

原创 事务

事务是作为一个逻辑单元执行一组操作(一组语句),是一个不可分割的整体,任何一个语句操作失败则整个操作失败,之后就会回滚到操作前状态。如果要确保某组任务要么都执行要么都不执行,就可以使用事务。事务的四个属性:原子性:整个数据库事务是不可分割的工作单元,只有事务中所有操作执行成功,才算整个事务成功。 一致性:数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。 隔离性:在并发环境中,...

2018-07-29 00:12:29 143

原创 聚簇索引与非聚簇索引

按照数据表中的记录存储性顺序,分为聚簇索引和非聚簇索引。聚簇索引:聚簇索引指明数据的物理存储顺序的索引,数据行的物理存储顺序与索引存储顺序完全相同,索引顺序决定了数据库中表的记录顺序,先将表中数据进行排序,重新存储。表中建立聚簇索引,数据会按照索引的顺序来存放,索引顺序和物理顺序相同。每个表只能建立一个聚簇索引。非聚簇索引:非聚簇索引完全独立于数据航,其叶结点存储了组成非聚簇索引的关键...

2018-07-29 00:12:23 676

原创 范式

关系模式的规范化是在关系型数据库中减少冗余和对数据库进行优化的过程。常用的分为第一范式1 NF,第二范式2 NF和第三范式3 NF。1 NF:第一范式,在关系模式中每个属性值都是不可再分的最小数据单位;2 NF:第二范式,首先必须满足第一范式,其次,在关系模式中,所有非主键字段完全依赖于任意一个主关键字,即不存在依赖组合关键字中的部分关键字的情况。特例是,如果是单关键字,必然至少是2 NF...

2018-07-29 00:12:15 1076

原创 视图

视图是一个虚拟表,是由select语句组成的查询定义的虚拟表。视图由一张表、多张表或其他试图中的数据经过查询等定义动态生成,视图经过定义便存储在数据库中,与其相应的数据并没有再存储一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改(有一定的限制)、删除等。...

2018-07-29 00:12:08 136

原创 关系模型的完整性约束

关系模型的完整性规则是对关系的某种约束条件。关系的完整性约束分为三类:实体完整性:关系必须有主键,且不能为空;参照完整性:维护实体之间的引用关系,外键可以为空,或者其值为参照关系对应的主键值;用户定义的完整性:由应用环境决定,针对具体关系数据库的约束条件。...

2018-07-29 00:11:11 8141

原创 虚拟存储器

什么是虚拟存储器?就虚拟存储器回答以下问题:1虚拟存储器的应用背景是什么?2虚拟存储器的可行性是什么?3实现虚拟存储器的主要技术是什么?4虚拟存储器可以有多大?虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其运行速度接近与内存速度,但成本却接近于外存。虚拟存储技术是一种性能非常优越的存储管理技术。 虚拟存储器的应用背景:有的作业很大,其要求的内存空间...

2018-07-29 00:11:03 2783

原创 文件管理

在现代操作系统中,常用的文件结构包括连续文件、串联文件和索引文件。连续文件:把在逻辑上连续的文件信息依次存放到物理块中。优点:物理存取较快;缺点:建立文件时必须指定文件长度,不能动态扩展,文件部分被删除后会出现无法使用的零头空间。 串联文件:采用非连续的物理块来存放文件信息。串联文件结构的搜索效率低,不适宜随机存取。 索引文件:将文件存储信息的逻辑块号和物理块号组织成索引,从而便于文件的读...

2018-07-29 00:10:57 199

原创 存储管理

现在操作系统中的内存管理主要包括页式管理、段式管理和段页式管理。 页式管理:在页式管理中,各进程的虚拟空间被划分成长度相等的页。内存空间也按页的大小划分成长度相等的页面。使用请求调页或预调页技术实现了内外存储器的统一管理。 段式管理:段式管理把程序地址空间分成若干大小不等的段,逻辑地址空间由一组段组成,每个段有段名称和段内偏移量,通过地址映射机构把段式虚拟地址转换为物理地址。 段页式管理:将...

2018-07-28 00:10:56 155

原创 死锁

所谓死锁是指多个并发进程,各自持有资源又都等待别的进程释放所拥有的资源,在未改变这种状态之前不能向前推进,这种状态称为死锁。 死锁产生的根本原因是系统资源不足,产生死锁的必要条件主要包括以下几点: 互斥条件:并发进程要求和占用的资源只能被一个进程使用。 不剥夺条件:进程已经获得的资源,在未使用完成前,不可被剥夺。 占有并等待:进程申请并等待新资源的过程中,继续占有已分配的资源。 环路条件...

2018-07-28 00:10:50 144

原创 矩阵中的相邻数

题目:计算出与第二行第一列的元素5相邻的有几个5.相邻的相邻也算相邻元素。1   1   5   5   15   5   5   1   11   1   5   5   11   1   5   1   15   1   1   1   5#include "stdio.h"int p[5][5]={    {1,1,5,5,1},    {5,5,5,1,1...

2018-07-28 00:10:42 2278

原创 分解质因数

题目:任何一个合数都可以写成几个质数相乘的形式,这几个质数叫做这个合数的质因数。编程实现分解质因数。思路:从2开始到n-1顺序地查找n的因数,第一个找到的因数i一定是质因数;接下来继续对(n/i)进行质因数分解,递归进行。#include "stdio.h"int isPrime(int n) {    int i;    for (i=2; i<n; i++) {  ...

2018-07-28 00:10:31 1063

原创 递归查找数组的最大值

题目:用递归的方法实现查找数组中的最大值。#include "stdio.h"int getMaxValue(int *k,int n){    int tmp;    if(1 == n)    {        return k[0];    }    else    {        tmp = getMaxValue(k+1,n-1);    }    if(...

2018-07-28 00:10:24 959

原创 图中有多少个三角形

题目:编程计算下面图形中包含多少个三角形。思路:首先给图中每个线段的交点设一个字母标记,不是任何两个字母都构成一条线段,使用穷举法列出所有线段;之后将图中所有的线段进行任意3条的组合,如果这3条线段能构成一个三角形,则计数加一,否则计数不变。判断线段能否组成三角形,需要注意每两条线段之间是否有交点、三条线段是否共线、三条线段是否有同一交点。#include "stdio.h"...

2018-07-28 00:07:43 14064

原创 构建乘积数组

题目:给定一个数组A[0,1,,,,n-1],请构建一个数组B[0,1,,,,n-1],其中B中的元素B[i]=A[0]XA[1]X...XA[i-1]XA[i+1]X...XA[n-1].不能使用除法。思路:将数组B分成两部分,定义C[i]=A[0]XA[1]X...XA[i-1],D[i]=A[i+1]X...XA[n-1]。C[i]可以自上而下的顺序计算出阿里,D[i]可以自下而上的顺序...

2018-07-28 00:07:34 161

原创 不用加减乘除做加法

题目:写一个函数,求两个整数之和,要求在函数体内不得使用加减乘除四则运算符号。思路:将两个整数的加法使用二进制来求和,例如5,17,5的二进制为101,17的二进制为10001,101+10001=10110。 再通过位运算来代替二进制的加法。 第一步不考虑进位对每一位相加,这和异或的结果是一样的。 接着考虑第二步进位,可以理解为两个数先做位与运算,然后再左移一位。 第三步把两个步...

2018-07-28 00:07:28 123

原创 利用模板类型实现累加

题目:求解1+2+3+,,,+n,要求不能使用循环,只能使用模板类型。template <unsigned int n> struct Sum_Solution4{    enum Value { N = Sum_Solution4<n - 1>::N + n};};template <> struct Sum_Solution4<1>...

2018-07-28 00:06:44 491

原创 利用函数指针实现累加

题目:求解1+2+3+,,,+n,要求不能使用循环,只能使用函数指针。typedef unsigned int (*fun)(unsigned int);unsigned int Solution3_Teminator(unsigned int n) {    return 0;}unsigned int Sum_Solution3(unsigned int n){    s...

2018-07-28 00:06:35 1389

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除