TensorFlow学习:卷积层conv2d参数

卷积层参数解释

tf.nn.conv2d(input,filter, strides, padding, use_cudnn_on_gpu=bool, data_formatname=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]表示batchstrides[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

阅读更多
换一批

没有更多推荐了,返回首页