tf.nn.conv2d用法初探

本文探讨了TensorFlow中的tf.nn.conv2d函数,详细解释了其参数如input、filter、strides和padding的含义,并通过实证分析帮助理解其工作原理。官方文档中提到的滤镜展屏和图像块提取过程也被提及。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 官方解释

    tf.nn.conv2d (input, filter, strides, padding, use_cudnn_on_gpu = True, data_format = 'NHWC', dilations = [1,1,1,1],

                         name = None)

         input:4维张量。数据格式默认是NHWC, 即[batch,height,width,channel]。如[1,4,4,1],代表一个(batch),高(height)4,宽                         (width)4,一个通道(channel)的图像。

         filter: 4维张量。数据格式是[height,width,in_channels,out_channles]。如[2,2,1,1],代表高(2),宽(2),输入通道1,输出通 道                      1。注意:如果输出通道为1,输入通道有多个,那么要进行求和变为1个。

         padding: 有"VALID"和"SAME"之分。主要区别是,"SAME"是输入张量和输出的张量尺寸保持不变,为此需要在输入张量填                        充 0,填充0的方式可能是在周围,也有可能是在张量的左边,下边。具体的要看情况。

        strides: 必须是[1,strides,strides,1],表示每次移动strides(向下或向右)步。

         其他参数就不细说了。

         官网上还有这样一段话,不太懂。先记下

          1.将滤镜展屏为具有形状的二维矩阵[height*width*channles,out_channel]

           2.从输入张量中提取图像块已形成虚拟的形状张量[batch,out_height,out_width,height*width*channels]

 2. 实证分析

import tensorflow as tf
    input = tf.Variable(tf.round(10*tf.random_normal([1,4,4,1])))
    filter= tf.Variable(tf.rount(5*tf.random_normal([2,2,1,1])))
    result= tf.nn.conv2d(input,filter,strides=[1,1,1,1],padding='VALID')
    init  = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print("input",sess.run(input))
    print("filter",sess.run(filter))
    print("result",sess.run(result))


input:

 [[[[-7.]
    [10.]
    [-19.]
    [-8.]]
 
   [[3.]
    [9.]
    [-6.]
    [-5.]]

   [[19.]
    [1.]
    [1.]
    [1.]
 
  [[-13.]
   [-15.]
   [-7.]
   [-6.]]]]
filter [[[[5.]]
         [[0.]]]
        [[[6.]]
          [[0.]]]]
conv[[[[-17.]
       [104.]
       [-131.]]
      [[129.]
       [51.]
       [-24.]]
      [[17.]
       [-85.]
       [-37.]]]]

#input 转为二维矩阵 ,矩阵高4,宽4,用下标可以很明白。
如input 

 [[[[a0000.]
    [a0010.]
    [a0020.]
    [a0030.]]
 
   [[a0100.]
    [a0110.]
    [a0120.]
    [a0130.]]

   [[a0200.]
    [a0210.]
    [a0220.]
    [a0230.]
 
  [[a0300.]
   [a0310.]
   [a0320.]
   [a0330.]]]]
所以转成
   [[-7,10,-19,-8]
    [3, 9,-6,-5],
    [19,1,1,1],
    [-13,-15,7,6]]
filter转为
   [[5,0],
    [6,0]]
然后每次向左移动一步或向下移动一步。可以验证是对的。

3.参考链接

1. https://www.tensorflow.org/api_docs/python/tf/nn/conv2d

2. https://www.cnblogs.com/adong7639/p/7598223.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值