实践反作用于理论
一、概论。
全连接NN:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出为预测的结果,参数的个数:∑( 前层 X 后层 + 后层 )
为防止过拟合,实际应用中会先对原始图像进行特征提取,在把提取到的特征喂给全连接网络,
卷积(Convolutional):可认为是一种有效提取图像特征的方法。一般会用一个正方形卷积核,遍历图片上的每个点。图片区域内,相对应的每一个像素值,乘以卷积核内相对应点的权重,求和,再加上偏置。
池化(pooling):用于减少特征数量。最大值池化可以提取图片纹理,均值池化可以保留背景特征
## 输出图片边长=( 输入图片边长 - 卷积核长+1 ) / 步长
二、CNN模型的主要模块
1、高层次抽象特征 精减特征点:卷积 激活 池化
2、全连接
三、tensorflow相关函数
1、计算卷积:
tf.nn.conv2d (输入描述,eg.[ batch , 5,5( 注:5,5分辨率 ),3( 注:通道数,此处为rgb三通道 ) ]
卷积核描述,eg.[ 3,3( 注:行列分辨率:3*3 ), 1( 注:通道数) ,16(注:核个数) ] ( 注:说明输出深度是16,输出通道为16,有16个输出 )
核滑动步长,eg.[ 1(注:固定是1) , 1( 注:行步长), 1( 注:列步长) ,1(注:固定是1,两个固定表示不在batch或channel间进行滑动) ]
padding='VALID' ( 注:valid表示不用全零填充,否则为same )
)
2、计算池化:
最大池化为tf.nn.max_pool,平均池化: tf.nn.avg_pool
pool=tf.nn.max_pool( 输入描述,eg.[ batch , 28,28 (注:行列分辨率 28*28 ) ,6(通道数) ]
池化描述(仅大小),eg.[ 1(注:固定是1) , 2,2(注:行列分辨率 2*2), 1(注:固定是1) ]
池化核滑动步长,eg.[1(注:固定是1) , 2( 注:行步长), 2( 注:列步长) ,1(注:固定是1) ]
padding = ' SAME '
)
3、舍弃(Dropout):
在神经网络的训练过程中,将一部分神经元按照一定概率从神经网络中暂时舍弃。使用时被舍弃的神经元恢复连接。用于防止过拟合。
tf.nn.dropout( 上层输出,暂时舍弃的概率 )