tensorflow中卷积和池化函数中padding问题

一. 池化:

padding="SAME"

import tensorflow as tf
import numpy as np
a = [[[[1,3,2],
     [4,6,5],
     [7,9,8]]]]
a = np.transpose(a, [1, 2, 3, 0])
print(a.shape)
b = tf.nn.max_pool(a, [1, 2, 2, 1], [1, 2, 2, 1], padding="SAME")
sess = tf.Session()
t = sess.run(b)
print(t.shape)
print(t)
sess.close()

结果

padding="VALID"

结果


 

二. 卷积

padding="SAME"

import tensorflow as tf
import numpy as np
a = [[[[1,3,2],
     [4,6,5],
     [7,9,8]]]]
a = np.transpose(a, [1, 2, 3, 0])
a = a.astype(dtype="float32")
filter = tf.Variable(tf.random_normal([2, 2, 1, 3]))
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(a.shape)
b = tf.nn.conv2d(a, filter, [1, 2, 2, 1], padding="SAME")
t = sess.run(b)
print(t.shape)
print(t)
sess.close()

结果:

padding="VALID"

结果:

 

三. 解释原因

池化与卷积函数的padding作用原理和效果是一样的(实验验证得出)。

模板在滑动时,可能存在覆盖不完全的地方,就比如用2*2的模板,对于VALID模式和SAME模式就不一样,SAME模式会补全橙色部分,而VALID模式就不会补全了,就把多余的地方全都舍去了。

 

若padding=“SAME", 原始数据(input)的height*width = h*w。且 strides=[1, a, b, 1]。则经过卷积或池化之后输出的数据height*width=ceil(h除以a得到的浮点数)  * ceil(w除以b得到的浮点数)。其中ceil()是向上取整。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值