精华内容
下载资源
问答
  • 首先本文主要利用Tensorflow开发平台,搭建CNN卷积神经网络,通过采集到的车牌图片训练神经网络,使得系统具有较好的车牌识别图片能力。其次在车牌识别的嵌入式系统硬件实现部分,本文具体研究了利用...
  • 主要为大家详细介绍了pytorch实现CNN卷积神经网络,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • CNN卷积神经网络详解

    2018-08-05 15:59:02
    CNN神经网络入门书籍,想要入门神经网络,学习基础知识的不可错误
  • CNN卷积神经网络实现,Matlab仿真,识别手写数字集。
  • 卷积神经网络处理10分类问题,包括数据预处理,贴标签,利用tensorflow创建CNN结构
  • 文件包括数据集,运行结果,权重文件,检查点文件,源代码,执行fashion_sequential_model文件可运行。注意我用TensorFlow2.1编写。修改路径即可运行,还有10张图片,你可以调试程序测试预测效果。...
  • 人工神经网络 基于CNN卷积神经网络 基于Python 实现图片验证码的识别
  • 该工具箱包含CNN,NN,CAE,DBN,SAE等神经网络工具箱。其中CNN工具箱具有详细的中文注释,以便于初学者学习
  • cnn卷积神经网络

    2017-12-13 01:51:23
    利用卷积神经网络对mnist数据集进行分类,代码采用python进行编写,并有详细的注释,且文件自带mnist数据集。用户需要搭建好tensorflow环境配合python即可运行。
  • 1、Mnist_cnn.py 该脚本文件 用TensorFlow框架 实现CNN卷积神经网络处理Mnist手写数字识别数据集,准确率达到99.21%; 2、Mnist_cnn_tensorboard.py 该脚本文件在Mnist_cnn.py的基础上实现可视化。
  • CNN卷积神经网络原理详解(上)

    万次阅读 多人点赞 2019-10-18 23:59:17
    CNN卷积神经网络原理详解(上)前言卷积神经网络的生物背景我们要让计算机做什么?卷积网络第一层全连接层训练 前言 卷积网络(convolutional network),也叫作卷积神经网络(convolutional neural network,CNN),是...

    前言

    卷积网络(convolutional network),也叫作卷积神经网络(convolutional neural network,CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。卷积网络在诸多应用领域都表现优异。‘卷积神经网络’一词表明该网络使用了卷积(convolutional)这种数学运算。卷积神经网络的运作模式如下图所示:


    上图只是一个卷积神经网络的基本构成,其中卷积层和池化层可以根据实际情况任意增加。当前卷积神经网络的应用场合非常广泛,比如图像识别,自然语言处理,灾难性气候预测甚至围棋人工智能等,但是最主要的应用领域还是图像识别领域。
    那么问题来了,为什么要用卷积神经网络来做这个事情呢?

    卷积神经网络的生物背景

    在这里插入图片描述

    如上图所示,人看到的图像,经过大脑的处理,最后呈现给我们的就是这个图像本身,而电脑看到的图像,实际上是一堆像素点的集合。面对这堆像素点,电脑并不知道这是个什么东西。那么我们需要电脑做什么呢?当然是让电脑辨认出这堆像素点所代表的那个图像。怎么做呢?伟大的科学家们这里借鉴了神经生物学家对猫在观察事物时候大脑皮层的工作原理提出了神经网络的概念。

    关于这个实验,网上和参考书上有详细介绍,这里总结就是,大脑皮层不同部位对外界刺激的敏感程度、反应程度不同。这就很好的启发了神经网络的计算核心,不断的寻找特征点,最终得出输入的到底是什么图像这个问题。

    我们要让计算机做什么?

    我们以图像为例,假定当我们的计算机看到一幅图片的时候,它实际上看到的是一组像素值。根据图像的分辨率和大小,假定它看到的是32x32x3的数组,这里的3代表这是一幅RGB的彩色图像。其中每一个数字的值都是0到255不等,代表了像素值的强弱。这些数字对于我们进行图像分类时毫无意义,这是计算机唯一可用的输入。这个想法是,你给计算机这个数组的输入,它最终会输出数字,描述了图像是一个类的概率(0.85为猫,0.1为狗,0.05为鸟等)。

    现在我们知道这个问题以及输入和输出了,我们来思考如何解决这个问题。我们希望计算机做的是能够区分所有的图像,并找出使狗成为狗或使猫成为猫的独特功能。这也是下意识地在我们的脑海中继续的过程。当我们看一张狗的照片时,如果照片具有可识别的特征,例如爪子或四条腿,我们可以将其分类。以类似的方式,计算机能够通过查找诸如边缘和曲线等低级特征来执行图像分类,然后通过一系列卷积层来构建更抽象的概念。这是一个CNN的一般概述。我们来详细说明一下。

    回到具体细节。有关CNN做的更详细的概述是,您将图像传递给一系列卷积,非线性,汇聚(下采样)和完全连接的图层,并获得输出。正如我们前面所说的那样,输出可以是一个类或者一个最能描述图像的类的概率。那么问题来了,每一层计算机都做了什么呢?

    卷积网络第一层

    这一层的理论意义
    卷积网络的第一层一定是一个卷积层,在研究卷积层是干啥的之前我们首先要明确的是这一层我们的输入是上文提到的图像的像素数值组。现在回到我们的问题,卷积层是干啥的。卷积层就是从这个像素数值组中提取最基本的特征。如何提取呢?我们假定输入的图像是一个32x32x3的数组,我们用一个5x5x3(最后乘以3是为了在深度上保持和输入图像一致,否则数学上无法计算)的模板沿着图像的左上角一次移动一个格子从左上角一直移动到右下角。输入的图像数组我们称为接受域,我们使用的模板叫做滤波器(也叫卷积核)。滤波器也是由数组组成,其中每个数字称为权重。输入的数组经过这一轮卷积输出的数组大小为28x28(32-5+1),深度由卷积核的数量决定。这个过程如下图所示:

    在这里插入图片描述
    这一层的实际意义
    但是,让我们从高层次谈论这个卷积实际上在做什么。每个这些过滤器都可以被认为是功能标识符。当我说功能时,我正在谈论的是直线边缘,简单的颜色和曲线。想想所有图像的共同点,最简单的特点。假设我们的第一个过滤器是5 x 5 x 3并且将成为曲线检测器。(在本节中,为了简单起见,让我们忽略过滤器深度为3单位的事实,并且只考虑过滤器和图像的顶部深度切片)。作为曲线检测器,过滤器将具有像素结构,沿曲线形状的区域是更高的数值(请记住,我们正在讨论的这些滤波器只是数字!)。
    在这里插入图片描述

    全连接层

    这个图层基本上需要一个输入量(无论输出是在其之前的conv或ReLU还是pool层),并输出一个N维向量,其中N是程序必须从中选择的类的数量。例如,如果你想要一个数字分类程序,N将是10,因为有10个数字。这个N维向量中的每个数字表示某个类别的概率。例如,如果用于数字分类程序的结果向量是[0.1.175 0 0 0 0 0 .05],那么这代表10%的概率,即图像是1,10%的概率图像是2,图像是3的概率是75%,图像是9的概率是5%(注意:还有其他方法可以表示输出,但我只是展示了softmax方法)。完全连接图层的工作方式是查看上一层的输出(我们记得它应该代表高级特征的激活图),并确定哪些特征与特定类最相关。例如,如果程序预测某些图像是狗,则在激活图中将具有高值,例如爪子或4条腿等的高级特征。类似地,如果程序预测某图像是鸟,它将在激活地图中具有很高的价值,代表像翅膀或喙等高级特征。基本上,FC层看着什么高级特征与特定类最强关联,并具有特定的权重,以便当你计算权重与上一层之间的乘积。

    在这里插入图片描述

    训练

    在我们搭建完毕神经网络的结构之后,我们需要对这个网络进行训练。训练的过程就是给这个网络模型不断的提供任务,让模型在执行任务的过程中积累经验,最终对类似的事件可以做出正确的判断。通俗的解释就是,假设我们教导一个小孩子认识狗,我们会给他看各种各样的狗,并告诉他,这是狗时间长了之后,当小孩见到狗这个物种的时候,就自然而然的知道是狗了。当然有时候也会有例外。比如来了一只狼,也许就会被误认为也是狗(狼狗)。造成这个误差的原因也许是我们给小孩看的狗的样本还不够多(可以理解为数据量不够,欠拟合),也有可能是我们教的方式不是最好的(选用的模型不是最优的)

    现在回到我们的网络模型问题上,第一个conv层中的过滤器如何知道要查找边和曲线?完全连接的图层如何知道要查看的激活图?每层中的过滤器如何知道有什么值?计算机能够调整其过滤值(或权重)的方式是通过称为反向传播的训练过程。
    在我们进入反向传播之前,我们必须先退后一步,讨论神经网络的工作需求。现在我们都出生了,我们的思想是新鲜的(神经网络搭建好了,但是还未训练)。我们不知道什么是猫,狗或鸟。以类似的方式,在CNN开始之前,权重或筛选值是随机的。过滤器不知道寻找边缘和曲线。在更高层的过滤器不知道寻找爪子和喙。然而,随着年龄的增长,我们的父母和老师向我们展示了不同的图片和图片,并给了我们相应的标签。被赋予形象和标签的想法是CNN经历的培训过程。在深入研究之前,我们假设我们有一套训练集,其中包含成千上万的狗,猫和鸟的图像,每个图像都有一个这个图像是什么动物的标签。

    反向传播可以分为4个不同的部分,正向传递,丢失函数,反向传递和权重更新。在正向传球过程中,您将会看到一张训练图像,我们记得这是一个32 x 32 x 3的数字数组,并将其传递给整个网络。在我们的第一个训练样例中,由于所有的权值或过滤值都是随机初始化的,因此输出结果可能类似[.1.1.1.1.1.1.1.1.1.1],基本上是输出不了任何准确数字。网络以其当前的权重无法查找这些低级特征,因此无法就分类的可能性作出任何合理的结论。这转到损失功能反向传播的一部分。请记住,我们现在使用的是训练数据。这个数据有一个图像和一个标签。例如,假设输入的第一个训练图像是3,图像的标签是[0 0 0 1 0 0 0 0 0 0]。损失函数可以用许多不同的方式来定义,但常见的是MSE(均方误差)。

    假设变量L等于该值。正如你可以想象的那样,第一对训练图像的损失将非常高。现在,让我们直观地思考这个问题。我们希望达到预测的标签(ConvNet的输出)与训练标签相同的点(这意味着我们的网络得到了预测权)。为了达到这个目的,我们希望最小化损失量我们有。将这看作是微积分中的一个优化问题,我们想要找出哪些输入(权重在我们的情况下)是最直接导致网络损失(或错误)的因素。

    tips
    关于卷积神经网络的数学含义,我会在CNN卷积神经网络原理详解(下)里面详细解释。
    传送门:
    CNN卷积神经网络原理详解(中)
    CNN卷积神经网络原理详解(下)

    展开全文
  • 吴恩达CNN卷积神经网络第二周作业ResNets
  • cnn的matlab运行程序, 深度学习Matlab工具箱代码cnnbp.m,cnnapplygrads.m,cnnff.m等。
  • CNN卷积神经网络

    2017-11-09 12:41:11
    本代码可实现的功能:可实现CNN神经网络的训练以及检测
  • CNN卷积神经网络的MATLAB程序,及注解
  • python3使用tensorflow构建CNN卷积神经网络识别性别,有兴趣可以下载,如果有不明白的,可以去我的博客搜素相关介绍:http://georgeyang.cn
  • 利用基于tensorflow2的keras框架,搭建CNN卷积神经网络模型,对手写数字识别数据集mnist进行分类,网络规模小,训练精度高。网络包括三个卷积层,两个池化层和全连接层,在测试集上实现了99%左右的识别率。
  • CNN卷积神经网络总结

    2017-12-13 13:57:16
    文章中,总结了CNN的大致流程,并对概念做出图示的讲解。
  • 《DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)》这篇文章的代码,将CNN用于人脸识别,整个实现流程请见:http://blog.csdn.net/u012162613/article/details/43277187
  • 目的:使用CNN卷积神经网络实现语音识别 步骤:(1)预处理。 首尾端的静音切除,降低对后续步骤造成的干扰,然后进行声音分帧,把声音切开成帧,,各帧之间一般是有交叠。 (2)特征提取。运用的算法为倒谱系数...
  • CNN卷积神经网络实例(基于pytorch)

    千次阅读 多人点赞 2020-06-06 20:56:45
    CNN卷积神经网络1.关于卷积神经网络2.卷积神经网络实例(手写字母识别)2.1 代码示例2.2 运行过程及结果2.3 测试结果3.参考与致谢 1.关于卷积神经网络 卷积神经网络(Convolutional Neural Network,CNN) 是一种具有...

    1.关于卷积神经网络

    卷积神经网络(Convolutional Neural Network,CNN) 是一种具有局部连接、权重共享等特征的深层前馈神经网络。
    我们先来看一下比较直观的了解一下,对卷积神经网络有个感性的认识:
    在这里插入图片描述
    我们首先先对我们输入的图片进行一次卷积,而后加入Relu激活函数,再做一次卷积,再加入Relu激活函数,而后对其处理结果进行汇聚(此处为Pool,也可以称为池化),再后来就是不断地重复前边的步骤,最后会得到一个属于某一类图片的概率。这时概率最大的那个就是我们需要的判别结果了。

    以训练这个 小猫图片为例,如果输入图像为100* 100 *3(即图像长度为100,宽度为100,3个颜色通道:RGB),如果我们的输入图像为灰色的话,其颜色通道数为1,我们也称为图片的高度。
    在这里插入图片描述
    过滤器不断的在图像中收集小批小批的像素块,收集完所有的信息后,输出的值为一个比之前的高度更高,长和宽更小的图片,这个图片中包含了一些边缘信息。在这里插入图片描述
    然后再以同样的步骤再进行多次卷积,将图片的长宽再次压缩,高度再次增加,就会有了对输入图片更深的理解。
    在这里插入图片描述
    然后将压缩,增高的信息嵌入普通的分类神经层上,我们就能对这个图片进行分类了。

    2.卷积神经网络实例(手写字母识别)

    下面我将会以一个手写字母识别的例子来入门CNN吧。MNIST 数据集来自美国国家标准与技术研究所。 训练集 (training set) 由来自 250 个不同人手写的数字构成, 其中 50% 是高中学生, 50% 来自人口普查局 (the Census Bureau) 的工作人员. 测试集(test set) 也是同样比例的手写数字数据.其图片形式如下所示:
    在这里插入图片描述

    2.1 代码示例

    # @Time : 2020/6/6 13:23 
    # @Author : kingback
    # @File : cnn_test.py 
    # @Software: PyCharm
    
    import torch
    import torch.nn as nn
    from torch.autograd import Variable
    import torch.utils.data as Data
    import torchvision
    import matplotlib.pyplot as plt
    
    #Hyper prameters
    EPOCH=1
    BATCH_SIZE=50
    LR=0.001
    DOWNLOAD_MNIST=False
    
    train_data=torchvision.datasets.MNIST(
        root='./mnist',
        train=True,
        transform=torchvision.transforms.ToTensor(),    #将下载的文件转换成pytorch认识的tensor类型,且将图片的数值大小从(0-255)归一化到(0-1)
        download=DOWNLOAD_MNIST
    )
    
    #画一个图片显示出来
    # print(train_data.data.size())
    # print(train_data.targets.size())
    # plt.imshow(train_data.data[0].numpy(),cmap='gray')
    # plt.title('%i'%train_data.targets[0])
    # plt.show()
    
    train_loader=Data.DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True)
    
    test_data=torchvision.datasets.MNIST(
        root='./mnist',
        train=False,
    )
    with torch.no_grad():
        test_x=Variable(torch.unsqueeze(test_data.data, dim=1)).type(torch.FloatTensor)[:2000]/255   #只取前两千个数据吧,差不多已经够用了,然后将其归一化。
        test_y=test_data.targets[:2000]
    
    '''开始建立CNN网络'''
    class CNN(nn.Module):
        def __init__(self):
            super(CNN,self).__init__()
            '''
            一般来说,卷积网络包括以下内容:
            1.卷积层
            2.神经网络
            3.池化层
            '''
            self.conv1=nn.Sequential(
                nn.Conv2d(              #--> (1,28,28)
                    in_channels=1,      #传入的图片是几层的,灰色为1层,RGB为三层
                    out_channels=16,    #输出的图片是几层
                    kernel_size=5,      #代表扫描的区域点为5*5
                    stride=1,           #就是每隔多少步跳一下
                    padding=2,          #边框补全,其计算公式=(kernel_size-1)/2=(5-1)/2=2
                ),    # 2d代表二维卷积           --> (16,28,28)
                nn.ReLU(),              #非线性激活层
                nn.MaxPool2d(kernel_size=2),    #设定这里的扫描区域为2*2,且取出该2*2中的最大值          --> (16,14,14)
            )
    
            self.conv2=nn.Sequential(
                nn.Conv2d(              #       --> (16,14,14)
                    in_channels=16,     #这里的输入是上层的输出为16层
                    out_channels=32,    #在这里我们需要将其输出为32层
                    kernel_size=5,      #代表扫描的区域点为5*5
                    stride=1,           #就是每隔多少步跳一下
                    padding=2,          #边框补全,其计算公式=(kernel_size-1)/2=(5-1)/2=
                ),                      #   --> (32,14,14)
                nn.ReLU(),
                nn.MaxPool2d(kernel_size=2),    #设定这里的扫描区域为2*2,且取出该2*2中的最大值     --> (32,7,7),这里是三维数据
            )
    
            self.out=nn.Linear(32*7*7,10)       #注意一下这里的数据是二维的数据
    
        def forward(self,x):
            x=self.conv1(x)
            x=self.conv2(x)     #(batch,32,7,7)
            #然后接下来进行一下扩展展平的操作,将三维数据转为二维的数据
            x=x.view(x.size(0),-1)    #(batch ,32 * 7 * 7)
            output=self.out(x)
            return output
            
    cnn=CNN()
    # print(cnn)
    
    # 添加优化方法
    optimizer=torch.optim.Adam(cnn.parameters(),lr=LR)
    # 指定损失函数使用交叉信息熵
    loss_fn=nn.CrossEntropyLoss()
    
    '''
    开始训练我们的模型哦
    '''
    step=0
    for epoch in range(EPOCH):
        #加载训练数据
        for step,data in enumerate(train_loader):
            x,y=data
            #分别得到训练数据的x和y的取值
            b_x=Variable(x)
            b_y=Variable(y)
    
            output=cnn(b_x)         #调用模型预测
            loss=loss_fn(output,b_y)#计算损失值
            optimizer.zero_grad()   #每一次循环之前,将梯度清零
            loss.backward()         #反向传播
            optimizer.step()        #梯度下降
    
            #每执行50次,输出一下当前epoch、loss、accuracy
            if (step%50==0):
                #计算一下模型预测正确率
                test_output=cnn(test_x)
                y_pred=torch.max(test_output,1)[1].data.squeeze()
                accuracy=sum(y_pred==test_y).item()/test_y.size(0)
    
                print('now epoch :  ', epoch, '   |  loss : %.4f ' % loss.item(), '     |   accuracy :   ' , accuracy)
    
    '''
    打印十个测试集的结果
    '''
    test_output=cnn(test_x[:10])
    y_pred=torch.max(test_output,1)[1].data.squeeze()       #选取最大可能的数值所在的位置
    print(y_pred.tolist(),'predecton Result')
    print(test_y[:10].tolist(),'Real Result')
    
    

    2.2 运行过程及结果

    在这里插入图片描述

    2.3 测试结果

    模型训练完毕之后,我又随机取了十个图片带入模型,然后将其结果与正确的结果比对,有如下结果:
    在这里插入图片描述
    整个的模型还是比较准确的。

    3.参考与致谢

    展开全文
  • 本文来自csdn,本文主要通过代码实例详细介绍了卷积神经网络CNN)架构中的卷积层,池化层和全连接层,希望对您的学习有所帮助。卷积神经网络的基础内容可以参考:机器学习算法之卷积神经网络卷积神经网络一般包括...
  • 人工智能,CNN(深度学习之卷积神经网络)的教学版PPT,讲解的很到位,非常具体,希望对各位有所帮助
  • 数媒学院 - Outline convolution pooling sparse connectivity parameter sharing equivariant representation 卷积层 -- convolution 池化层 -- pooling 全连接层 fully connected Overview CNN-
  • 这是我修改的别人的代码,别人的代码有点问题,我修改了一下,代码的正确率很高,可达90%以上,这是一个5层卷积神经网络的代码,误差传递和梯度更新代码里都有,可自学。
  • CNN卷积神经网络介绍

    千次阅读 2020-04-24 14:14:58
    1.1离散卷积 1.2池化 2卷积算法 2.1没有零填充,单位跨度 2.2零填充,跨步 2.2.1一半(相同)的填充 2.2.2全填充 2.3无零填充,非跨步 2.4零填充,非跨步 3池算术18 4转置卷积算法19 4.1卷积作为矩阵运算 4.2转置...

    在神经网络中,卷积神经网络(ConvNets或CNNs)是进行图像识别、图像分类的主要类别之一。物体探测、人脸识别等是CNNs应用最广泛的领域之一。

    CNN图像分类采用一个输入图像,对其进行处理,并将其分类到特定的类别中,其包含了一个由卷积层和子采样层(池化层)构成的特征抽取器。计算机将输入图像视为像素阵列,它取决于图像的分辨率,可以看到h*w *d(h =高度,w =宽度,d =尺寸)。

    例如,一幅6x6x3矩阵阵列的RGB图像(3指RGB值)和一幅4x4x1矩阵阵列的灰度图像。

    深度学习CNN模型进行训练和测试,每个输入图像都将通过一系列带有过滤器(Kernals)、池化、全连接层(FC)的卷积层,并应用Softmax函数对概率值在0到1之间的对象进行分类。下图是CNN处理输入图像的完整流程,并根据值对对象进行分类。

    1、ANN/CNN/RNN是什么?

    1)多层感知器Multi-Layer Perceptron (MLP) /人工神经网络Artificial Neural Networks (ANN)

    (1)随着图像尺寸的增大,可训练参数的数量会急剧增加
    (2)MLP会丢失图像的空间特征。

    2)卷积神经网络Convolution Neural Networks (CNN)
    卷积神经网络(CNN)目前在深度学习领域非常热门。这些CNN模型被应用于不同的应用和领域,在图像和视频处理项目中尤其普遍。

    3)循环神经网络Recurrent Neural Networks (RNN)
    RNN在隐藏状态上有一个循环连接,此循环约束能够确保在输入数据中捕捉到顺序信息。
    优势:RNN能够捕捉数据中出现的顺序信息,例如,预测时文本中单词之间的依赖关系
    (它们构成了深度学习中大多数预训练模型的基础:事实上,不论是哪种网络,他们在实际应用中常常都混合着使用,比如CNN和RNN在上层输出之前往往会接上全连接层,很难说某个网络到底属于哪个类别。)

    2、CNN(卷积神经网络)简介

    CNN由输入输出层以及多个隐藏层组成,隐藏层可分为卷积层,池化层、RELU层和全连通层

    卷积网络的核心思想是将:局部感受野、权值共享以及时间或空间亚采样这三种结构思想结合起来获得了某种程度的位移、尺度、形变不变性。
    这里主要讨论CNN相比与传统的神经网络的不同之处,CNN主要有三大特色,分别是局部感知、权重共享和多卷积核

    卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。卷积网络执行的是有导师训练,所以其样本集是由形如:(输入向量,理想输出向量)的向量对构成的。所有这些向量对,都应该是来源于网络即将模拟的系统的实际“运行”结果。它们可以是从实际运行系统中采集来的。在开始训练前,所有的权都应该用一些不同的小随机数进行初始化。“小随机数”用来保证网络不会因权值过大而进入饱和状态,从而导致训练失败;“不同”用来保证网络可以正常地学习。实际上,如果用相同的数去初始化权矩阵,则网络无能力学习

    2.1输入层

    一个标量(一个数字)有0维,一个向量有1维,一个矩阵有2维,一个张量有3维或更多。但是,为了简单起见,我们通常也称向量和矩阵为张量。CNN的输入一般是二维向量,可以有高度,比如,RGB图像;

    在深度学习中,张量无处不在。嗯,谷歌的框架被称为TensorFlow是有原因的,那到底什么是张量?

    张量
    张量(tensor)是多维数组,目的是把向量、矩阵推向更高的维度。
    在这里插入图片描述

    2.2隐含层

    2.2.1卷积层

    卷积是从输入图像中提取特征的第一层。它是一个数学运算,需要两个输入,如图像矩阵和一个滤波器(或核)。这个过程我们可以理解为我们使用一个过滤器(卷积核)来过滤图像的各个小区域,得到这些小区域的特征值,从而保持像素之间的关系。

    卷积层是CNN的核心,层的参数由一组可学习的滤波器(filter)或内核(kernels)组成,它们具有小的感受野,延伸到输入容积的整个深度。 在前馈期间,每个滤波器对输入进行卷积,计算滤波器和输入之间的点积,并产生该滤波器的二维激活图(输入一般二维向量,但可能有高度(即RGB))。 简单来说,卷积层是用来对输入层进行卷积,提取更高层次的特征。

    2.2.2 激活层(ReLU)

    把卷积层输出结果做非线性映射。
    在这里插入图片描述

    CNN采用的激励函数一般为ReLU(The Rectified Linear Unit/修正线性单元),它的特点是收敛快,求梯度简单,但较脆弱,图像如下。
    在这里插入图片描述

    这个RELU我们之前讲过,全名将修正线性单元,是神经元的激活函数,对输入值x的作用是max(0,x),当然RELU只是一种选择,还有选Leak-Relu等等,一般都是用Relu!

    2.2.3池化层 (Pooling)

    当图像太大时,池化图层部分会减少参数的数量。空间汇聚也称为次采样或下采样,它降低了图像的维度,但保留了重要的信息。Pooling可以有不同的类型:

    Max Pooling
    Average Pooling
    Sum Pooling Max pooling顾名思义就是从校正后的feature map中取最大的元素。Average Pooling 取的是平均值,而Sum Pooling取的是总和;
    最常见的池化层是规模为2*2, 步幅为2,对输入的每个深度切片进行下采样。每个MAX操作对四个数进行,如下图所示:
    在这里插入图片描述
    池化操作将保存深度大小不变。如果池化层的输入单元大小不是二的整数倍,一般采取边缘补零(zero-padding)的方式补成2的倍数,然后再池化。

    之所以这么做的原因,是因为即使做完了卷积,图像仍然很大(因为卷积核比较小),所以为了降低数据维度,就进行下采样。

    1)池化层相比卷积层可以更有效的降低数据维度,缩小图像的规模,提升计算速度。
    2)这些统计特征能够有更低的维度,减少计算量;这么做不但可以大大减少运算量,不容易过拟合,当参数过多的时候很容易造成过度拟合。

    2.2.4全连接层

    对于任意一个卷积层,要把它变成全连接层只需要把权重变成一个巨大的矩阵,其中大部分都是0 除了一些特定区块(因为局部感知),而且好多区块的权值还相同(由于权重共享)。我们称这一层为FC层,我们将矩阵平铺成向量,并将其作为一个完全连接的层,就像一个神经网络。

    这个层就是一个常规的神经网络,它的作用是对经过多次卷积层和多次池化层所得出来的高级特征进行全连接(全连接就是常规神经网络的性质),算出最后的预测值。
    全连接层和卷积层可以相互转换:

    2.2.5参数减少与权值共享

    尽管局部感知使计算量减少了几个数量级,但权重参数数量依然很多。能不能再进一步减少呢?方法就是权值共享。

    权值共享:不同的图像或者同一张图像共用一个卷积核,减少重复的卷积核。同一张图像当中可能会出现相同的特征,共享卷积核能够进一步减少权值参数。
    卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。

    3、卷积神经网络的优点

    在这里介绍一下深度学习入门课程,也是小编学习的一种,吴恩达老师的深度学习课程神经网络和深度学习

    卷积神经网络CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。
    流的分类方式几乎都是基于统计特征的,这就意味着在进行分辨前必须提取某些特征。然而,显式的特征提取并不容易,在一些应用问题中也并非总是可靠的。卷积神经网络,它避免了显式的特征取样,隐式地从训练数据中进行学习。这使得卷积神经网络明显有别于其他基于神经网络的分类器,通过结构重组和减少权值将特征提取功能融合进多层感知器。它可以直接处理灰度图片,能够直接用于处理基于图像的分类。
    卷积网络较一般神经网络在图像处理方面有如下优点: a)输入图像和网络的拓扑结构能很好的吻合;b)特征提取和模式分类同时进行,并同时在训练中产生;c)权重共享可以减少网络的训练参数,使神经网络结构变得更简单,适应性更强。
    卷积神经网络之训练算法
      1. 同一般机器学习算法,先定义Loss function,衡量和实际结果之间差距。
      2. 找到最小化损失函数的W和b, CNN中用的算法是SGD(随机梯度下降)。

    卷积神经网络之优缺点
    优点
      • 共享卷积核,对高维数据处理无压力
      • 无需手动选取特征,训练好权重,即得特征分类效果好
    缺点
      • 需要调参,需要大样本量,训练最好要GPU
      • 物理含义不明确(也就说,我们并不知道没个卷积层到底提取到的是什么特征,而且神经网络本身就是一种难以解释的“黑箱模型”)

    引用文章链接:
    http://yann.lecun.com/exdb/lenet/weirdos.html
    https://www.cnblogs.com/duanhx/p/9655223.html

    展开全文
  • CNN卷积神经网络PYTHON

    2018-10-26 19:02:39
    CNN卷积神经网络,包含数据,代码有标注,可以用来参考学习
  • CNN卷积神经网络MATLAB代码,mnist_uint8.mat是数据文件,其他的函数都有相应的解释。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,974
精华内容 29,189
关键字:

cnn卷积神经网络