精华内容
下载资源
问答
  • CNN卷积神经网络层级结构

    万次阅读 2017-09-25 19:38:38
    一、卷积神经网络层级结构 卷积神经网络层次结构包括: 数据输入层/ Input layer 卷积计算层/ CONV layer 激励层 / ReLU layer 池化层 / Pooling layer 全连接层 / FC layer 卷积计算层 如上图图所示,左边...

    卷积神经网络层次结构包括:

    数据输入层/ Input layer
    卷积计算层/ CONV layer
    激励层 / ReLU layer
    池化层 / Pooling layer
    全连接层 / FC layer

    输入层(Input layer)

    输入数据,通常会作一些数据处理,例如:

    去均值:把输入数据各个维度都中心化到0

    归一化:幅度归一化到同一范围

    PCA/白化:用PCA降维,白化是在对数据每个特征轴上的数据进行归一化。

    卷积计算层(CONV layer)


    如上图图所示,左边为数据集,右边为一个神经网络

    窗口:卷积计算层会在数据集上选定一个窗口,从窗口内选择数据

    深度(depth):如下图所示,左边的数据集深度为3,右边的神经网络深度为5(有五个神经元)

    步长(stride):窗口每次移动的距离

    填充值(zero-padding):因为窗口移动到数据边缘时,可能不能正好遍历完所有数据,所以有时要在数据集周边填充上若干圈全为0的数据

    如上所示,左边为输入数据,中间为两个神经元,右边为输出。可以看到左边的输入数据中,窗口大小为3*3,每次移动的步长为2,周围有一层的填充数据,深度为3。中间为两个Filter,也就是线性方程的系数,注意Filter下面还有两个Bias偏移量。将窗口中的数据分别和Filter中的数据做卷积运算(即对应位置的数据相乘),再加上Bias偏移量即可得到一个输出矩阵中的一个值。比如在第一幅图的第三个窗口中的数据与Filter W0所做的运算为:

    第一个窗口:0*0+0*0+0*(-1)+0*1+1*0+2*0+0*1+1*0+0*1=0

    第二个窗口:0*0+0*1+0*(-1)+0*(-1)+0*1+2*(-1)+0*0+2*(-1)+2*0=-4

    第三个窗口:0*0+0*1+0*(-1)+0*1+0*(-1)+1*0+0*0+2*0+0*(-1)=0

    将这三个窗口中的值加起来再加上偏移量即得到了输出值:0+(-4)+0+1(偏移量)=-3,即第一个输出矩阵中的第一个值。

    通过卷积层的计算后,可以使数据量大大减少,并且能够一定程度上保存数据集的信息

    激励层

      激励层的主要作用是将卷积层的结果做非线性映射。常见的激励层函数有sigmoid、tanh、Relu、Leaky Relu、ELU、Maxout

    sigmoid函数如下所示:

    sigmoid函数是早期用的比较多的激励函数,但现在已经不常用了。主要是当输入特别大或者特别小时,sigmoid函数的偏导数趋于0,这样在使用反向传播算法时将会出现问题,并且sigmoid函数不是关于原点对称的,这样在进行反向传播时w的梯度要么全为正,要么全负(w的梯度即为x乘以上一层的梯度,x恒为正,所以梯度的正负一直不变),收敛速度会非常慢。tanh函数与sigmoid函数图像类似,但是它比sigmoid函数好的一点是tanh函数是关于原点对称的,这样可以减少数据的倾斜。

    现在比较常用的激励函数为ReLu(The Rectified Linear Unit/修正线性单元),函数表达式为:f(x)=max(0,x),其函数图像如下所示:

    ReLu函数的有点是收敛非常快,因为在原点右侧它的偏导数为1,求导简单,这样在做反向传播时速度比较快。缺点时较为脆弱,原点左侧的函数具有的sigmoid相似的问题,即导数等于0。

    Leaky ReLu在是ReLu的“增强版”,其函数表达式为:f(x)=max(ax,x),a通常为一个比较小的数,比如0.01,线面是a=0.01时的图像:

    可以看到,相比ReLu,Leaky ReLu在原点左侧的表达式中对x乘以了一个比较小的系数,这样保证了在做反向传播时不会挂掉,并且其计算也很快。

    ELU指数线性单元

    ELU不会挂掉,计算速度比较快,并且输出的均值趋于0,但是由于指数的存在,计算量略大。

    Maxout:

    两条直线拼接而成,计算是线性的,比较快,不会饱和不会挂,但是参数比较多。

    激励函数使用总结:

    1.尽量不要用sigmoid函数

    2.首选ReLu,速度快,但是需要小心,有可能会挂掉

    3.ReLu不行的话再选用Leaky ReLu或者Maxout

    池化层(Pooling layer)

    在连续的卷基层和激励层中间,用于压缩数据和参数的量,用于减少过拟合。

    池化层的选择策略有max pooling和average Pooling,上图展示的就是max Pooling的过程。在原始的数据层上划分一个个小块,在每个小块中选择最大的那个数代表这个小块中所有的数(如果是average Pooling就选择平均数),放到下一层。这样就打打减少了数据量。这种做法的理论依据好像还不太清楚,但是可以想象在一幅图中,每个像素点和其周边的点大致是一样的,所以用一个点代替其周边点也有一定道理。

    全连接层(FC layer)

    全连接层即两层之间的所有神经元都有权重连接,通常会在卷积神经网络的尾部。



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

    万次阅读 多人点赞 2018-05-26 09:49:50
    二、CNN卷积神经网络 1、CNN的主要概述 2、CNN的一般结构 三、CNN卷积神经网络的应用 四、常见的CNN卷积神经网络 一、BP神经网络回顾 人工全连接神经网络 (1)每相邻两层之间的每个神经元之间都是有边...

    目录

    一、BP神经网络回顾

    二、CNN卷积神经网络

    1、CNN的主要概述

    2、CNN的一般结构

    三、CNN卷积神经网络的应用

    四、常见的CNN卷积神经网络


    一、BP神经网络回顾

     

    人工全连接神经网络

    (1)每相邻两层之间的每个神经元之间都是有边相连的

    (2)当输入层的特征维度变得很高时,这时全连接网络需要训练的参数就会增大很多,计算速度就会变得很慢

    传统神经网络存在的问题:

    (1)权值太多,计算量太大

    (2)权值太多,需要大量样本进行训练

    二、CNN卷积神经网络

    1、CNN的主要概述

    卷积层的神经元只与前一层的部分神经元节点相连,即它的神经元间的连接是非全连接的,且同一层中某些神经元之间的连接的权重w偏置b是共享的(即相同的)大量地减少了需要训练参数的数量

    CNN主要特点:减少权值,局部连接,权值共享

    CNN通过感受野权值共享减少了神经网络需要训练的参数的个数。

    2、CNN的一般结构

    • 输入层:用于数据的输入
    • 卷积层:使用卷积核进行特征提取特征映射
    • 激励层:由于卷积也是一种线性运算,因此需要增加非线性映射
    • 池化层:压缩数据和参数的量,减小过拟合。
    • 全连接层:通常在CNN的尾部进行重新拟合,减少特征信息的损失
    • 输出层:用于输出结果

    (1)输入层

    在CNN的输入层中,(图片)数据输入的格式与全连接神经网络的输入格式(一维向量)不太一样。CNN的输入层的输入格式保留了图片本身的结构

    对于黑白的 28×28 的图片,CNN的输入是一个28×28 的的二维神经元

    对于RGB格式的28×28图片,CNN的输入则是一个 3×28×28 的三维神经元(RGB中的每一个颜色通道都有一个 28×28 的矩阵),如下图所示:

    (2)卷积层

    需要明确的几个概念:

    感受视野( local receptive fields)

        即感受上一层的部分特征。在卷积神经网络中,隐藏层中的神经元的感受视野比较小,只能看到上一次的部分特征,上一层的其他特征可以通过平移感受视野来得到同一层的其他神经元。

    卷积核

        感受视野中的权重矩阵

    共享权值(shared weights)

    步长(stride)

        感受视野对输入的扫描间隔称为步长(stride

    边界扩充(pad)

         当步长比较大时(stride>1),为了扫描到边缘的一些特征,感受视野可能会“出界”,这时需要对边界扩充(pad)

    特征映射图(feature map)

         通过一个带有卷积核感受视野 扫描生成的下一层神经元矩阵 称为一个特征映射图(feature map

    通过以下图理解以上概念及卷积计算

    (3)激励层

    激励层主要对卷积层的输出进行一个非线性映射,因为卷积层的计算还是一种线性计算。使用的激励函数一般为ReLu函数

    卷积层和激励层通常合并在一起称为“卷积层”。

    (4)池化层

    当输入经过卷积层时,若感受视野比较小,布长stride比较小,得到的feature map(特征映射图)还是比较大,可以通过池化层来对每一个feature map进行降维操作,输出的深度还是不变的,依然为feature map的个数。

    池化层也有一个“池化视野(filter)”来对feature map矩阵进行扫描,对“池化视野”中的矩阵值进行计算,一般有两种计算方式:

       (1Max pooling:取“池化视野”矩阵中的最大值

       (2Average pooling:取“池化视野”矩阵中的平均值

    (5)全连接层和输出层

    全连接层主要对特征进行重新拟合,减少特征信息的丢失。

    输出层主要准备做好最后目标结果的输出。

    (6)中间还可以使用其他的功能层

    归一化层Batch Normalization):在CNN中对特征的归一化

    切分层:对某些(图片)数据的进行分区域的单独学习

    融合层:对独立进行特征学习的分支进行融合

    三、CNN卷积神经网络的应用

    1、目标分类 

    2、目标检测(目标定位、人脸检测、人形检测、车辆检测) 

        (R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD、YOLO V2、YOLO V3)

    3、目标识别(人脸识别、人形识别)  人脸识别算法演化史    (DeepFace、FaceNet、DeepID)

    4、目标跟踪

    5、目标分割

    6、关键点检测     关键点检测

    CNN卷积神经网络实现Mnist数据集

    四、常见的CNN卷积神经网络

    • 卷积神经⽹络(LeNet)
    • 深度卷积神经⽹络(AlexNet
    • 使⽤重复元素的⽹络(VGG
    • ⽹络中的⽹络(NiN
    • 含并⾏连结的⽹络(GoogLeNet
    • 残差⽹络(ResNet
    • 稠密连接⽹络(DenseNet

     

     

     

     

     

     

     

     

     

     

    参考博客资料:

    1、深度学习之卷积神经网络CNN及tensorflow代码实现示例

    2、卷积神经网络CNN(基本理论)

    3、卷积神经网络CNN总结

     

     

     

    展开全文
  • CNN卷积神经网络层次结构

    千次阅读 2018-10-23 10:14:24
    卷积神经网络层次结构包括: 数据输入层/ Input layer  卷积计算层/ CONV layer  激励层 / ReLU layer  池化层 / Pooling layer  全连接层 / FC layer  输入层(Input layer) 输入数据,通常会作一些数据...

    卷积神经网络层次结构包括:

    数据输入层/ Input layer 
    卷积计算层/ CONV layer 
    激励层 / ReLU layer 
    池化层 / Pooling layer 
    全连接层 / FC layer 

    输入层(Input layer)


    输入数据,通常会作一些数据处理,例如:

    归一化:幅度归一化到同一范围

    卷积计算层(CONV layer)


    如上图图所示,左边为数据集,右边为一个神经网络

    窗口:卷积计算层会在数据集上选定一个窗口,从窗口内选择数据

    深度(depth):如下图所示,左边的数据集深度为3,右边的神经网络深度为5(有五个神经元)

    步长(stride):窗口每次移动的距离

    填充值(zero-padding):因为窗口移动到数据边缘时,可能不能正好遍历完所有数据,所以有时要在数据集周边填充上若干圈全为0的数据

    如上所示,左边为输入数据,中间为两个神经元,右边为输出。可以看到左边的输入数据中,窗口大小为3*3,每次移动的步长为2,周围有一层的填充数据,深度为3。中间为两个Filter,也就是线性方程的系数,注意Filter下面还有两个Bias偏移量。将窗口中的数据分别和Filter中的数据做卷积运算(即对应位置的数据相乘),再加上Bias偏移量即可得到一个输出矩阵中的一个值。比如在第一幅图的第三个窗口中的数据与Filter W0所做的运算为:

    第一个窗口:0*0+0*0+0*(-1)+0*1+1*0+2*0+0*1+1*0+0*1=0

    第二个窗口:0*0+0*1+0*(-1)+0*(-1)+0*1+2*(-1)+0*0+2*(-1)+2*0=-4

    第三个窗口:0*0+0*1+0*(-1)+0*1+0*(-1)+1*0+0*0+2*0+0*(-1)=0

    将这三个窗口中的值加起来再加上偏移量即得到了输出值:0+(-4)+0+1(偏移量)=-3,即第一个输出矩阵中的第一个值。

    通过卷积层的计算后,可以使数据量大大减少,并且能够一定程度上保存数据集的信息

    激励层

      激励层的主要作用是将卷积层的结果做非线性映射。常见的激励层函数有sigmoid、tanh、Relu、Leaky Relu、ELU、Maxout

    sigmoid函数如下所示:

    ReLu函数的有点是收敛非常快,因为在原点右侧它的偏导数为1,求导简单,这样在做反向传播时速度比较快。缺点时较为脆弱,原点左侧的函数具有的sigmoid相似的问题,即导数等于0。

    Leaky ReLu在是ReLu的“增强版”,其函数表达式为:f(x)=max(ax,x),a通常为一个比较小的数,比如0.01,线面是a=0.01时的图像:

    可以看到,相比ReLu,Leaky ReLu在原点左侧的表达式中对x乘以了一个比较小的系数,这样保证了在做反向传播时不会挂掉,并且其计算也很快。

    激励函数使用总结:

    1.尽量不要用sigmoid函数

    2.首选ReLu,速度快,但是需要小心,有可能会挂掉

    3.ReLu不行的话再选用Leaky ReLu或者Maxout

    池化层(Pooling layer)

    在连续的卷基层和激励层中间,用于压缩数据和参数的量,用于减少过拟合。

    池化层的选择策略有max pooling和average Pooling,上图展示的就是max Pooling的过程。在原始的数据层上划分一个个小块,在每个小块中选择最大的那个数代表这个小块中所有的数(如果是average Pooling就选择平均数),放到下一层。这样就打打减少了数据量。这种做法的理论依据好像还不太清楚,但是可以想象在一幅图中,每个像素点和其周边的点大致是一样的,所以用一个点代替其周边点也有一定道理。

    全连接层(FC layer)


    全连接层即两层之间的所有神经元都有权重连接,通常会在卷积神经网络的尾部。

    --------------------- 
    作者:一路前行1 
    来源:CSDN 
    原文:https://blog.csdn.net/weiyongle1996/article/details/78088654 
    版权声明:本文为博主原创文章,转载请附上博文链接!

     

    import torch
    import torch.nn as nn
    import torch.nn.functional as F
    """
    Neural networks can be constructed using the torch.nn package.
    nn depends on autograd to define models and differentiate them.
    An nn.Module contains layers, and a method forward(input)that returns the output.
    """
    
    
    class Net(nn.Module):
        def __init__(self):
            super(Net, self).__init__()
            # 1 input image channel, 6 output channels, 5x5 square convolution
            self.conv1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5)
            print(self.conv1.weight.data)
            self.conv2 = nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5)
            print(self.conv2.weight.data)
            # an affine仿射 operation: y = Wx + b ;
            # class torch.nn.Linear(in_features, out_features, bias=True)
            # in_features - 每个输入样本的大小 out_features - 每个输出样本的大小
            self.fc1 = nn.Linear(16*5*5, 120)                          # 为啥是16*5*5
            print(self.fc1.weight.data, self.fc1.weight.size())
            self.fc2 = nn.Linear(120, 84)
            self.fc3 = nn.Linear(84, 10)
    
        def forward(self, x):
            # Max pooling over a (2, 2) window
            x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
            # If the size is a square you can only specify a single number
            x = F.max_pool2d(F.relu(self.conv2(x)), (2, 2))
            print(x)
            x = x.view(-1, self.num_flat_features(x))  # 代表what
            x = F.relu(self.fc1(x))
            x = F.relu(self.fc2(x))
            x = self.fc3(x)
            return x
    
        def num_flat_features(self, x):           # 特征展开
            print(x.size(), "************")
            size = x.size()[1:]
            print("--------%s", size)
            num_features = 1
            for s in size:
                num_features *= s
            return num_features
    
    
    net = Net()
    print(net)
    
    """
    You just have to define the forward function, 
    and the backward function (where gradients are computed) is automatically defined for you using autograd. 
    You can use any of the Tensor operations in the forward function.
    """
    # The learnable parameters of a model are returned by net.parameters()
    """
    如何计算CNN的每层参数个数
    """
    params = list(net.parameters())
    print(list(params))
    print(len(params))
    print(params[0].size(), params[1].size(), params[2].size())  # conv1's .weight ...
    
    input = torch.randn(1, 1, 32, 32)
    print(input)
    out = net(input)
    print(out)
    
    net.zero_grad()
    out.backward(torch.randn(1, 10))
    """
    torch.nn only supports mini-batches. 
    The entire torch.nn package only supports inputs that are a mini-batch of samples, and not a single sample.
    For example, nn.Conv2d will take in a 4D Tensor of nSamples x nChannels x Height x Width.
    """
    
    output = net(input)
    target = torch.randn(10)  # a dummy target, for example
    target = target.view(1, -1)   # 在不改变张量数据的情况下随意改变张量的大小和形状
    criterion = nn.MSELoss()
    
    loss = criterion(output, target)
    print(loss)
    
    print(loss.grad_fn)              # MSELoss
    print(loss.grad_fn.next_functions[0][0])         # Linear
    print(loss.grad_fn.next_functions[0][0].next_functions[0][0])  # ReLU
    
    """
    To backpropagate the error all we have to do is to loss.backward(). 
    You need to clear the existing gradients though, else gradients will be accumulated to existing gradients.
    """
    
    # net.zero_grad()
    # print('conv1.bias.grad before backward')
    # # print(net.conv1.weight.grad)
    # print(net.conv1.bias.grad)
    # loss.backward()
    # print('conv1.bias.grad after backward')
    # # print(net.conv1.weight.grad)
    # print(net.conv1.bias.grad)
    
    """
    The simplest update rule used in practice is the Stochastic Gradient Descent (SGD):
    weight = weight - learning_rate * gradient
    UPDATE THE WEIGHTS
    """
    learning_rate = 0.01
    for f in net.parameters():
        f.data.sub_(f.grad.data * learning_rate)
    """
    To enable to use various different update rules such as SGD, Nesterov-SGD, Adam, RMSProp, etc.
    builting a small package: torch.optim that implements all these methods. Using it is very simple:
    """
    
    import torch.optim as optim
    
    # create your optimizer
    optimizer = optim.SGD(net.parameters(), learning_rate)
    
    # in your training loop
    optimizer.zero_grad()
    output = net(input)
    loss = criterion(output, target)    # zero the gradient buffers
    loss.backward()
    optimizer.step()       # Does the update
    
    
    """
    Define the network
    loss function
    Backprop
    Update the weights
    """

     

    展开全文
  • 深度学习 CNN卷积神经网络 LeNet-5详解

    万次阅读 多人点赞 2017-10-18 16:04:35
    卷积神经网络( Convolutional Neural Network, CNN): 是一种常见的深度学习架构,受生物自然视觉认知机制(动物视觉皮层细胞负责检测光学信号)启发而来,是一种特殊的多层前馈神经网络。它的人工神经元可以响应...

    文章首发于公众号【编程求职指南】
    卷积神经网络( Convolutional Neural Network, CNN):
    是一种常见的深度学习架构,受生物自然视觉认知机制(动物视觉皮层细胞负责检测光学信号)启发而来,是一种特殊的多层前馈神经网络。它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。
    一般神经网络VS卷积神经网络:
    相同点:卷积神经网络也使用一种反向传播算法(BP)来进行训练
    不同点:网络结构不同。卷积神经网络的网络连接具有局部连接、参数共享的特点。
    局部连接:是相对于普通神经网络的全连接而言的,是指这一层的某个节点只与上一层的部分节点相连。
    参数共享:是指一层中多个节点的连接共享相同的一组参数。
    这里写图片描述
    全连接:连接个数nm 局部连接:连接个数im
    参数不共享:参数个数n*m+m 参数共享:参数个数i+1

    卷积神经网络的主要组成:
    卷积层(Convolutional layer),卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。

    池化层(Pooling),它实际上一种形式的向下采样。有多种不同形式的非线性池化函数,而其中最大池化(Max pooling)和平均采样是最为常见的

    全连接层(Full connection), 与普通神经网络一样的连接方式,一般都在最后几层

    pooling层的作用:
    Pooling层相当于把一张分辨率较高的图片转化为分辨率较低的图片;
    pooling层可进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络中参数的目的。

    LeNet-5卷积神经网络模型
    LeNet-5:是Yann LeCun在1998年设计的用于手写数字识别的卷积神经网络,当年美国大多数银行就是用它来识别支票上面的手写数字的,它是早期卷积神经网络中最有代表性的实验系统之一。

    LenNet-5共有7层(不包括输入层),每层都包含不同数量的训练参数,如下图所示。
    这里写图片描述
    LeNet-5中主要有2个卷积层、2个下抽样层(池化层)、3个全连接层3种连接方式

    卷积层
    卷积层采用的都是5x5大小的卷积核/过滤器(kernel/filter),且卷积核每次滑动一个像素(stride=1),一个特征图谱使用同一个卷积核.
    每个上层节点的值乘以连接上的参数,把这些乘积及一个偏置参数相加得到一个和,把该和输入激活函数,激活函数的输出即是下一层节点的值
    这里写图片描述

    LeNet-5的下采样层(pooling层)
    下抽样层采用的是2x2的输入域,即上一层的4个节点作为下一层1个节点的输入,且输入域不重叠,即每次滑动2个像素,下抽样节点的结构如下:
    这里写图片描述
    每个下抽样节点的4个输入节点求和后取平均(平均池化),均值乘以一个参数加上一个偏置参数作为激活函数的输入,激活函数的输出即是下一层节点的值。

    卷积后输出层矩阵宽度的计算:
    Outlength=
    (inlength-fileterlength+2*padding)/stridelength+1

    Outlength:输出层矩阵的宽度
    Inlength:输入层矩阵的宽度
    Padding:补0的圈数(非必要)
    Stridelength:步长,即过滤器每隔几步计算一次结果

    LeNet-5第一层:卷积层C1
    C1层是卷积层,形成6个特征图谱。卷积的输入区域大小是5x5,每个特征图谱内参数共享,即每个特征图谱内只使用一个共同卷积核,卷积核有5x5个连接参数加上1个偏置共26个参数。卷积区域每次滑动一个像素,这样卷积层形成的每个特征图谱大小是(32-5)/1+1=28x28。C1层共有26x6=156个训练参数,有(5x5+1)x28x28x6=122304个连接。C1层的连接结构如下所示。
    这里写图片描述

    LeNet-5第二层:池化层S2
    S2层是一个下采样层(为什么是下采样?利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量同时保留有用信息)。C1层的6个28x28的特征图谱分别进行以2x2为单位的下抽样得到6个14x14((28-2)/2+1)的图。每个特征图谱使用一个下抽样核。5x14x14x6=5880个连接。S2层的网络连接结构如下右图
    这里写图片描述

    LeNet-5第三层:卷积层C3
    C3层是一个卷积层,卷积和和C1相同,不同的是C3的每个节点与S2中的多个图相连。C3层有16个10x10(14-5+1)的图,每个图与S2层的连接的方式如下表 所示。C3与S2中前3个图相连的卷积结构见下图.这种不对称的组合连接的方式有利于提取多种组合特征。该层有(5x5x3+1)x6 + (5x5x4 + 1) x 3 + (5x5x4 +1)x6 + (5x5x6+1)x1 = 1516个训练参数,共有1516x10x10=151600个连接。
    这里写图片描述

    LeNet-5第四层:池化层S4
    S4是一个下采样层。C3层的16个10x10的图分别进行以2x2为单位的下抽样得到16个5x5的图。5x5x5x16=2000个连接。连接的方式与S2层类似,如下所示。
    这里写图片描述

    LeNet-5第五层:全连接层C5
    C5层是一个全连接层。由于S4层的16个图的大小为5x5,与卷积核的大小相同,所以卷积后形成的图的大小为1x1。这里形成120个卷积结果。每个都与上一层的16个图相连。所以共有(5x5x16+1)x120 = 48120个参数,同样有48120个连接。C5层的网络结构如下所示。
    这里写图片描述

    LeNet-5第六层:全连接层F6
    F6层是全连接层。F6层有84个节点,对应于一个7x12的比特图,该层的训练参数和连接数都是(120 + 1)x84=10164.
    这里写图片描述

    LeNet-5第七层:全连接层Output
    Output层也是全连接层,共有10个节点,分别代表数字0到9,如果节点i的输出值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式。假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:
    这里写图片描述
    yi的值由i的比特图编码(即参数Wij)确定。yi越接近于0,则标明输入越接近于i的比特图编码,表示当前网络输入的识别结果是字符i。该层有84x10=840个设定的参数和连接。连接的方式如上图.

    以上是LeNet-5的卷积神经网络的完整结构,共约有60,840个训练参数,340,908个连接。一个数字识别的效果如图所示

    这里写图片描述

    LeNet-5的训练算法
    训练算法与传统的BP算法差不多。主要包括4步,这4步被分为两个阶段:
    第一阶段,向前传播阶段:
    a)从样本集中取一个样本(X,Yp),将X输入网络;
    b)计算相应的实际输出Op。
    在此阶段,信息从输入层经过逐级的变换,传送到输出 层。这个过程也是网络在完成训练后正常运行时执行的过程。在此过程中,网络执行的是计算(实际上就是输入与每层的权值矩阵相点乘,得到最后的输出结果):
    Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))
    第二阶段,向后传播阶段
    a)算实际输出Op与相应的理想输出Yp的差;
    b)按极小化误差的方法反向传播调整权矩阵。

    卷积神经网络的优点
    卷积网络较一般神经网络在图像处理方面有 如下优点
    a)输入图像和网络的拓扑结构能很好的吻
    合;
    b)特征提取和模式分类同时进行,并同时在
    训练中产生;
    c)权重共享可以减少网络的训练参数,使神
    经网络结构变得更简单,适应性更强。
    总结
    卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式。

    通过对LeNet-5的网络结构的分析,可以直观地了解一个卷积神经网络的构建方法,可以为分析、构建更复杂、更多层的卷积神经网络做准备。

    LaNet-5的局限性
    CNN能够得出原始图像的有效表征,这使得CNN能够直接从原始像素中,经过极少的预处理,识别视觉上面的规律。然而,由于当时缺乏大规模训练数据,计算机的计算能力也跟不上,LeNet-5 对于复杂问题的处理结果并不理想。

    2006年起,人们设计了很多方法,想要克服难以训练深度CNN的困难。其中,最著名的是 Krizhevsky et al.提出了一个经典的CNN 结构,并在图像识别任务上取得了重大突破。其方法的整体框架叫做 AlexNet,与 LeNet-5 类似,但要更加深一些。

    展开全文
  • CNN笔记:通俗理解卷积神经网络

    万次阅读 多人点赞 2016-07-02 22:14:50
    通俗理解卷积神经网络(cs231n与5月dl班课程笔记) 1 前言 2012年我在北京组织过8期machine learning读书会,那时“机器学习”非常火,很多人都对其抱有巨大的热情。当我2013年再次来到北京时,有...
  • 详解CNN卷积神经网络

    万次阅读 多人点赞 2018-01-11 09:55:14
    详解卷积神经网络(CNN) 详解卷积神经网络CNN概揽Layers used to build ConvNets 卷积层Convolutional layer池化层Pooling Layer全连接层Fully-connected layer 卷积神经网络架构 Layer PatternsLayer ...
  • CNN卷积神经网络的理论教程参考 http://blog.csdn.net/luanpeng825485697/article/details/79009241 加载样本数据集 首先我们要有手写体的数据集文件 t10k-images.idx3-ubyte t10k-labels.idx1-ubyte train-...
  • cnn卷积神经网络

    2019-04-11 14:16:28
    cnn卷积神经网络 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。由于卷积...
  • CNN 卷积神经网络结构

    万次阅读 多人点赞 2016-07-07 22:02:27
    CNNcnn每一层会输出多个feature map, 每个Feature Map通过一种卷积滤波器提取输入的一种特征,每个feature map由多个神经元组成,假如某个feature map的shape是m*n, 则该feature map有m*n个神经元。对于卷积层会有...
  • CNN卷积神经网络原理详解(上)

    万次阅读 多人点赞 2019-10-18 23:59:17
    CNN卷积神经网络原理详解(上)前言卷积神经网络的生物背景我们要让计算机做什么?卷积网络第一层全连接层训练 前言 卷积网络(convolutional network),也叫作卷积神经网络(convolutional neural network,CNN),是...
  • 卷积神经网络主要是对图片进行处理。假如需要对一个1000*1000的图片进行分类,如果用传统的机器学习或者DNN,如要输入1000000个特征,当然也可以提前用一些方法进行降维,但是处理还是不方便。有人提出,人类对于...
  • CNN卷积神经网络结构及参数配置

    千次阅读 2018-07-14 10:00:27
    来源:机器学习算法与自然语言处理作者:白雪峰转载于:https://blog.csdn.net/np4rHI455vg29y2/article/details/789581211、CNN例子Yann LeCun提出的最基本和开始的CNN结构图2、什么是CNN2.1、什么是卷积连续和离散...
  • TensorFlow搭建CNN卷积神经网络

    千次阅读 多人点赞 2017-08-19 00:40:20
    TensorFlow搭建CNN卷积神经网络 该教程采用TernsorFlow搭建CNN卷积神经网络,并利用MNIST数据集进行数字的手写识别
  • CNN卷积神经网络原理讲解+图片识别应用(附源码)

    万次阅读 多人点赞 2018-06-26 16:35:50
    CNN卷积神经网络识别图片,一般需要的步骤有: 卷积层初步提取特征 池化层提取主要特征 全连接层将各部分特征汇总 产生分类器,进行预测识别 1、卷积层工作原理 卷积层...
  • pytorch 实现的cnn卷积神经网络

    千次阅读 2019-03-02 13:33:17
    pytorch 实现的cnn卷积神经网络简介网络结构网络实现训练步骤训练数据测试数据运行截图 简介 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward ...
  • CNN卷积神经网络概述什么是神经网络神经网络的基本单位前馈神经网络卷积神经网络为什么要卷积神经网络什么是卷积一维卷积二维卷积卷积神经网络结构卷积层汇聚层全连接层 什么是神经网络 人工神经网络实质上是数学...
  • 卷积神经网络处理10分类问题,包括数据预处理,贴标签,利用tensorflow创建CNN结构
  • CNN卷积神经网络及图像识别

    千次阅读 2021-02-22 21:13:34
    CNN卷积神经网络及图像识别 前言 神经网络(neual networks)是人工智能研究领域的一部分,当前最流行的神经网络是深度卷积神经网络(deep convolutional neural networks, CNNs),虽然卷积网络也存在浅层结构,但是...
  • CNN卷积神经网络总结

    千次阅读 2020-09-23 15:45:47
    1 DNN和CNN DNN(Deep Neural Networks,深度神经网络) DNN是一个全连接的深度神经网络,也可以用作图像识别,在...而对于卷积神经网络,相邻的两个网络层之间只有部分节点相连,为了方便展示神经元的维度,一般会展
  • CNN卷积神经网络学习笔记

    千次阅读 2017-11-09 13:11:44
    本篇博客主要归纳整理,CNN相关的基础知识和部分经典卷积神经网络结构与特点。图片大部分来自Fei-Fei Li CNN课程PPT、网络和paper,如有侵犯请及时告知CNN相关基础知识卷积神经网络和全连接神经网络的区别区别:...
  • CNN卷积神经网络原理详解(中)

    万次阅读 多人点赞 2019-10-19 12:43:44
    CNN卷积神经网络原理详解(中)卷积神经网络与全连接神经网络的比较卷积运算的数学解释卷积计算的工作模式 卷积神经网络与全连接神经网络的比较 卷积神经网络(Convolutional Neural Network,CNN)是一种前馈...
  • CNN卷积神经网络原理

    千次阅读 2018-07-11 17:42:49
    最近看了cnn神经网络,发现这篇博文很好,通俗易懂。 神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢? 其实卷积神经网络依旧是层级网络,只是层的功能和形式做了...卷积神经网络的层级结构: ...
  • CNN卷积神经网络误差修正过程讲解

    千次阅读 2018-04-20 15:09:03
    目前网上已经有流传一些卷积神经网络反向传播推导的公式了,但由于卷积神经网络结构(特别是卷积运算和池化过程)比较难用公式表达,因此很多公式要看懂其实还蛮累的。我这边主要是借助对比BPNN来直观说明一下CNN...
  • 卷积神经网络CNN结构及TensorFlow实现

    千次阅读 2019-03-26 17:40:03
    一、卷积神经网络CNN结构 1、卷积层CONV 2、池化层POOL 3、全连接层FC 4、CNN常见架构 二、使用tensorflow Estimator构建CNN MNIST分类器 1、CNN模型函数 2、训练和评估CNN分类器 一、卷积神经网络CNN的...
  • CNN卷积神经网络(超详解析)

    千次阅读 多人点赞 2020-04-23 13:11:17
    cs231n课程里给出了卷积神经网络各个层级结构,如下图 上图中CNN要做的事情是:给定一张图片,是车还是马未知,是什么车也未知,现在需要模型判断这张图片里具体是一个什么东西,总之输出一个结果:...
  • CNN卷积神经网络新想法

    万次阅读 多人点赞 2015-08-07 22:10:36
    最近一直在看卷积神经网络,想改进改进弄出点新东西来,看了好多论文,写了一篇综述,对深度学习中卷积神经网络有了一些新认识,和大家分享下。 其实卷积神经网络并不是一项新兴的算法,早在上世纪八十年代就已经被...
  • CNN卷积神经网络之VGGNet

    千次阅读 2021-02-16 20:16:09
    CNN卷积神经网络之VGGNet前言网络结构运用的方法1.多尺度训练2.稠密和多裁剪图像评估对比3.小卷积核和连续的卷积层*4.dropout5.尺寸大小和通道数总结 前言 《Very Deep Convolutional Networks for Large-Scale ...
  • CNN卷积神经网络和反向传播

    万次阅读 多人点赞 2017-08-26 16:03:41
    本文内容来自: 1,Michael Nielsen的《Neural Networks and Deep Learning》中文翻译 ...3,http://blog.csdn.net/yunpiao123456/article/details/52437794卷积神经网络基础:首先看一下全连接网络,即神经元

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,518
精华内容 19,007
关键字:

cnn卷积神经网络主要结构