• 卷积操作特征图输出大小


    卷及神经网络的卷积操作对输入图像的边缘位置有两种处理方式:
    1. 有效填充
    2. 边缘填充
    有效填充:滤波器的采样范围不超过图片的边界,strides=1时,输出特征图的大小计算方法为input_height - filter_height +1
    相同填充,滤波器采样范围超过边界,且超过边界部分使用0填充,strides = 1 时,输出特征图的大小和输入图一样,即output_height=input_height
     
     
    有效填充
     
    相同填充
     
     
    在tensorflow中,这两种操作的的输出特征图大小如何计算呢?
     
    记输入形状为【input_height,input_width,input_depth】
     
    采用same padding
    当strides设为2时,则输出的特征图的大小为【input_height/2, input_width/2, output_depth】
    注意:如果input_height/2为上取整,即input_height=11时,在此有input_height/2 = 6
    >>> import tensorflow as tf
    >>> aa = tf.truncated_normal([100,11,11,3])
    >>> aa.shape
    TensorShape([Dimension(100), Dimension(11), Dimension(11), Dimension(3)])
    >>> bb = tf.layers.conv2d(aa, 3, 4, 2,padding='same')
    >>> bb.shape
    TensorShape([Dimension(100), Dimension(6), Dimension(6), Dimension(3)])
    当strides设为3时,则输出的特征图的大小为【input_height/3, input_width/3, output_depth】
    同理当input_height=11时,在此有input_height/3 = 4
    >>> import tensorflow as tf
    >>> aa = tf.truncated_normal([100,11,11,3])
    >>> aa.shape
    TensorShape([Dimension(100), Dimension(11), Dimension(11), Dimension(3)])
    >>> bb = tf.layers.conv2d(aa, 3, 4, 3,padding='same')
    >>> bb.shape
    TensorShape([Dimension(100), Dimension(4), Dimension(4), Dimension(3)])
    >>> bb = tf.layers.conv2d(aa, 3, 4, (2,3),padding='same') >>> bb.shape TensorShape([Dimension(100), Dimension(6), Dimension(4), Dimension(3)])
     
    采用valid padding
     当strides设为1时,则输出的特征图的大小为【input_height - kernel_size + 1, input_width - kernel_size + 1, output_depth】
    >>> import tensorflow as tf
    >>> aa = tf.truncated_normal([100,11,11,3])            #创建形状为11*11*3的tensor(前面的100为batch size,可忽略)
    >>> bb = tf.layers.conv2d(aa, 3, 4, 1,padding='valid') #strides设为1
    >>> bb.shape
    TensorShape([Dimension(100), Dimension(8), Dimension(8), Dimension(3)]) #输出大小为 8*8*3
    >>> bb = tf.layers.conv2d(aa, 3, 3, 1,padding='valid')
    >>> bb.shape
    TensorShape([Dimension(100), Dimension(9), Dimension(9), Dimension(3)])

    当strides设为k时,则输出的特征图的大小为【(input_height - kernel_size + 1)/k, (input_width - kernel_size + 1)/k, output_depth】
    注意:除法向上取整

    >>> bb = tf.layers.conv2d(aa, 3, 4, 2,padding='valid')  
    >>> bb.shape
    TensorShape([Dimension(100), Dimension(4), Dimension(4), Dimension(3)])
    
    >>> bb = tf.layers.conv2d(aa, 3, 4, 3,padding='valid')
    >>> bb.shape
    TensorShape([Dimension(100), Dimension(3), Dimension(3), Dimension(3)])
    
    >>> bb = tf.layers.conv2d(aa, 3, 4, 4,padding='valid')
    >>> bb.shape
    TensorShape([Dimension(100), Dimension(2), Dimension(2), Dimension(3)])

    以下几个可以验证上述结论:

    >>> bb = tf.layers.conv2d(aa, 3, 3, 2,padding='valid')
    >>> bb.shape
    TensorShape([Dimension(100), Dimension(5), Dimension(5), Dimension(3)])
    >>> bb = tf.layers.conv2d(aa, 3, 3, 3,padding='valid')
    >>> bb.shape
    TensorShape([Dimension(100), Dimension(3), Dimension(3), Dimension(3)])
    >>> bb = tf.layers.conv2d(aa, 3, 3, 4,padding='valid')
    >>> bb.shape
    TensorShape([Dimension(100), Dimension(3), Dimension(3), Dimension(3)])
    >>> bb = tf.layers.conv2d(aa, 3, 3, 5,padding='valid')
    >>> bb.shape
    TensorShape([Dimension(100), Dimension(2), Dimension(2), Dimension(3)])
  • 相关阅读:
    javascript基础全等号运算符
    javascript 使用ScriptX实现打印
    跨服务器与本地服务器不同数据库的SQL操作语句
    ASP.NET网络上实现单点登录
    FGMap API 帮助文档
    基于ArcEngine写的GoogleMap地图切割程序
    基于SuperMap Objects写的GoogleMap地图切割程序(三)
    使用SuperSocket开发联网斗地主(四):出牌
    JAVA创建对象方法
    Mysql 外键约束
  • 原文地址:https://www.cnblogs.com/max-hu/p/6987389.html
Copyright © 2020-2023  润新知