卷积层参数解释
tf.nn.conv2d(input,filter, strides, padding, use_cudnn_on_gpu=bool, data_format,name=None)
input:指定需要做卷积的输入图像,输入要求为一个4维的Tensor,要求输入类型为float32或者float64。输入的shape为[batch, in_height, in_width, in_channels],分别表示:训练时一个batch的图片数量,图片的高度,图片的宽度,图片的通道数
filter:卷积核,输入要求为一个4维的Tensor,输入的shape为[filter_height,filter_width, in_channels, out_channels],分别表示:卷积核的高度,卷积核的宽度,图像通道数,卷积核个数
strides: 决定卷积的窗口在图像上每一个维度上的步长,为一维向量,要求输入类型为int,其中典型的设置为strides[0]=strides[3]=1(在data_format为默认值时,如果data_format有改变需要根据data_format的顺序决定strides的向量的顺序)
strides[0]表示batch,strides[3]表示卷积核的深度,因为需要遍历数据中所有的batch,所以设置为1
当strides[0]=strides[3]=-1时,表示让代码自动根据输入的batch size来调整,这样设置的好处是不需要人手动调整参数
例如:一个灰度图像为 32*32 大小,则输入矩阵为00 01 02 03 04 ...
10 11 12 13 14 ...
20 21 22 23 24 ...
3031 32 33 34 ..假设卷积窗口的步长在每一个维度上都为1,即strides= [1,1,1,1],并且padding=”SAME”
那么输出为:
F(00 01
10 11)
接着
F(01 02
11 12)……
接着第二行
F(10, 11
20, 21) ……
如果卷积窗口的步长在每一个维度上都为2,即strides= [1,2,2,1],并且padding=”SAME”
那么输出为
F(00, 01
10, 11)
接着
F(02, 03
padding:可选“SAME”和“VALID”,决定不同的卷积方式
SAME:采用补全的方式,补0 , VALID:采用丢弃方式
假设输入矩阵为W*W,卷积核为F*F,步长为S
输出为new_W
经过VALID的方式卷积:
New_W = (W-F+1) / S 结果向上取整
经过SAME的方式卷积:
New_W = W / S 结果向上取整
则需要pad的像素数为:
Need_padding_pixel = (New_W – 1) * S + F –W
于是在矩阵W*W的左边或者上方添加像素为:
New_padding_left = new_padding_top = Need_padding_pixel/ 2 结果向上取整
use_cudnn_on_gpu=bool:是否使用cudnn加速,默认为true
data_format:可选"NHWC","NCHW",默认为"NHWC"。指定输入和输出数据的格式,默认值表示data将被存储为[batch, height, width, channels]的顺序。"NCHW"表示data将被存储为[batch,channels, height, width] 的顺序。
结果返回一个tensor,即feature map
参考文档:https://stackoverflow.com/questions/34642595/tensorflow-strides-argument
https://blog.csdn.net/mao_xiao_feng/article/details/78004522
http://www.cnblogs.com/wuzhitj/p/6433871.html
https://www.jianshu.com/p/05c4f1621c7e