在学习构建简单的CNN网络的过程中,发现了conv2d这个函数,他和max_pool一样都是构建卷积层的工具函数。这两个函数都有不理解的地方。做个笔记边记录边理解一下哈哈。
conv2d函数:tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=None,name=None
下面详解参数的含义:
input:张量tensor,每个元素的格式必须float32或者float64。input的形状:[batch,in_heigth,in_width,in_channels]。
batch为训练过程中每迭代一次的样本数量(在我看到的教程中设置的值为-1,这个需要进一步了解)
in_height,in_width分别为样本的高和宽度。
in_channels为图片的通道数,如黑白色图片的通道数为1,通常彩色图片的通道数为3。
filter:一个tensor,元素的类型与input中元素的类型是一样的。
filter的形状:[filter_height,filter_width,in_chanells,out_channels]。
参数代表分别为权重的高和宽,输入的channels和输出的channels。
stride:长度为4的list,元素类型为int。表示每一个维度滑动的步长。如果stride = [1,1,1,1]。
第一个参数:表示在样本上的步长默认为1。
第二个参数:表示在高度上的步长默认为1。
第三个参数:表示在宽度上的步长默认为1。
第四个参数:表示在通道上的步长默认为1。
padding: 选择填充的方式,有两种方式1,VALID 2,SAME。
VALID:采用的是丢弃的方式。如下图input_width=13,只允许滑动两次,多余的全部丢弃。
SAME的方式,采用的是补全的方式。对于input_width为13的输入,允许滑动3次,但是需要补充3个元素,左奇右偶,在左边补充一个0,在右边补充两个0。
一般情况下都设置为SAME模式。
use_cudnn_on_gpu:bool类型:表示是否使用cudnn加速。
name:此操作的名字。
max_pooling是CNN当中的最大值池化操作。
tf.nn.max_pool(value, ksize, strides, padding, name=None)参数解释:
value:需要池化的输入,一般池化层链接在卷积层的后面,所以输入通常是feature map,
形状为:[batch,height,width,channels]。
ksize:池化窗口的大小,取一个思维向量,一般为[1,height,width,1],因为我们不想在batch和channels上做池化,
所以两个维度设置为1。
strides:和卷积类似,窗口在每一个维度上滑动的步长。
padding:和卷积类似,可以取'VALID' 或者'SAME'。