微信公众号:python宝
关注可了解更多的python相关知识。若有问题或建议,请公众号留言;
内容目录
一、输入层(训练数据)二、卷积层、卷积和池化的padding1、padding的理解2、卷积padding3、池化padding4、filter和kernel介绍5、权值共享三、池化层、最大值池化与均值池化的区别四、激活层五、全连接
一、输入层(训练数据)
CNN必须将4D数组作为输入。因此,输入数据的形状为(batch_size,height,width,depth),其中第一维表示图像的batch大小,其他三个维表示图像的各个属性,即高度,宽度和深度。深度就是色彩通道的数量。例如,RGB图像的深度为3,而灰度图像的深度为1。
输入矩阵格式(四个维度)::样本数、图像高度、图像宽度、图像通道数
二、卷积层、卷积和池化的padding
卷积是从输入图像中提取特征的第一层,Conv层的目标是提取输入数据的特征。卷积通过使用小方块输入数据学习图像特征来保持像素之间的关系。
Tensorflow中使用tf.nn.conv2d()函数来实现卷积时的输入,其格式如下:
tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=None,name=None)
input:指定需要做卷积的输入图像,它要求是一个Tensor,具有[batch,in_height,in_width,in_channels]这样的形状(shape),具体含义是"训练时一个batch的图片数量,图片高度,图片宽度,图片通道数",注意这是一个四维的Tensor,要求类型为float32或者float64.
filter:相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height,filter_width,in_channels,out_channels]这样的shape,具体含义是"卷积核的高度,卷积核的宽度,图像通道数,滤波器个数",要求类型与参数input相同。有一个地方需要注意,第三维in_channels,就是参数input中的第四维。
strides:卷积时在图像每一维的步长,这是一个一维的向量,长度为4,与输入input对应,一般值为[1,x,x,1],x取步长。
padding:定义元素边框与元素内容之间的空间。string类型的量,只能是"SAME"和“VALID”其中之一,这个值决定了不同的卷积方式。
use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认是True.
name:指定名字
该函数返回一个Tensor,这个输出就是常说的feature map。
注意:在卷积核函数中,padding参数最容易引起歧义,该参数仅仅决定是否要补0,因此一定要清楚padding设置为SAME的真正意义。在设SAME的情况下,只有在步长为1时生成的feature map才会与输入大小相等。
卷积操作过程其实很简单,也就是将卷积核与数据对应相乘,然后求和。剩下的都是些重复性操作,而整个卷积过程的输出便是这每一小小步产生结果的组合了。(卷积在此其实就是内积,步骤很简单,就是根据多个一定的权重(即卷积核),对一个块的像素进行内积运算,其输出就是提取的特征之一