tf.nn.conv2d进行卷积计算时卷积核大小的两个特例

    在进行tf.nn.conv2d进行卷积计算的时候有两个特殊的卷积核,一个是1x1,另一个就是和原始图像大小一样的卷积核,这里分别进行验证.

一 卷积核是1x1的情况

    一般情况,步长并不会比卷积核的尺寸大, 因为如果步长比卷积核的尺寸大就会丢失数据,因此这只考虑步长等于1 的情况

import tensorflow as tf
input = tf.ones([1, 5, 5, 1], tf.float32)
filter = tf.ones([1, 1, 1, 1], tf.float32)
op1 = tf.nn.conv2d(input, filter, strides=[1,1,1,1], padding='SAME')
op2 = tf.nn.conv2d(input, filter, strides=[1,1,1,1], padding='VALID')
print("op1:",op1)
print("op2:",op2)
init = tf.initialize_all_variables() 
with tf.Session() as sess:
    sess.run(init)
    print("op1:",sess.run(op1))
    print("op2:",sess.run(op2))

输出的结果如下:

op1: Tensor("Conv2D_20:0", shape=(1, 5, 5, 1), dtype=float32)
op2: Tensor("Conv2D_21:0", shape=(1, 5, 5, 1), dtype=float32)
op1: 
[[[[1.] [1.] [1.] [1.] [1.]]
  [[1.] [1.] [1.] [1.] [1.]]
  [[1.] [1.] [1.] [1.] [1.]]
  [[1.] [1.] [1.] [1.] [1.]]
  [[1.] [1.] [1.] [1.] [1.]]]]
op2: 
[[[[1.] [1.] [1.] [1.] [1.]]
  [[1.] [1.] [1.] [1.] [1.]]
  [[1.] [1.] [1.] [1.] [1.]]
  [[1.] [1.] [1.] [1.] [1.]]
  [[1.] [1.] [1.] [1.] [1.]]]]

    可见不论是'SAME', 还是'VALID'对结果没有改变,因为此时不会进行padding.

 

二 卷积核大小和原始图像一样的情况

input = tf.ones([1, 7, 7, 1], tf.float32)
filter = tf.ones([7, 7, 1, 1], tf.float32)
op1 = tf.nn.conv2d(input, filter, strides=[1,1,1,1], padding='SAME')
op2 = tf.nn.conv2d(input, filter, strides=[1,3,3,1], padding='SAME')
op3 = tf.nn.conv2d(input, filter, strides=[1,1,1,1], padding='VALID')
print("op1:",op1)
print("op2:",op2)
print("op3:",op3)
init = tf.initialize_all_variables() 
with tf.Session() as sess:
    sess.run(init)
    print("op1:\n",sess.run(op1))
    print("op2:\n",sess.run(op2))
    print("op3:\n",sess.run(op3))

结果如下:

op1: Tensor("Conv2D_26:0", shape=(1, 7, 7, 1), dtype=float32) 
op2: Tensor("Conv2D_27:0", shape=(1, 3, 3, 1), dtype=float32) 
op3: Tensor("Conv2D_29:0", shape=(1, 1, 1, 1), dtype=float32) 

op1:  
[[[[16.] [20.] [24.] [28.] [24.] [20.] [16.]] 
  [[20.] [25.] [30.] [35.] [30.] [25.] [20.]] 
  [[24.] [30.] [36.] [42.] [36.] [30.] [24.]] 
  [[28.] [35.] [42.] [49.] [42.] [35.] [28.]] 
  [[24.] [30.] [36.] [42.] [36.] [30.] [24.]] 
  [[20.] [25.] [30.] [35.] [30.] [25.] [20.]] 
  [[16.] [20.] [24.] [28.] [24.] [20.] [16.]]]] 

op2:  
[[[[16.] [28.] [16.]] 
  [[28.] [49.] [28.]] 
  [[16.] [28.] [16.]]]] 

op3:  
[[[[49.]]]] 

下面利用图形进行分析计算过程:

op1: 步长是1,'SAME':

op2: 步长是3(这里可换成其他的数据如5),'SAME':

op3: 步长是1,'VALID':

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值