当前位置:   article > 正文

从0开始的深度学习——搭建一个卷积神经网络_卷积神经网络搭建

卷积神经网络搭建

为什么需要卷积神经网络

当我们要处理的网络的特征值过多时,按照传统方法(搭建全连接层)搭建神经网络将会耗费大量空间:
在这里插入图片描述
像这样的仅仅是搭建一层网络就会耗费 N ∗ M N*M NM个空间。
而当我们要处理一张512*512的三通道照片时,搭建网络所消耗的空间将非常巨大,于此同时所带来的时间消耗也会很大。
于是,为了解决这样一类问题,我们就往神经网络中引入了卷积的概念。
所以,顾名思义,卷积神经网络就是:卷积+神经网络

卷积的作用

一句话简单地说,卷积的作用就是提取精炼原来数据的特征。
在这里插入图片描述

卷积神经网络的一般结构:

  1. C:Convolutin(卷积)
  2. B:BN(批标准化)
  3. A:Activation(激活)
  4. P:Pooling(池化)
  5. D:Dropout(丢弃)
    一般情况下,我们要建立一个卷积神经网络,只需要建立好这5个网络层,最后再连接上一个全连接的输出层即可。
    下面,我将分步介绍这5层网络(基于tensorflow):

卷积层:

介绍卷积层之前,先介绍几个概念:
卷积核:就是卷积的大小,一般为正方形或立方体。
在这里插入图片描述
这个图片中间的就是一个3x3的卷积核
滑动步长:即卷积核一次性移动的长度
全零填充:是否需要在原矩阵旁加一圈0
在tensorflow中有帮我们搭建好建立卷积网络的函数:

tf.keras.layers.Conv2D(
    filter = 卷积核个数
    kernel_size = 卷积核尺寸(若为正方形可以只写边长)
    strides = 滑动步长(默认为1,纵向横向相等可以就写一个,否则为纵向+横向)
    padding = "same" or "valid" 是否使用全0天才(默认为否)
    activation = "relu"or"sigmod"or"tanh"使用的激活函数
    #若存在BN层可不写
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

当然,在正式建立的时候这些参数前面的英文是可以忽略的
举个例子:

model = tf.keras.models.Sequential([
    Conv2D(3,5,padding='vaild',activation='relu')
    #建立一个由三个卷积核构成,卷积核尺寸为5x5,步长为1,不使用全0填充,激活函数为'relu'的卷积层神经网络
    conv2D(filters=6,kernel_size=(5,4),strides=2,padding='same',activation='sigmod')
    #建立一个由6个卷积核构成,卷积核尺寸为5x4,步长为2,使用全0填充,激活函数为'sigmod'的卷积神经网络
])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

BN层:

BN层叫做批标准化层
标准化:使数据符合0均值,1为标准差的分布
批标准化:对一小批数据做标准化处理
为什么要进行标准化:神经网络对以0为均值,1为标准差的数据的识别度高,拟合效果好,所以我们都希望喂入神经网络的数据符合这一标准,故运用了标准化这一步骤。
需要注意的是:BN层位于卷积层之后,激活层之前,所以当你要运用BN层时,需要将卷积层和激活层分开写。
用tensorflow描述标准化:

model = tf.keras.models.Sequential([
    Conv2D=(filters=5,kernel_size=(4,4),padding='same')
    BatchNormalization(),#BN层
    Activation('relu')#激活层
    #...
])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

激活层

如上:

Activation('激活函数名')
  • 1

池化层

什么是池化层:池化层用于减少特征数据量:
在这里插入图片描述
用tensorflow描述池化:

#按最大值优化:
tf.keras.layers.Maxpool2D(
    pool_size=池化核尺寸,
    strides=池化步长,
    padding='vaild'or'same'是否使用全0填充,
)
#按平均值池化:
tf.keras.layers.AveragePooling2D(
    pool_size=池化核尺寸,
    strides=池化步长,
    padding='vaild'or'same'是否使用全0填充,
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

舍弃层:

为了防止过拟合,神经网络在训练时,将一部分神经元按照概率从神经网络中暂时舍弃,实现这一层的网络叫做舍弃层。
用tensorflow实现舍弃层:

Droupout(舍弃概率)
  • 1

搭建一个卷积神经网络:

model = tf.keras.models.Sequential([
    #CBAPD
    Conv2D(filter=6,kernel_size=(5,5),strides=2,padding='same'),#卷积层
    BatchNormalization(),#BN层
    Activation('relu'),#激活层
    MaxPool2D(pool_size=(2,2),strides=1,padding='same'),#池化层
    Dropout(0.2),#舍弃层
])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

之后的配置学习方法之类的如正常神经网络一致即可

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/371762
推荐阅读
相关标签
  

闽ICP备14008679号