1 引言
全连接网络:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出为预测的结果。
参数个数:Σ(前层x后层+后层)
如之前用于手写识别的3层全连接网络,输入层784个节点,隐藏层500个节点,输出层10个节点。则:
隐藏层参数:748*500+500
输出层参数:500*10+10
总计:397510≈40万
注:这里说的某层的参数是指该层与前一层之间的参数,因而输入层没有参数。
所以,一张分辨率仅仅是28x28的黑白图像,就有近40万个待优化的参数。现实生活中高分辨率的彩色图像,像素点更多,且为红绿蓝三通道信息。
待优化的参数过多, 容易导致模型过拟合。为避免这种现象,实际应用中一般不会将原始图片直接喂入全连接网络。而是先对原始图像进行特征提取,把提取到的特征喂给全连接网络,再让全连接网络计算出分类评估值。
2 CNN基础
2.1 卷积 Convolutional
卷积是一种有效提取图片特征的方法。一般用一个正方形卷积核,遍历图片上的每一个像素点。图片与卷积核重合区域内相对应的每一个像素值乘卷积核内相对应点的权重,然后求和,再加上偏置后,最后得到输出图片中的一个像素值。
2.2 全零填充 Pdding
有时会在输入图片周围进行全零填充,这样可以保证输出图片的尺寸和输入图片一致。
输出数据的尺寸=(w+2*p-k)/s+1
w:输入尺寸
p:padding尺寸
k:卷积核大小(有时也用f表示)
s:核滑动步长
如:输入量是32x32x3,核是5x5x3,不用全零填充,则输出为(32-5+1)/1=28。
如果要让输出量保持在32x32x3,可根据公式计算出需要填充几层零。32=(32+2P-5)/1 +1,计算出P=2,即需填充2层(圈)零。
2.3 TensorFlow中卷积计算函数
tf.nn.conv2d(输入,卷积核,步长,padding='VALID')
输入:eg.[batch,5,5,1]
用 batch 给出一次喂入多少张图片
每张图片的分辨率大小,比如5行5列
这些图片包含几个通道的信息(单通道灰度图:1,红绿蓝三通道彩图:3)
卷积核:eg.[3,3,1,16]
卷积核行列分辨率分别为3行3列
卷积核是1通道的,通道数由输入图片的通道数决定,它等于输入图片的通道数,所以也是1。
一共有16个这样的卷积核,说明卷积操作后输出图片的深度是16,也就是输出为16通道。
步长:eg.[1,1,1,1]
第二个参数表示横向滑动步长
第三个参数表示纵向滑动步长。
第一个和最后一个1这里固定的,表示横向纵向都以1为步长。
padding:是否使用padding,默认用的是VALID,注意这里是以字符串的形式给出VALID。