cnn神经网络_cnn神经网络预测 - CSDN
精华内容
参与话题
  • CNN(卷积神经网络)详解

    万次阅读 多人点赞 2019-08-17 11:18:54
    CNN卷积神经网络详解Why CNN局部感受野(local receptive fields)权值共享(Shared weights and biases)池化(Pooling)总的来看 原文链接:https://blog.csdn.net/m0_37490039/article/details/79378143 Why CNN 首先...

    Why CNN

    首先回答这样一个问题,为什么我们要学CNN,或者说CNN为什么在很多领域收获成功?还是先拿MNIST来当例子说。MNIST数据结构不清楚的话自行百度。。

    我自己实验用两个hidden layer的DNN(全连接深度神经网络)在MNIST上也能取得不错的成绩(98.29%)。下面是一个三个hidden layer的网络结构图
    在这里插入图片描述
    图1

    全连接深度神经网络,顾名思义,每个神经元都与相邻层的神经元连接。在这个实验中,每个数字的image是2828,也就是784(=2828)个数值,每个数值对应一个像素值,值的大小反应像素点的强度。这就意味着我们网络的输入层有784个神经元。输出层呢?由于我们是预测0-9这几个数字,输出层当然就是10个神经元了。至于隐藏层节点的个数我们可以自行选定,本实验中选的是500.

    我们想想为什么DNN在训练后能够正确地分类?那肯定是它学到了东西,学到什么东西呢?它学到了图片中的某些空间结构,不同数字它们的空间结构肯定是不一样的,而这样的空间结构就是由像素点与像素点之间的关系形成。我们再仔细看DNN输入层和第一个隐藏层,发现它对我们输入的784个像素点是同等对待的,也就是说它此时并没有考虑像素点与像素点之间的关系。有没有一个好点的模型能够考虑到这点呢?那就是CNN

    CNN有三个几本思想,局部感受野(local receptive fields) 权值共享(shared weights) 池化(pooling)

    局部感受野(local receptive fields)

    刚刚我们在DNN中是把输入层784个神经元排成了一条长线,这里我们还原图片原来的样子(28*28),如下图

    强迫症的同学就不要数每行每列几个了,我已经数过了是28了。。偷笑
    在这里插入图片描述
    图2

    DNN中,我们会把输入层的每个神经元都与第一个隐藏层的每个神经元连接(看看盗图1)。而在CNN中我们这样做的,第一个隐藏层的神经元只与局部区域输入层的神经元相连。下图就是第一个隐藏层的某个神经元与局部区域输入层的神经元相连的情况。
    在这里插入图片描述
    图3

    这里的局部区域就是局部感受野,它像一个架在输入层上的窗口。你可以认为某一个隐藏层的神经元学习分析了它”视野范围“(局部感受野)里的特征。图中一个隐藏层的神经元有5*5个权值参数与之对应。

    我们移动这样一个窗口使它能够扫描整张图,每次移动它都会有一个不同的节点与之对应。我们从输入层左上角开始,如下
    在这里插入图片描述
    图4

    然后,我们一个像素往右滑动一个像素,如下
    在这里插入图片描述
    图5

    以此类推可以形成第一个隐藏层,注意我们的图片是2828的,窗口是55的,可以得到一个24*24(24=28-5+1)个神经元的隐藏层

    这里我们的窗口指滑动了一个像素,通常说成一步(stride),也可以滑动多步,这里的stride也是一个超参,训练是可以根据效果调整,同样,窗口大小也是一个超参。

    权值共享(Shared weights and biases)

    上一节中提到一个隐藏层的神经元有55个权值参数与之对应。这里要补充下,这2424个隐藏层的神经元它们的权值和偏移值是共享的 用公式描述下

    σ(b+∑l=04∑m=04wl,maj+l,k+m)
    σ代表的是激活函数,如sigmoid函数等,b就是偏移值,w就是55个共享权值矩阵,我们用矩阵a表示输入层的神经元,ax,y表示第x+1行第y+1列那个神经元(注意,这里的下标默认都是从0开始计的,a0,0表示第一行第一列那个神经元)所以通过矩阵w线性mapping后再加上偏移值就得到公式中括号里的式子,表示的是隐藏层中第j+1行k+1列那个神经元的输入。有点晕的话就参照上面的图,图4就是j=k=0的情况,图5是j=0,k=1. 最后加上激活函数就表示该隐藏神经元的输出了。这部分原理和DNN是一样的,如果把w改成2828的矩阵就变成了全连接,就是DNN了。

    我们能不能简化一下这个公式呢
    a1=σ(b+w∗a0)
    a1表示隐藏层的输出,a0表示隐藏层的输入,而∗就表示卷积操作(convolution operation) 这也正是卷积神经网络名字的由来。

    由于权值共享,窗口移来移去还是同一个窗口,也就意味着第一个隐藏层所有的神经元从输入层探测(detect)到的是同一种特征(feature),只是从输入层的不同位置探测到(图片的中间,左上角,右下角等等),必须强调下,一个窗口只能学到一种特征!另外,窗口还有其他叫法:卷积核(kernal),过滤器(filter)。我们在做图像识别时光学习一个特征肯定是不够的,我们想要学习更多的特征,就需要更多的窗口。如果用三个窗口的话如下图
    在这里插入图片描述
    图6

    窗口与窗口间的w和b是不共享的,三个窗口就表示有三个w矩阵和三个偏移值b,结果是从整张图片的各个位置学到三种不同的特征。到这里肯定有人会问,你说学到特征了,怎么证明学到了呀?现在我们用20个窗口来学习MNIST里的图片特征,我们只看20个窗口里的权值矩阵w,如果把这20个w画成20张黑白图,每张图片都是5*5(一个权值代表一个像素点),如下图所示
    在这里插入图片描述
    图7

    盯着其中的一张看,白色区域表示权值比较小,说明窗口的这部分对输入层的神经元不敏感(responds less),相反黑色部分表示权值比较大,说明窗口的这部分对输入层的神经元敏感(responds more).每张图片都有明显的黑白区域,这也能够说明CNN确实学到一些和空间结构相关的特征。究竟学的是什么特征呢?这个很难回答清楚,此处暂不深究,更好理解的话可以参考 Visualizing and Understanding Convolutional Networks

    权值共享还有一个很大的好处,就是可以大大减少模型参数的个数。我们的例子中,一个窗口参数个数是26(55+1),20个窗口就是520个参数,如果换成全连接的话就是785(2828+1)个参数,比CNN多了265个参数。可能你觉得265嘛,对计算机来说完全不算什么。如果我们是30个隐藏层的DNN的话(深度学习里很常见的),需要23550(785*30)个参数,是CNN的45倍多。。当然我们也不能光光去比较它们参数的个数,毕竟两个模型本质原理上就相差甚远,但是直觉上我们可以感受到,CNN可以依靠更少的参数来获得和DNN相同的效果,更少的参数就意味着更快的训练速度,这可是谁都想要的。

    池化(Pooling)

    CNN还有一个重要思想就是池化,池化层通常接在卷积层后面。池化这个词听着就很有学问,其实引入它的目的就是为了简化卷积层的输出。通俗地理解,池化层也在卷积层上架了一个窗口,但这个窗口比卷积层的窗口简单许多,不需要w,b这些参数,它只是对窗口范围内的神经元做简单的操作,如求和,求最大值,把求得的值作为池化层神经元的输入值,如下图,这是一个2*2的窗口
    在这里插入图片描述
    图8

    值得注意的是,我们此时的窗口每次移动两步,采用的是求最大值的方法,所有称之为max-pooling,刚刚卷积层含有2424个神经元,经过池化后到池化层就是1212个神经元。通常卷积层的窗口是多个的,池化层的窗口也是多个的。简单来说,卷积层用一个窗口去对输入层做卷积操作,池化层也用一个窗口去对卷积层做池化操作。但是注意这两个操作的本质区别。下面来看一个用三个卷积窗口和跟随其后的池化窗口长啥样。
    在这里插入图片描述
    图9

    怎么理解max-pooling呢?由于经过了卷积操作,模型从输入层学到的特征反映在卷积层上,max-pooling做的事就是去检测这个特征是否在窗口覆盖范围的区域内。这也导致了,它会丢失这种特征所在的精准位置信息,所幸的是池化层可以保留相对位置信息。而后者相比而言比前者更重要。不理解上面的话也没关系,但是需要记住池化层一个最大的好处:经过池化后,大大减少了我们学到的特征值,也就大大减少了后面网络层的参数(上图可以看出池化层的神经元数明显少于卷积层神经元数)。

    max-pooling技术只是池化技术的一种,还有一种比较常用的是L2-pooling,与max-pooling唯一的区别就是在池化窗口扫过的区域里做的操作不是求最大值,而是所有神经元平方后求和再开根号,这和我们L2正则对权值参数的操作是一样的。实际操作中,这两种方式都是比较常用的。池化操作方式的选择也是我们调参工作的一部分,我们可以根据validation data集来调节,选择更好的池化操作。

    总的来看

    介绍完CNN的三个几本思想概念后我们把它串起来看下。
    在这里插入图片描述
    图10
    从左往右依次是输入层,卷积层,池化层,输出层。输入层到卷积层,卷积层到池化层已经详细介绍过了。池化层到输出层是全连接,这和DNN是一样的。
    整体上把我CNN的网络架构,其实和DNN很相似,都是一层一层组合起来的,层与层之间的行为也是有对应的权值w和偏移值b决定的,并且它们的目的也是一致的:通过training data来学习网络结构中的w和b,从而能把输入的图片正确分类。很简单吧。

    到此为之,CNN的基本原理大致介绍完毕了,如果只需对CNN做大致了解的话上面的内容我想应该足够了。下面主要介绍下其数学原理了,想看可以去原文章看。
    原文链接:https://blog.csdn.net/m0_37490039/article/details/79378143

    展开全文
  • 了解CNN这一篇就够了——关于卷积神经网络的介绍

    千次阅读 多人点赞 2019-06-02 09:21:26
    关于CNN, 第1部分:卷积神经网络...在过去的几年里,卷积神经网络(CNN)引起了人们的广泛关注,尤其是因为它彻底的改变了计算机视觉领域。在这篇文章中,我们将以神经网络的基本背景知识为基础,探索什么是CNN,...

    https://www.toutiao.com/a6695023125253325320/

     

    关于CNN,

    第1部分:卷积神经网络的介绍

    CNN是什么?:它们如何工作,以及如何在Python中从头开始构建一个CNN。

    在过去的几年里,卷积神经网络(CNN)引起了人们的广泛关注,尤其是因为它彻底的改变了计算机视觉领域。在这篇文章中,我们将以神经网络的基本背景知识为基础,探索什么是CNN,了解它们是如何工作的,并在Python中从头开始构建一个真正的CNN(仅使用numpy)。

    准备好了吗?让我们开看看吧

    1. 动机

    CNN的经典用例是执行图像分类,例如查看宠物的图像并判断它是猫还是狗。这看起来是一个简单的任务,那为什么不使用一个普通的神经网络呢?

    好问题!

    原因1:图像很大

    现在用于计算机视觉问题的图像通常是224x224或更大的。想象一下,构建一个神经网络来处理224x224彩色图像:包括图像中的3个彩色通道(RGB),得到224×224×3 = 150,528个输入特征!在这样的网络中,一个典型的隐含层可能有1024个节点,因此我们必须为第一层单独训练150,528 x 1024 = 1.5 +亿个权重。我们的网络将是巨大的,几乎不可能训练的。

    我们也不需要那么多权重。图像的好处是,我们知道像素在相邻的上下文中最有用。图像中的物体是由小的局部特征组成的,比如眼睛的圆形虹膜或一张纸的方角。从第一个隐藏层中的每个节点来说,查看每个像素看起来不是很浪费吗?

    原因二:立场可以改变

    如果你训练一个网络来检测狗,你希望它能够检测狗,不管它出现在图像的什么地方。想象一下,训练一个网络,它能很好地处理特定的狗的图像,然后为它提供相同图像的略微移位的版本。狗不会激活相同的神经元,因此网络会有完全不同的反应!

    我们很快就会看到CNN如何帮助我们解决这些问题。

    2.数据集

    在这篇文章中,我们将解决计算机视觉的"Hello,World!":MNIST手写数字分类问题。 这很简单:给定图像,将其分类为数字。

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    MNIST数据集中的每个图像都是28x28,并包含了一个以中心为中心的灰度数字。

    说实话,一个正常的神经网络实际上可以很好地解决这个问题。你可以将每个图像视为一个28x28 = 784维的向量,将其提供给一个784-dim的输入层,堆叠几个隐藏层,最后的输出层包含10个节点,每个数字对应一个节点。

    因为MNIST数据集包含小图像居中,所以我们不会遇到上述的大小或移动问题。然而,在这篇文章的整个过程中请记住,大多数现实世界中的图像分类问题并没有这么简单。

    那么,现在你已经有足够的积累了。让我们正式进入CNN的世界!

    3.卷积

    什么是卷积神经网络?

    它们基本上只是使用卷积层的神经网络,即基于卷积数学运算的Conv层。 Conv图层由一组滤镜组成,你可以将其看作是数字的二维矩阵。 这里有一个例子3x3过滤器:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    我们可以使用一个输入图像和一个过滤器通过将过滤器与输入图像进行卷积来生成一个输出图像。这包括

    1. 将过滤器覆盖在图像的某个位置上。
    2. 在过滤器中的值与其在图像中的对应值之间执行元素级乘法。
    3. 总结所有元素产品。这个和是输出图像中目标像素的输出值。
    4. 对所有位置重复。

    旁注:我们(以及许多CNN实现)实际上在技术上使用的是互相关而不是卷积,但它们做的几乎是一样的。我不会在这篇文章中详细讨论它们之间的区别,因为这并不重要。

    这四步描述有点抽象,我们来做个例子。看下这个微小的4x4灰度图像和这个3x3滤镜:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    图像中的数字表示像素强度,其中0为黑色,255为白色。我们将卷积输入图像和过滤器产生一个2x2输出图像:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    首先,让我们将滤镜叠加在图片的左上角:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    接下来,我们在重叠图像值和过滤器值之间执行逐元素乘法。 以下是结果,从左上角开始向右,然后向下:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    接下来,我们总结所有的结果。这是很容易:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    最后,我们将结果放入输出图像的目标像素中。由于我们的过滤器覆盖在输入图像的左上角,我们的目标像素是输出图像的左上角像素:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    我们做同样的事情来生成输出图像的其余部分:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    3.1这有什么用?

    让我们缩小一下,在更高的层次上看这个。将图像与过滤器进行卷积会做什么?我们可以从我们一直使用的例子3x3过滤器开始,它通常被称为垂直Sobel过滤器:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    下面是一个垂直Sobel过滤器的例子:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    同样,还有一个水平Sobel过滤器:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    看发生了什么?Sobel过滤器是一种边缘检测器。垂直Sobel过滤器检测垂直边缘,水平Sobel过滤器检测水平边缘。输出图像现在很容易解释:输出图像中的亮像素(高值像素)表示在原始图像中有一个强边缘。

    你能看出为什么边缘检测图像可能比原始图像更有用吗? 回想一下我们的MNIST手写数字分类问题。 在MNIST上训练的CNN可以寻找数字1,例如,通过使用边缘检测过滤器并检查图像中心附近的两个突出的垂直边缘。 通常,卷积有助于我们查找特定的本地化图像特征(如边缘),我们可以在以后的网络中使用。

    3.2填充

    还记得以前将4x4输入图像与3x3滤波器卷积得到2x2输出图像吗?通常,我们希望输出图像与输入图像的大小相同。为此,我们在图像周围添加零,这样我们就可以在更多的地方覆盖过滤器。一个3x3的过滤器需要1像素的填充:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    这称为"相同"填充,因为输入和输出具有相同的尺寸。 不使用任何填充,这是我们一直在做的,并将继续为这篇文章做,有时被称为"有效"填充。

    3.3 Conv层(Conv Layers)

    现在我们知道了图像卷积是如何工作的以及它为什么有用,让我们看看它在CNN中的实际应用。如前所述,CNN包括conv层,它使用一组过滤器将输入图像转换为输出图像。conv层的主要参数是它拥有的过滤器的数量。

    对于MNIST CNN,我们将使用一个带有8个过滤器的小conv层作为网络的初始层。这意味着它将把28x28的输入图像转换成26x26x8的容量:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    提醒:输出是26x26x8,而不是28x28x8,因为我们使用了有效的填充,这将输入的宽度和高度降低了2。

    conv层中的4个过滤器每个都产生一个26x26的输出,因此它们叠加在一起构成一个26x26x8。所有这些都是因为3×3(过滤器大小) × 8(过滤器数量)= 72个权重!

    3.4实施卷积

    是时候把我们学到的东西写进代码里了!我们将实现conv层的前馈部分,它负责将过滤器与输入图像进行卷积以生成输出卷。为了简单起见,我们假设过滤器总是3x3(这并不是真的,5x5和7x7过滤器也很常见)。

    让我们开始实现一个conv层类:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    Conv3x3类只接受一个参数:过滤器的数量。在构造函数中,我们存储过滤器的数量,并使用NumPy的randn()方法初始化一个随机过滤器数组。

    注意:如果初始值过大或过小,训练网络将无效。

    接下来,实际的卷积:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    iterate_regions()是一个辅助发生器的方法,收益率为我们所有有效3 x3的图像区域。这对于以后实现该类的向后部分非常有用。

    上面突出显示了实际执行卷积的代码行。让我们来分解一下:

    1. 我们有im_region,一个包含相关图像区域的3x3数组。
    2. 我们有self.filters,一个3d数组。
    3. 我们做im_region * self.filters,它使用numpy的广播机制以元素方式乘以两个数组。 结果是一个3d数组,其尺寸与self.filters相同。
    4. 我们np.sum()上一步的结果使用axis =(1,2),它产生一个长度为num_filters的1d数组,其中每个元素包含相应过滤器的卷积结果。
    5. 我们将结果分配给输出[i,j],其中包含输出中像素(i,j)的卷积结果。

    对输出中的每个像素执行上面的序列,直到得到最终的输出卷为止!让我们测试一下我们的代码:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    目前看起来不错。

    注意:在Conv3x3实现中,为了简单起见,我们假设输入是一个2d numpy数组,因为MNIST图像就是这样存储的。这对我们有用,因为我们使用它作为我们网络的第一层,但大多数cnn有更多的Conv层。如果我们要构建一个更大的网络,需要多次使用Conv3x3,那么我们必须将输入设置为3d numpy数组。

    4. 池化

    图像中的相邻像素往往具有相似的值,因此conv层通常也会为输出中的相邻像素生成相似的值。因此,conv层输出中包含的大部分信息都是多余的。例如,如果我们使用边缘检测过滤器,并在某个位置找到一个强边缘,那么我们很可能也会在距离原始位置1像素的位置找到一个相对较强的边缘。然而,这些都是相同的边缘!我们没有发现任何新东西。

    池化层解决了这个问题。他们所做的就是减少(通过猜测)在输入中汇总值的输入大小。池化层通常由一个简单的操作完成,比如max、min或average。下面是一个最大池层的例子,池的大小为2:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    为了执行最大池化,我们在2x2块中输入了图像(因为池的大小= 2),并将最大值放入对应像素处的输出图像中。就是这样!

    它将输入的宽度和高度除以它的大小。对于MNIST CNN,我们将在初始conv层之后放置一个池大小为2的最大池化层。池化层将26x26x8输入转换为13x13x8输出:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    4.1 Implementing Pooling(实施池)

    我们将实现一个MaxPool2类与我们的conv类相同的方法从上一节:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    这个类的工作原理类似于我们之前实现的Conv3x3类。关键行再次突出显示:要从给定的图像区域找到最大值,我们使用np.amax(), numpy的array max方法。我们设置axis=(0,1),因为我们只想最大化前两个维度(高度和宽度),而不是第三个维度(num_filters)。

    我们来试试吧!

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    我们的MNIST CNN开始走到一起了!

    5. Softmax

    为了完成我们的CNN,我们需要赋予它实际预测的能力。我们将通过使用一个多类分类问题的标准最终层来实现这一点:Softmax层,这是一个使用Softmax激活函数的标准全连接(密集)层。

    提醒:全连接层的每个节点都连接到上一层的每个输出。如果你需要复习的话,我们在介绍神经网络时使用了全连接层图层。

    Softmax将任意实值转换为概率。它背后的数学原理很简单:给定一些数字,

    1. 取e(数学常数)的每一次方。
    2. 把所有的指数(eee的幂)加起来。这个结果是分母。
    3. 用每个数的指数作为它的分子。
    4. 概率= Numerator/Denominator

    写得更妙的是,Softmax对nnn数字执行以下转换X1...Xn:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    Softmax变换的输出总是在[0,1][0,1][0,1][0,1]范围内,并且加起来等于1,由此转换成概率。

    下面是一个使用数字-1、0、3和5的简单例子:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    5.1使用方法

    我们将使用一个包含10个节点的softmax层,每个节点代表一个数字,作为CNN的最后一层。层中的每个节点都将连接到每个输入层。应用softmax变换后,以概率最高的节点表示的数字为CNN的输出!

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    5.2交叉熵损失函数

    你可能会想,为什么要把输出转化为概率呢?最高的产值不总是有最高的概率吗?如果你这么做了,你绝对是对的。我们实际上不需要使用softmax来预测一个数字,而我们只需要从网络中选择输出最高的数字即可!

    softmax真正做的是帮助我们量化我们对预测的确定程度,这在训练和评估CNN时非常有用。更具体地说,使用softmax允许我们使用交叉熵损失函数,它考虑到我们对每个预测的确定程度。下面是我们计算交叉熵损失函数的方法:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    c在哪里是正确的类(在我们的例子中是正确的数字),Pc类c的预测概率,并在natural log中。一如既往的,损失越少越好。例如,在最好的情况下,我们会

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    在更现实的情况下,我们可能会有

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    我们将在稍后的文章中再次看到交叉熵损失函数,所以请记住这一点!

    5.3实施Softmax

    你现在知道这个练习,让我们实现一个Softmax图层类

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    这里没有什么太复杂的。几个亮点:

    • 我们将输入压平(),使其更容易处理,因为我们不再需要它的形状。
    • np.dot()将输入和self相乘。按元素加权,然后对结果求和。
    • np.exp()计算用于Softmax的指数。

    我们现在已经完成了CNN的整个转发!放在一起:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    运行cnn.py给我们输出类似于:

    了解CNN这一篇就够了——关于卷积神经网络的介绍

     

    这是有道理的:使用随机权重初始化,你会期望CNN只会像随机猜测一样好。随机猜测的话,10%的准确率(因为有10类)和一个叉的损失−ln⁡(0.1) = 2.302 {- ln (0.1)} = 2.302−ln(0.1) = 2.302,这是我们得到的!

    想自己尝试或修改这段代码吗?在浏览器中运行CNN。它也可以在Github上使用。

    6. 结论

    以上就是对CNN的介绍!在这篇文章中,我们

    • 为什么CNN在某些问题上可能更有用,比如图像分类。
    • 介绍MNIST手写数字数据集。
    • 了解Conv层,它将过滤器与图像进行卷积以产生更有用的输出。
    • 谈到了池化层,它可以帮助删除除最有用的功能之外的所有功能。
    • 实现了一个Softmax层,因此我们可以使用交叉熵损失。

    还有很多东西我们还没有讲到,比如如何训练CNN。本系列的第2部分将对CNN进行深入的一个训练,包括推导梯度和实施反向传播。

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

    万次阅读 多人点赞 2018-01-11 09:55:14
    详解卷积神经网络(CNN) 详解卷积神经网络CNN概揽Layers used to build ConvNets 卷积层Convolutional layer池化层Pooling Layer全连接层Fully-connected layer 卷积神经网络架构 Layer PatternsLayer ...

    详解卷积神经网络(CNN)


    卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。

    本文首发 : http://www.liuhe.website/index.php?/Articles/single/37


    概揽

    卷积神经网络(Convolutional Neural Networks / CNNs / ConvNets)与普通神经网络非常相似,它们都由具有可学习的权重和偏置常量(biases)的神经元组成。每个神经元都接收一些输入,并做一些点积计算,输出是每个分类的分数,普通神经网络里的一些计算技巧到这里依旧适用。

    所以哪里不同呢?卷积神经网络默认输入是图像,可以让我们把特定的性质编码入网络结构,使是我们的前馈函数更加有效率,并减少了大量参数。

    具有三维体积的神经元(3D volumes of neurons)
    卷积神经网络利用输入是图片的特点,把神经元设计成三个维度 : width, height, depth(注意这个depth不是神经网络的深度,而是用来描述神经元的) 。比如输入的图片大小是 32 × 32 × 3 (rgb),那么输入神经元就也具有 32×32×3 的维度。下面是图解:

    这里写图片描述
    传统神经网络

    这里写图片描述
    卷积神经网络

    一个卷积神经网络由很多层组成,它们的输入是三维的,输出也是三维的,有的层有参数,有的层不需要参数。


    Layers used to build ConvNets

    卷积神经网络通常包含以下几种层:

    • 卷积层(Convolutional layer),卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
    • 线性整流层(Rectified Linear Units layer, ReLU layer),这一层神经的活性化函数(Activation function)使用线性整流(Rectified Linear Units, ReLU)f(x)=max(0,x)
    • 池化层(Pooling layer),通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征。
    • 全连接层( Fully-Connected layer), 把所有局部特征结合变成全局特征,用来计算最后每一类的得分。

    一个卷积神经网络各层应用实例
    应用


    卷积层(Convolutional layer)

    局部感知(Local Connectivity)

    普通神经网络把输入层和隐含层进行“全连接(Full Connected)“的设计。从计算的角度来讲,相对较小的图像从整幅图像中计算特征是可行的。但是,如果是更大的图像(如 96x96 的图像),要通过这种全联通网络的这种方法来学习整幅图像上的特征,从计算角度而言,将变得非常耗时。你需要设计 10 的 4 次方(=10000)个输入单元,假设你要学习 100 个特征,那么就有 10 的 6 次方个参数需要去学习。与 28x28 的小块图像相比较, 96x96 的图像使用前向输送或者后向传导的计算方式,计算过程也会慢 10 的 2 次方(=100)倍。

    卷积层解决这类问题的一种简单方法是对隐含单元和输入单元间的连接加以限制:每个隐含单元仅仅只能连接输入单元的一部分。例如,每个隐含单元仅仅连接输入图像的一小片相邻区域。(对于不同于图像输入的输入形式,也会有一些特别的连接到单隐含层的输入信号“连接区域”选择方式。如音频作为一种信号输入方式,一个隐含单元所需要连接的输入单元的子集,可能仅仅是一段音频输入所对应的某个时间段上的信号。)

    每个隐含单元连接的输入区域大小叫r神经元的感受野(receptive field)

    由于卷积层的神经元也是三维的,所以也具有深度。卷积层的参数包含一系列过滤器(filter),每个过滤器训练一个深度,有几个过滤器输出单元就具有多少深度。

    具体如下图所示,样例输入单元大小是32×32×3, 输出单元的深度是5, 对于输出单元不同深度的同一位置,与输入图片连接的区域是相同的,但是参数(过滤器)不同。

    示例

    虽然每个输出单元只是连接输入的一部分,但是值的计算方法是没有变的,都是权重和输入的点积,然后加上偏置,这点与普通神经网络是一样的,如下图所示:

    计算方法


    空间排列(Spatial arrangement)

    一个输出单元的大小有以下三个量控制:depth, stridezero-padding

    • 深度(depth) : 顾名思义,它控制输出单元的深度,也就是filter的个数,连接同一块区域的神经元个数。又名:depth column
    • 步幅(stride):它控制在同一深度的相邻两个隐含单元,与他们相连接的输入区域的距离。如果步幅很小(比如 stride = 1)的话,相邻隐含单元的输入区域的重叠部分会很多; 步幅很大则重叠区域变少。
    • 补零(zero-padding) : 我们可以通过在输入单元周围补零来改变输入单元整体大小,从而控制输出单元的空间大小。

    我们先定义几个符号:

    • W : 输入单元的大小(宽或高)
    • F : 感受野(receptive field)
    • S : 步幅(stride)
    • P : 补零(zero-padding)的数量
    • K : 深度,输出单元的深度

    则可以用以下公式计算一个维度(宽或高)内一个输出单元里可以有几个隐藏单元:

    WF+2PS+1

    如果计算结果不是一个整数,则说明现有参数不能正好适合输入,步幅(stride)设置的不合适,或者需要补零,证明略,下面用一个例子来说明一下。

    这是一个一维的例子,左边模型输入单元有5个,即W=5, 边界各补了一个零,即P=1,步幅是1, 即S=1,感受野是3,因为每个输出隐藏单元连接3个输入单元,即F=3,根据上面公式可以计算出输出隐藏单元的个数是:53+21+1=5,与图示吻合。右边那个模型是把步幅变为2,其余不变,可以算出输出大小为:53+22+1=3,也与图示吻合。若把步幅改为3,则公式不能整除,说明步幅为3不能恰好吻合输入单元大小。

    步幅说明

    另外,网络的权重在图的右上角,计算方法和普通神经网路一样。


    参数共享(Parameter Sharing)

    应用参数共享可以大量减少参数数量,参数共享基于一个假设:如果图像中的一点(x1, y1)包含的特征很重要,那么它应该和图像中的另一点(x2, y2)一样重要。换种说法,我们把同一深度的平面叫做深度切片(depth slice)((e.g. a volume of size [55x55x96] has 96 depth slices, each of size [55x55])),那么同一个切片应该共享同一组权重和偏置。我们仍然可以使用梯度下降的方法来学习这些权值,只需要对原始算法做一些小的改动, 这里共享权值的梯度是所有共享参数的梯度的总和。

    我们不禁会问为什么要权重共享呢?一方面,重复单元能够对特征进行识别,而不考虑它在可视域中的位置。另一方面,权值共享使得我们能更有效的进行特征抽取,因为它极大的减少了需要学习的自由变量的个数。通过控制模型的规模,卷积网络对视觉问题可以具有很好的泛化能力。


    卷积(Convolution)

    如果应用参数共享的话,实际上每一层计算的操作就是输入层和权重的卷积!这也就是卷积神经网络名字的由来。

    先抛开卷积这个概念不管。为简便起见,考虑一个大小为5×5的图像,和一个3×3的卷积核。这里的卷积核共有9个参数,就记为 Θ=[θij]3×3 吧。这种情况下,卷积核实际上有9个神经元,他们的输出又组成一个3×3的矩阵,称为特征图。第一个神经元连接到图像的第一个3×3的局部,第二个神经元则连接到第二个局部(注意,有重叠!就跟你的目光扫视时也是连续扫视一样)。具体如下图所示。

    卷积

    图的上方是第一个神经元的输出,下方是第二个神经元的输出。每个神经元的运算依旧是

    f(x)=act(i,jnθ(ni)(nj)xij+b)

    需要注意的是,平时我们在运算时,习惯使用 θijxij 这种写法,但事实上,我们这里使用的是 θ(ni)(nj)xij

    现在我们回忆一下离散卷积运算。假设有二维离散函数 f(x,y) , g(x,y) , 那么它们的卷积定义为

    f(m,n)g(m,n)=uvf(u,v)g(mu,nv)

    现在发现了吧!上面例子中的9个神经元均完成输出后,实际上等价于图像和卷积核的卷积操作!


    Numpy examples

    下面用numpy的代码具体的说明一下上面的概念和公式等。

    假设输入存储在一个numpy array X里,那么:
    * 位于 (x, y) 的 depth column 是 X[x, y, :]
    * 深度为 d 的 depth slice 是 X[:, :, d]

    假设X的大小是X.shape: (11,11,4),并且不用补零(P = 0),过滤器(感受野)大小F = 5,步幅为2(S= 2)。那么输出单元的空间大小应该为 (11 - 5) / 2 + 1 = 4,即宽和高都为4 。假设输出存储在 V 中,那么它的计算方式应该为:

    • V[0,0,0] = np.sum(X[:5,:5,:] * W0) + b0
    • V[1,0,0] = np.sum(X[2:7,:5,:] * W0) + b0
    • V[2,0,0] = np.sum(X[4:9,:5,:] * W0) + b0
    • V[3,0,0] = np.sum(X[6:11,:5,:] * W0) + b0

      • V[0,0,1] = np.sum(X[:5,:5,:] * W1) + b1
    • V[1,0,1] = np.sum(X[2:7,:5,:] * W1) + b1
    • V[2,0,1] = np.sum(X[4:9,:5,:] * W1) + b1
    • V[3,0,1] = np.sum(X[6:11,:5,:] * W1) + b1
    • V[0,1,1] = np.sum(X[:5,2:7,:] * W1) + b1
    • V[2,3,1] = np.sum(X[4:9,6:11,:] * W1) + b1

    注意在numpy中 * 表示两个数组对应元素相乘。


    卷积层总结(Summary)

    • 接收三维输入 W1H1D1
    • 需要给出4个参数(hyperparameters):
      • Number of filters K,
      • their spatial extent F,
      • the stride S,
      • the amount of zero padding P.
    • 输出一个三维单元 W2H2D2,其中:
      • W2=W1F+2PS+1
      • H2=H1F+2PS+1
      • D2=K
    • 应用权值共享,每个filter会产生FFD1 个权重,总共 (FFD1)K 个权重和 K 个偏置。
    • 在输出单元,第d个深度切片的结果是由第d个filter 和输入单元做卷积运算,然后再加上偏置而来。

    池化层(Pooling Layer)

    池化(pool)下采样(downsamples),目的是为了减少特征图。池化操作对每个深度切片独立,规模一般为 2*2,相对于卷积层进行卷积运算,池化层进行的运算一般有以下几种:
    * 最大池化(Max Pooling)。取4个点的最大值。这是最常用的池化方法。
    * 均值池化(Mean Pooling)。取4个点的均值。
    * 高斯池化。借鉴高斯模糊的方法。不常用。
    * 可训练池化。训练函数 ff ,接受4个点为输入,出入1个点。不常用。

    最常见的池化层是规模为2*2, 步幅为2,对输入的每个深度切片进行下采样。每个MAX操作对四个数进行,如下图所示:
    池化

    池化操作将保存深度大小不变

    如果池化层的输入单元大小不是二的整数倍,一般采取边缘补零(zero-padding)的方式补成2的倍数,然后再池化。


    池化层总结(Summary)

    • 接收单元大小为:W1H1D1
    • 需要两个参数(hyperparameters):
      • their spatial extent F,
      • the stride S,
    • 输出大小:W2H2D2,其中:
      • W2=W1FS
      • H2=H1FS+1
      • D2=D1
    • 不需要引入新权重

    全连接层(Fully-connected layer)

    全连接层和卷积层可以相互转换:
    * 对于任意一个卷积层,要把它变成全连接层只需要把权重变成一个巨大的矩阵,其中大部分都是0 除了一些特定区块(因为局部感知),而且好多区块的权值还相同(由于权重共享)。
    * 相反地,对于任何一个全连接层也可以变为卷积层。比如,一个K4096 的全连接层,输入层大小为 77512,它可以等效为一个 F=7, P=0, S=1, K=4096 的卷积层。换言之,我们把 filter size 正好设置为整个输入层大小。


    卷积神经网络架构

    Layer Patterns

    常见的卷积神经网络架构是这样的:

    INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC
    • 1

    堆叠几个卷积和整流层,再加一个池化层,重复这个模式知道图片已经被合并得比较小了,然后再用全连接层控制输出。

    上述表达式中 ? 意味着0次或1次,通常情况下:N >= 0 && N <= 3, M >= 0, K >= 0 && K < 3

    比如你可以组合出以下几种模式:
    * INPUT -> FC, 实现了一个线性分类器, 这里 N = M = K = 0
    * INPUT -> CONV -> RELU -> FC
    * INPUT -> [CONV -> RELU -> POOL]*2 -> FC -> RELU -> FC. Here we see that there is a single CONV layer between every POOL layer.
    * INPUT -> [CONV -> RELU -> CONV -> RELU -> POOL]*3 -> [FC -> RELU]*2 -> FC Here we see two CONV layers stacked before every POOL layer. This is generally a good idea for larger and deeper networks, because multiple stacked CONV layers can develop more complex features of the input volume before the destructive pooling operation.


    Layer Sizing Patterns

    • Input layer : 应该是2的整数次幂。比如32,64, 128等。
    • Conv Layer : 使用小的过滤器(filter),F=3 or F=5, 步幅 S=1,如果不能恰好拟合输入层,还要边缘补零。如果使用 F=3, P=1,那么输出大小将与输入一样。如果用更大的过滤器(比如7*7),一般只会在紧挨着原始输入图片的卷积层才会看到。
    • Pool Layer : F=2, S=2

    Case Studies

    大牛们构建的网络

    • LeNet. The first successful applications of Convolutional Networks were developed by Yann LeCun in 1990’s. Of these, the best known is the LeNet architecture that was used to read zip codes, digits, etc.
    • AlexNet. The first work that popularized Convolutional Networks in Computer Vision was the AlexNet, developed by Alex Krizhevsky, Ilya Sutskever and Geoff Hinton. The AlexNet was submitted to the ImageNet ILSVRC challenge in 2012 and significantly outperformed the second runner-up (top 5 error of 16% compared to runner-up with 26% error). The Network had a similar architecture basic as LeNet, but was deeper, bigger, and featured Convolutional Layers stacked on top of each other (previously it was common to only have a single CONV layer immediately followed by a POOL layer).
    • ZF Net. The ILSVRC 2013 winner was a Convolutional Network from Matthew Zeiler and Rob Fergus. It became known as the ZFNet (short for Zeiler & Fergus Net). It was an improvement on AlexNet by tweaking the architecture hyperparameters, in particular by expanding the size of the middle convolutional layers.
    • GoogLeNet. The ILSVRC 2014 winner was a Convolutional Network from Szegedy et al. from Google. Its main contribution was the development of an Inception Module that dramatically reduced the number of parameters in the network (4M, compared to AlexNet with 60M). Additionally, this paper uses Average Pooling instead of Fully Connected layers at the top of the ConvNet, eliminating a large amount of parameters that do not seem to matter much.
    • VGGNet. The runner-up in ILSVRC 2014 was the network from Karen Simonyan and Andrew Zisserman that became known as the VGGNet. Its main contribution was in showing that the depth of the network is a critical component for good performance. Their final best network contains 16 CONV/FC layers and, appealingly, features an extremely homogeneous architecture that only performs 3x3 convolutions and 2x2 pooling from the beginning to the end. It was later found that despite its slightly weaker classification performance, the VGG ConvNet features outperform those of GoogLeNet in multiple transfer learning tasks. Hence, the VGG network is currently the most preferred choice in the community when extracting CNN features from images. In particular, their pretrained model is available for plug and play use in Caffe. A downside of the VGGNet is that it is more expensive to evaluate and uses a lot more memory and parameters (140M).
    • ResNet. Residual Network developed by Kaiming He et al. was the winner of ILSVRC 2015. It features an interesting architecture with special skip connections and features heavy use of batch normalization. The architecture is also missing fully connected layers at the end of the network. The reader is also referred to Kaiming’s presentation (video, slides), and some recent experiments that reproduce these networks in Torch.

    参考

    CS231n: Convolutional Neural Networks for Visual Recognition
    卷积神经网络-维基百科
    卷积特征提取
    卷积神经网络全面解析

    原文地址: http://blog.csdn.net/qq_25762497/article/details/51052861


    展开全文
  • 经典卷积分类网络 ...从机制上讲,卷积神经网络与人的视觉神经还真是像。下面进入正题。 LeNet(1998) 网络基本架构为:conv1 (6) -&amp;amp;amp;amp;amp;amp;gt; pool1 -&amp;amp;amp;amp;amp;am

    本文原创,转载请引用 https://blog.csdn.net/dan_teng/article/details/87192430

    CNN图像分类网络

    一点废话:CNN网络主要特点是使用卷积层,这其实是模拟了人的视觉神经,单个神经元只能对某种特定的图像特征产生响应,比如横向或者纵向的边缘,本身是非常简单的,但是这些简单的神经元构成一层,在层数足够多后,就可以获取足够丰富的特征。从机制上讲,卷积神经网络与人的视觉神经还真是像。下面进入正题。

    LeNet(1998)

    网络基本架构为:conv1 (6) -> pool1 -> conv2 (16) -> pool2 -> fc3 (120) -> fc4 (84) -> fc5 (10) -> softmax,括号内数字表示channel数。这是个很小的五层网络(特指卷积或者全连接层),图中subsampling下采样是pooling layer, kernel size 是2x2, stride 2,feature map刚好为上层一半大小。该网络用于对支票(还是邮政?)的手写数字分类。网络受制于当时的硬件条件和训练数据大小,并未带来神经网络的爆发。
    LeNet网络结构

    AlexNet(2012)

    AlexNet是2012年ILSVRC(ImageNet Large Scale Visual Recognition Challenge)冠军,以高出10%的正确率力压第二名,这是CNN网络首次获胜,将卷积神经网络的巨大优势带入人们视野。
    ILSVRC 历年top5错误率及神经网络深度(层数):
    ILSVRC top5错误率及网络深度
    AlexNet基本架构为:conv1 (96) -> pool1 -> conv2 (256) -> pool2 -> conv3 (384) -> conv4 (384) -> conv5 (256) -> pool5 -> fc6 (4096) -> fc7 (4096) -> fc8 (1000) -> softmax。AlexNet有着和LeNet相似网络结构,但更深、有更多参数。conv1使用11×11的滤波器、步长为4使空间大小迅速减小(227×227 -> 55×55)。

    AlexNet的特点:

    • 第一次使用ReLU激活函数,有更好的梯度特性、训练更快。
    • 使用了随机失活(dropout),p=0.5,可以防止过拟合
    • 大量使用数据扩充技术
    • 使用SGD,Momentum 0.9
    • learning rate 1e-2 (0.01), reduced by 10 manually when val accuracy plateaus
    • L2 weight decay 5e-4
    • batch size 128
    • 使用Norm layers(不再使用)

    由于当时GPU不够强大,网络有两个分支,放在两个GPU上分别训练,当前已经不存在这个问题了,因此也常见到只有一个分支的网络结构图。另外需说明的是,图上表的输入图片大小是224,其实应该是227,否则网络跑不通。

    双分支网络结构:
    AlexNet原网络单分支网络结构(当下使用这个就行)
    AlexNet单分支网络结构
    ILSVRC 2013冠军是ZFNet,仅在AlexNet上做了一些改进,没有突破性技术,这里不再赘述。

    VGGNet

    ILSVRC 2014冠军是GoogLeNet,亚军是VGG。虽然VGG网络是亚军,但是其应用更加广泛。
    VGG网络作者尝试了多种结构,较常用的有VGG16和VGG19(VGG16网络更简单,性能也可以,应用最广泛)。
    VGG16的基本架构为conv1^2 (64) -> pool1 -> conv2^2 (128) -> pool2 -> conv3^3 (256) -> pool3 -> conv4^3 (512) -> pool4 -> conv5^3 (512) -> pool5 -> fc6 (4096) -> fc7 (4096) -> fc8 (1000) -> softmax。 ^3代表重复3次。
    VGG网络结构
    VGG16内存主要消耗在前两层卷积,而参数最主要在第一层全连接中最多。这里说的内存消耗,主要是指存储各层feature map所用的空间,对第一层而言,输入是图片,占用大小就是图片长×宽×通道数,卷积后输出占用的内存就是输出尺寸乘积;参数量中参数是网络需要学习的部分,也就是卷积和全连接层的权重矩阵大小,因为网络中权重矩阵以kernel形式存在,因此参数量就是kernel的(长x宽x通道数)x个数。
    VGG16内存和参数消耗tricks:由于主要参数消耗在fc6(各层命名见后图)这一层,可以替换为对上一层7x7x512的feature map 在7x7上做average pooling,得到512个数,也是可行的(Andrej Karpathy在2016 CS231n课上讲的),这点在GoogLeNet中有应用。

    VGGNet特点:

    • 结构简单,只有3x3,stride 1,pad 1的卷积和2x2,stride 2的max pooling,每过一次pooling,feature map大小降低一半。
    • 参数量大(参数和内存解析见上图)
    • 合适的网络初始化
    • 使用batch normalization
    • FC7提取的特征对其他任务有帮助。FC7始于AlexNet,表示某一全连接层,该层提取特征用于分类任务。

    VGG16中对各层的命名如下:
    VGG16各层命名
    需注意的是,VGGNet之所以使用更小的kernel,是因为3个3x3的conv和1个7x7的conv具有的感受野是相同的,但是3层3x3带来更深的网络结构,非线性更强,另外参数量更少:3*(3x3xCxC)vs 7x7xCxC (这里C是channel数,同时认为kernel数也是C,等价于输出的channel是C)

    GoogLeNet

    GoogLeNet是ILSVRC2014冠军,取名源自作者所处单位Google,其中L大写是为了向LeNet致敬。该网络如之前所提,使用average pooling代替了最耗参数(相应的也最耗时间)的全连接层,同时使用inception模块来代替简单的卷积层(inception的名字来源于盗梦空间中的we need to go deeper的梗);另外,使用1x1的卷积进行了降维。
    inception module

    ResNet

    ResNet是ILSVRC 2015的冠军。ResNet最大的贡献在于解决了深层网络难以训练的问题(反向传播梯度弥散),它的网络深度达到了152层!ResNet网络结构如下图所示。
    ResNet网络结构

    ResNet网络之所以能够训练下去主要得益于residual block(残差模块)的使用。残差模块是一种短路连接,如下图所示。通常的“plain”结构如左侧所示,而residual网络如右侧所示,加了一条短路路径,使得前面的输入可以直接连接到输出。原本图中几层要学习的是H(x),现在由于多加了输入x的影响,网络层需要拟合的变成了F(x) = H(x) - x
    residual blockResNet的特点:

    • 使用BN(Batch Normalization)layer在每个conv layer后
    • 每个residual block包含两个3x3 conv layer
    • 周期性的使用stride 2 pooling降低维度,相当于除2
    • 最耗时的FC层使用pool代替
    • SGD + Momentum 0.9
    • learning rate 0.1, divided by 10 when validation error plateaus
    • Mini-batch size 256
    • Weight decay 1e-5
    • 不使用dropout

    截至2017年,典型CNN网络的准确度和复杂度:
    网络复杂度

    参考资料:
    斯坦福CS231n 2016/2017 教学视频和课件
    https://zhuanlan.zhihu.com/p/31727402

    展开全文
  • 从零开始搭建神经网络(五)卷积神经网络(CNN)

    万次阅读 多人点赞 2018-08-09 17:36:48
    目录 1.基础介绍 2.网络结构 2.1卷积层 ...卷积神经网络的基础内容可以参考:机器学习算法之卷积神经网络 2.网络结构 卷积神经网络一般包括卷积层,池化层和全连接层,下面分别介绍一下 2...
  • 见过最好的神经网络CNN解释

    千次阅读 2018-08-18 17:56:46
    什么是卷积神经网络?为什么它们很重要? 卷积神经网络(ConvNets 或者 CNNs)属于神经网络的范畴,已经在诸如图像识别和分类的领域证明了其高效的能力。卷积神经网络可以成功识别人脸、物体和交通信号,从而为...
  • 我的机器学习教程「美团」算法工程师带你入门机器学习 已经开始更新了,欢迎大家订阅~ 任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,...神经网络技术起源于上世纪五、六...
  • 深度学习 --- 卷积神经网络CNN(LeNet-5网络详解)

    万次阅读 多人点赞 2018-11-26 12:07:34
    卷积神经网络(Convolutional Neural Network,CNN)是一种前馈型的神经网络,其在大型图像处理方面有出色的表现,目前已经被大范围使用到图像分类、定位等领域中。相比于其他神经网络结构,卷积神经网络需要的参数...
  • 卷积神经网络

    万次阅读 多人点赞 2020-10-14 11:43:27
    自今年七月份以来,一直在实验室负责卷积神经网络(Convolutional Neural Network,CNN),期间配置和使用过theano和cuda-convnet、cuda-convnet2。为了增进CNN的理解和使用,特写此博文,以其与人交流,互有增益。...
  • 卷积神经网络(CNN)基础介绍

    万次阅读 多人点赞 2018-01-11 08:37:33
    卷积神经网络(CNN)基础介绍
  • 卷积神经网络(CNN)反向传播算法公式详细推导

    万次阅读 多人点赞 2016-07-18 20:56:15
    在看本篇博文之前,你需要对卷积神经网络有一定的理解,并且能够自主推导出经典BP神经网络反向传播的相关公式。
  • color:rgb(54,132,79)">卷积神经网络简介(Convolutional Neural Networks,简称CNN)作者:josephzh0423 卷积神经网络是 近年发展起来,并引起广泛重视的一种高效识别方法。20世纪60年代,Hubel和Wiesel在研究
  • https://blog.csdn.net/blueblueskyz/article/details/80558252前言一般来说,卷积神经网络会有三种类型的隐藏层——卷积层、池化层、全连接层。卷积层和池化层比较好理解,主要很多教程也会解释。卷积层...
  • DL之CNN:关于CNN(卷积神经网络)经典论文原文(1950~2018)简介总结框架结构图(非常有价值)之持续更新(吐血整理) 导读 关于CNN,迄今为止已经提出了各种网络结构。其中特别重要的两个网络,一个是在1998 年首次被...
  • CNN卷积神经网络

    万次阅读 多人点赞 2019-12-22 21:27:20
    二、CNN卷积神经网络 1、CNN的主要概述 2、CNN的一般结构 三、CNN卷积神经网络的应用 四、常见的CNN卷积神经网络 一、BP神经网络回顾 人工全连接神经网络 (1)每相邻两层之间的每个神经元之间都是有边...
  • CNN基本原理详解

    万次阅读 多人点赞 2019-06-11 09:43:45
    卷积神经网络(Convolutional Neural Network,简称CNN),是一种前馈神经网络,人工神经元可以响应周围单元,可以进行大型图像处理。卷积神经网络包括卷积层和池化层。
  • 首先,基于图像的识别,分类等...卷积神经网络CNN以及众多以此衍生出来的网络模型,可以直接将图像数据作为输入,不仅无需人工对图像进行预处理和额外的特征抽取等复杂操作,而且以其特有的细粒度特征提取方式,使得...
  • 文章整理自向世明老师的PPT,围绕神经网络发展历史,前馈网络(单层感知器,多层感知器,径向基函数网络RBF),反馈网络(Hopfield网络,联想存储网络,SOM,Boltzman及受限的玻尔兹曼机RBM,DBN,CNN)三部分进行...
  • CNN+RNN+LSTM清晰讲解链接

    千次阅读 2018-03-05 16:35:35
    转载自:刘建平Pinard的博客园 卷积神经网络(CNN)模型结构 卷积神经网络(CNN)前向传播算法 卷积神经网络(CNN)反向传播算法 循环神经网络(RNN)模型与前向反向传播算法 LSTM模型与前向反向传播算法...
  • CNN和RNN区别

    万次阅读 2017-09-07 11:25:16
    CNN和RNN区别 CNN主要用于图像;RNN主要用于时序和NLP。 当CNN、RNN都用于NLP时,它们的区别在于: RNN(循环神经网络),当前节点的输入...CNN(卷积神经网络),当前节点的输入以树结构形式仅包含上一层节点信息。
1 2 3 4 5 ... 20
收藏数 69,817
精华内容 27,926
关键字:

cnn神经网络