计算卷积后尺寸

这里单独把计算卷积之后的维度的公式拿出来,方便查看


1.卷积后尺寸计算

out_height=(in_height+2pad-filter_height)/strides[1]+1 
out_width=(in_width+2pad-filter_width)/strides[2] +1 

2.tensorflow中卷积参数same和valid运算之后的维度计算 

(1)same 
out_height=ceil(float(in_height)/float(strides[1]))
out_width=ceil(float(in_width)/float(strides[2]))


(2)valid 
out_height=ceil(float(in_height-filter_height+1)/float(strides[1]))
out_width=ceil(float(in_width-filter_width+1)/float(strides[2]))


(3)参数 
padding: SAME和VALID两种形式 
filter: [5,5,1,32]表示5*5的卷积核,1个channel,32个卷积核。 
strides: [1,4,4,1]表示横向和竖向的步长都为4


3.tensorflow里面的tf.pad函数


虽然在卷积过程中有same选项可选,但是tensorflow里面还有一个可以用于填充的函数tf.pad(),具体用法如下:

tf.pad(tensor, paddings,mode='CONSTANT',name=None)

padings : 是一个张量,代表每一维填充多少行/列 
mode : “CONSTANT” ,”REFLECT”,”SYMMETRIC” 

“CONSTANT” 填充0

“REFLECT”是映射填充,上下(1维)填充顺序和paddings是相反的,左右(零维)顺序补齐

“SYMMETRIC”是对称填充,上下(1维)填充顺序是和paddings相同的,左右(零维)对称补齐

 

4.关于tensorflow中的max_pool()中的padding的含义

 (1)先给出代码

import tensorflow as tf
import numpy as np 

x = tf.placeholder(tf.float32, shape=(1, 500, 500, 3))
#print(type(image))
y1 = tf.nn.max_pool(x, [1, 3, 3, 1], [1, 3, 3, 1], padding = 'VALID')
y2 = tf.nn.max_pool(x, [1, 3, 3, 1], [1, 3, 3, 1], padding = 'SAME')

with tf.Session() as sess: 
    a =  np.full((1, 500, 500, 3), 2)
    sess.run(tf.global_variables_initializer())
    b = sess.run(y1, feed_dict={x: a})
    c = sess.run(y2, feed_dict={x: a})
    print(b.shape)  # Will succeed.  
    print(c.shape)  # Will succeed.  

(2)结果

(1, 166, 166, 3) #valid
(1, 167, 167, 3) #same

从结果可以看出: 
对于padding=’VALID’, 166 = math.floor(500/3) 
对于padding=’SAME’, 167 =math.ceil(500/3)


------------------------------------------
原文:https://blog.csdn.net/xuan_zizizi/article/details/78589022

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值