赞
踩
当我们要处理的网络的特征值过多时,按照传统方法(搭建全连接层)搭建神经网络将会耗费大量空间:
像这样的仅仅是搭建一层网络就会耗费
N
∗
M
N*M
N∗M个空间。
而当我们要处理一张512*512的三通道照片时,搭建网络所消耗的空间将非常巨大,于此同时所带来的时间消耗也会很大。
于是,为了解决这样一类问题,我们就往神经网络中引入了卷积的概念。
所以,顾名思义,卷积神经网络就是:卷积+神经网络
一句话简单地说,卷积的作用就是提取精炼原来数据的特征。
Convolutin(卷积)
BN(批标准化)
Activation(激活)
Pooling(池化)
Dropout(丢弃)
介绍卷积层之前,先介绍几个概念:
卷积核:就是卷积的大小,一般为正方形或立方体。
这个图片中间的就是一个3x3的卷积核
滑动步长:即卷积核一次性移动的长度
全零填充:是否需要在原矩阵旁加一圈0
在tensorflow中有帮我们搭建好建立卷积网络的函数:
tf.keras.layers.Conv2D(
filter = 卷积核个数
kernel_size = 卷积核尺寸(若为正方形可以只写边长)
strides = 滑动步长(默认为1,纵向横向相等可以就写一个,否则为纵向+横向)
padding = "same" or "valid" 是否使用全0天才(默认为否)
activation = "relu"or"sigmod"or"tanh"使用的激活函数
#若存在BN层可不写
)
当然,在正式建立的时候这些参数前面的英文是可以忽略的
举个例子:
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'的卷积神经网络
])
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')#激活层
#...
])
如上:
Activation('激活函数名')
什么是池化层:池化层用于减少特征数据量:
用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填充,
)
为了防止过拟合,神经网络在训练时,将一部分神经元按照概率从神经网络中暂时舍弃,实现这一层的网络叫做舍弃层。
用tensorflow实现舍弃层:
Droupout(舍弃概率)
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),#舍弃层
])
之后的配置学习方法之类的如正常神经网络一致即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。