码迷,mamicode.com
首页 > 其他好文 > 详细

Tensorflow之CNN卷积层池化层padding规则

时间:2019-12-08 00:56:37      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:gif   ott   port   sam   height   shape   span   class   none   

padding的规则

·          padding=‘VALID’时,输出的宽度和高度的计算公式(下图gif为例)

    技术图片技术图片

      输出宽度:output_width = (in_width-filter_width+1)/strides_width  =(5-3+1)/2=1.5【向上取整=2】

    输出高度:output_height = (in_height-filter_height+1)/strides_height  =(5-3+1)/2=1.5【向上取整=2】

    输出的形状[1,2,2,1]

    技术图片

技术图片
import tensorflow as tf
image = [0,1.0,1,2,2,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,2,0,1,0]
input = tf.Variable(tf.constant(image,shape=[1,5,5,1]))  ##1通道输入
fil1 = [-1.0,0,1,-2,0,2,-1,0,1]
filter = tf.Variable(tf.constant(fil1,shape=[3,3,1,1]))  ##1个卷积核对应1个featuremap输出

op = tf.nn.conv2d(input,filter,strides=[1,2,2,1],padding=VALID)  ##步长2,VALID不补0操作

init = tf.global_variables_initializer()

with tf.Session() as  sess:
    sess.run(init)
    # print(‘input:\n‘, sess.run(input))
    # print(‘filter:\n‘, sess.run(filter))
    print(op:\n,sess.run(op))

##输出结果
‘‘‘
 [[[[ 2.]
   [-1.]]

  [[-1.]
   [ 0.]]]]
‘‘‘
VALID步长2

    如果strides=[1,3,3,1]的情况又是如何呢?   

    输出宽度:output_width  = (in_width-filter_width+1)/strides_width  =(5-3+1)/3=1

    输出高度:output_height = (in_height-filter_height+1)/strides_height  =(5-3+1)/3=1

    输出的形状[1,1,1,1],因此输出的结果只有一个

    技术图片

技术图片
import tensorflow as tf
image = [0,1.0,1,2,2,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,2,0,1,0]
input = tf.Variable(tf.constant(image,shape=[1,5,5,1]))  ##1通道输入
fil1 = [-1.0,0,1,-2,0,2,-1,0,1]
filter = tf.Variable(tf.constant(fil1,shape=[3,3,1,1]))  ##1个卷积核对应1个featuremap输出

op = tf.nn.conv2d(input,filter,strides=[1,3,3,1],padding=VALID)  ##步长2,VALID不补0操作

init = tf.global_variables_initializer()

with tf.Session() as  sess:
    sess.run(init)
    # print(‘input:\n‘, sess.run(input))
    # print(‘filter:\n‘, sess.run(filter))
    print(op:\n,sess.run(op))

##输出结果
‘‘‘
op:
 [[[[ 2.]]]]
‘‘‘
VALID步长3

              padding=‘SAME’时,输出的宽度和高度的计算公式

    输出宽度:output_width  = in_width/strides_width=5/2=2.5【向上取整3】

    输出高度:output_height = in_height/strides_height=5/2=2.5【向上取整3】

    则输出的形状:[1,3,3,1]

    那么padding补0的规则又是如何的呢?【先确定输出形状,再计算补多少0】

    pad_width = max((out_width-1)*strides_width+filter_width-in_width,0)=max((3-1)*2+3-5,0)=2

    pad_height = max((out_height-1)*strides_height+filter_height-in_height,0)=max((3-1)*2+3-5,0)=2

    pad_top = pad_height/2=1

    pad_bottom = pad_height-pad_top=1

    pad_left = pad_width/2=1

    pad_right = pad_width-pad_left=1

    技术图片    

技术图片
import tensorflow as tf
image = [0,1.0,1,2,2,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,2,0,1,0]
input = tf.Variable(tf.constant(image,shape=[1,5,5,1]))  ##1通道输入
fil1 = [-1.0,0,1,-2,0,2,-1,0,1]
filter = tf.Variable(tf.constant(fil1,shape=[3,3,1,1]))  ##1个卷积核对应1个featuremap输出

op = tf.nn.conv2d(input,filter,strides=[1,2,2,1],padding=SAME)  ##步长2,VALID不补0操作

init = tf.global_variables_initializer()

with tf.Session() as  sess:
    sess.run(init)
    # print(‘input:\n‘, sess.run(input))
    # print(‘filter:\n‘, sess.run(filter))
    print(op:\n,sess.run(op))

##输出结果
‘‘‘
op:
 [[[[ 3.]
   [ 1.]
   [-4.]]

  [[ 3.]
   [ 0.]
   [-3.]]

  [[ 4.]
   [-1.]
   [-3.]]]]
‘‘‘
SAME步长2

    如果步长为3呢?补0的规则又如何?

    输出宽度:output_width  = in_width/strides_width=5/3=2

    输出高度:output_height = in_height/strides_height=5/3=2

    则输出的形状:[1,2,2,1]

    那么padding补0的规则又是如何的呢?【先确定输出形状,再计算补多少0】

    pad_width = max((out_width-1)*strides_width+filter_width-in_width,0)=max((2-1)*3+3-5,0)=1

    pad_height = max((out_height-1)*strides_height+filter_height-in_height,0)=max((2-1)*3+3-5,0)=1

    pad_top = pad_height/2=0【向下取整】

    pad_bottom = pad_height-pad_top=1

    pad_left = pad_width/2=0【向下取整】

    pad_right = pad_width-pad_left=1

    技术图片

技术图片
import tensorflow as tf
print(3/2)
image = [0,1.0,1,2,2,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,2,0,1,0]
input = tf.Variable(tf.constant(image,shape=[1,5,5,1]))  ##1通道输入
fil1 = [-1.0,0,1,-2,0,2,-1,0,1]
filter = tf.Variable(tf.constant(fil1,shape=[3,3,1,1]))  ##1个卷积核对应1个featuremap输出

op = tf.nn.conv2d(input,filter,strides=[1,3,3,1],padding=SAME)  ##步长2,VALID不补0操作

init = tf.global_variables_initializer()

with tf.Session() as  sess:
    sess.run(init)
    # print(‘input:\n‘, sess.run(input))
    # print(‘filter:\n‘, sess.run(filter))
    print(op:\n,sess.run(op))

##输出结果
‘‘‘
op:
 [[[[ 2.]
   [-3.]]

  [[ 0.]
   [-3.]]]]
‘‘‘
SAME步长3

 

Tensorflow之CNN卷积层池化层padding规则

标签:gif   ott   port   sam   height   shape   span   class   none   

原文地址:https://www.cnblogs.com/liuhuacai/p/12003885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!