参数过多:神经网络中多个神经元能够组成一层,这一层的神经元须要和上一层的输出作全链接,固然在输入的时候,也须要将输入数据的每个份量都链接到本身的神经元上做为输入,而后获得一个输出。面试
若是是图像的话,咱们能够把每个像素点,都当成一个特征值。编程
参数过多会带来什么问题呢:bash
解决问题网络
对于图像数据来讲,某个像素点和他周围的关系比较大,可是离他比较远的店的关系就比较小。因此对于一个图像数据来讲,他具备很是大的区域性。ide
基于这样的一个性质,咱们能够作一个筛检,从全链接编程局部连接从而下降他的模型参数函数
(注:区域链接范围是只一个区域的大小是10*10,不是将1000*1000的图像分红100份)学习
局部链接(图像的区域性)spa
固然还能够去调整filter-size:神经元和图像中多大的区域的像素点进行链接3d
参数共享(图像特征与位置无关)code
对于一张图像来讲,不一样的角度能够看到不一样的图像信息。图像的特征和位置是无关的,他的特征就表明着这个东西是什么(好比爱因斯坦的左眼和右眼);和位置无关,就表明着说能够在图像的任何一个位置(多是左上角,多是右上角),若是用每一个神经元去学习一个固定的位置的话,那么这个神经元他提取的特征,他也不知道是什么,由于这个位置是变化的,因此说咱们没法去解释这个神经元到底学到了什么东西。
为了解决这个问题,咱们又作了另一个操做-参数共享:强制每个神经元和图像的局部连接都使用一样的参数。
先看下这么作能够下降模型参数到什么程度
那么这个的物理含义是什么呢:如下图为例,左边是原图,右边是原图的每个区域根据参数块内积获得的神经元,能够想象成是参数再在图像上从左到右从上到下划过生成的一个新的图像。那么能够想象一下参数共享的含义。无论这个特征在哪(图像的哪一个位置),这个参数块就是去捕捉这个特征,捕捉到了,就能够激活对应的某个神经元(每一个参数块由全部局部区域共享,为提取一个特征)
每一个位置进行计算
卷积核的操做:输入图像中的每个区域都和卷积核作全链接,获得输出图像中的一个区域
卷积核和输入图像的计算方法:
步长:控制卷积核在图像上每次划动所隔的位置
padding使输出size变小:
在刚才的计算中,卷积核在图像划事后产生的输出相对输入来讲是逐渐变小的,这个对中间的计算就会比较负责,由于可能会有多个卷积层,若是每层都变小的话,会很难计算。
那么有没有一种办法,让输入和输出的size是同样的呢--padding
padding的方法就是说在图像的周围,加上一些默认值0,那么当卷积核在从加过padding图像划过的时候,产生的输出就和原输入的大小是同样的。padding加的大小,就和卷积核是有关的(根据输出size=输入size-卷积核size+1
的这个公式计算),
感悟:实际上一次卷积操做,就是一次特征提取
多通道:卷积也变成多通道的,通道上的卷积的参数是不共享的,在作计算的过程当中,每一个通道上的卷积的参数和相应图像上的区域作内积,将这三个通道上获得的一样位置上的内积的结果相加起来做为输出神经元的值
多个卷积核
如何产生多通道的神经元—多加几个卷积核,这些卷积核的参数是不共享的。多卷积核的物理意义:卷积核是用来提取某种特征的,当这个区域有这个特征的时候,卷积核就可以捕捉到特征使得输出神经元比较大,没有捕捉到,输出就会比较小。多个卷积核能够用来提取多种特征
卷积层的参数数目举例
卷积层,输入三通道,输出192通道,卷积核大小是3*3 ,问该卷积层有多少参数?
// 3*3 是一个卷积核,由于是三通道的因此再乘3
// (3*3)*3 是一个卷积层,一共有192通道,就有192层
(3*(3*3)) * 192 = 5184
复制代码
激活函数
除了以前讲过的sigmoid激活函数,经常使用的还有其余五种
在卷积神经网络中,比较经常使用的激活函数时ReLU,由于他的计算很是简单(sigmoid须要进行一个很是复杂的指数计算和一个相对复杂的出发计算)
池化
最大值池化:
平均值池化:
池化的性质与性质:
全链接层(和普通神经网络同样)
卷积神经网络结构
卷积神经网络=卷积层+池化层+全链接层
上图年代较早,图中的单词和咱们讲的概念能够先忽略,只看结构的基本信息
因为全链接的结果是向量,是没有办法生成图像的,若是去掉全链接层,咱们就可使得卷积神经网络能够以图像的形式输出模型东西。
以下输出是和输入同等大小的图像,每一个图像上的值就是一个分类信息,用来分类这是否是一个分界面,好比输入是猫和狗,这里就能够把猫和狗区分开来
问题:不padding的卷积和池化会使得图像变小,如何获得和原图同样大小的输出呢?反卷积,使用小于1的步长,这是一个很是奇怪的卷积操做,会在后面提到