Tensorflow--二维离散卷积

Tensorflow–二维离散卷积一.二维离散卷积的计算原理二维离散卷积的计算原理同一维离散卷积的计算原理类似,也有三种卷积类型:full卷积,same卷积核valid卷积。通过3行3列的二维张量x和2行2列的二维张量K1.full卷积full卷积的计算过程如下:K沿着x按照先行后列的顺序移动,每移动到一个固定位置,对应位置的值相乘...
摘要由CSDN通过智能技术生成

Tensorflow–二维离散卷积

一.二维离散卷积的计算原理

二维离散卷积的计算原理同一维离散卷积的计算原理类似,也有三种卷积类型:full卷积,same卷积核valid卷积。通过3行3列的二维张量x和2行2列的二维张量K
未命名文件.png

1.full卷积

full卷积的计算过程如下:K沿着x按照先行后列的顺序移动,每移动到一个固定位置,对应位置的值相乘,然后求和

注意:同一维卷积类似,对二维卷积的定义一般分为两步,首先将卷积核翻转180,然后计算对应位置相乘的和,如常用的Numpy,MATLAB中实现的卷积函数都是先将输入的卷积核翻转180,Tensorflow中实现二维卷积的函数为:

tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=True,data_format="NHWC",dilations=[1,1,1,1],name=None)

该函数内部没有对卷积核翻转

2.same卷积

x和K进行same卷积,首先为K指定一个锚点,然后将锚点先行后列地移动到输入张量x的每一个位置处,对应位置相乘然后求和。卷积核K的高等于FH,宽等于FW,其锚点的位置一般用以下规则定义

.如果FH为奇数,FW为奇数,锚点的位置是((FH-1)/2,(FW-1)/2)

.如果FH为奇数,FW为偶数,锚点的位置是((FH-1)/2,(FW-2)/2)

.如果FH为偶数,FW为奇数,锚点的位置是((FH-2)/2,(FW-1)/2)

.如果FH为偶数,FW为偶数,锚点的位置是((FH-2)/2,(FW-2)/2)

这里的位置索引是从0开始的

以上面的示例为例,K的高为2,宽为2,所以锚点的位置在K的(0,0)处

import tensorflow as tf

X=tf.constant(
    [
        [
            [[2],[3],[8]],
            [[6],[1],[5]],
            [[7],[2],[-1]]
        ]
    ]
    ,tf.float32
)

K=tf.constant(
    [
        [
            [[4]],[[1]]],
        [
            [[2]],[[3]]
        ]
    ]
    ,tf.float32
)

# same卷积
conv=tf.nn.conv2d(X,K,(1,1,1,1),'SAME')

session=tf.Session()

print(session.run(conv))
[[[[26.]
   [37.]
   [42.]]

  [[45.]
   [10.]
   [18.]]

  [[30.]
   [ 7.]
   [-4.]]]]
3.valid卷积

如果卷积核K靠近x的边界,那么K就会有部分延伸到x外,导致访问到未定义的值;如果忽略边界,只考虑x能完全覆盖K的值情况(即K在x内部移动),则该过程称为valid卷积

import tensorflow as tf

X=tf.constant(
    [
        [
            [[2],[3],[8]],
            [[6],[1],[5]],
            [[7],[2],[-1]]
        ]
    ]
    ,tf.float32
)

K=tf.constant(
    [
        [
            [[4]],[[1]]],
        [
            [[2]],[[3]]
        ]
    ]
    ,tf.float32
)

# same卷积
conv=tf.nn.conv2d(X,K,(1,1,1,1),'VALID')

session=tf.Session()

print(session.run(conv))
[[[[26.]
   [37.]]

  [[45.]
   [10.]]]]
4.full,same,valid卷积的关系

假设有H行W列的二维张量x与FH行FW列的二维张量K卷积,两者full卷积的结果记为,same卷积的结果记为,valid的结果记为

full卷积与valid卷积的关系
Cvalid=C[FH-1:H-1,FW-1:W-1]

full卷积与same卷积的关系
假设same卷积的卷积核的锚点的位置在第Fr行,第Fc列处
C=C[FH-Fr-1:H+FH-Fr-2,FW-Fc-1:W+FW-Fc-2]

same卷积与valid卷积的关系
C=Csame[Fr:H-FH+Fr,Fc:W-FW+FC]
未命名文件 (1).png

5.卷积结果的输出尺寸

我们讨论的卷积操作,在卷积过程中卷积核的移动步长均是1,所以H行W列的x与FH行FW列的卷积核K的same卷积结果的尺寸为H行W列,valid卷积结果的尺寸为H-FH+1行W-FW+1列

same卷积结果的尺寸

valid卷积结果的尺寸

二.离散卷积的性质

1.可分离的卷积核

如果一个卷积核由至少两个尺寸比它小的卷积核full卷积二成,既满足

Kennel=kernel1☆kernel2☆…kerneln

其中kerneli的尺寸均比Kernel小,1≤i≤n,则陈卷积核Kernel是可分离的

2.full和same卷积的性质

以下代码实现了I与卷积核Kernel的same卷积,因为Kernel是可分离的,利用same卷积的性质,可以计算两者的same卷积

import tensorflow as tf

# 输入张量5x5
I=tf.constant(
    [
        [
            [[2],[9],[11],[4],[8]],
            [[6],[12],[20],[16],[5]],
            [[1],[32],[13],[14],[10]],
            [[11],[20],[27],[40],[17]],
            [[9],[8],[11],[4],[1]]
        ]
    ]
    ,tf.float32
)

# 卷积核3x3
Kernel=tf.constant(
    [
        [
            [[4]],[[8]],[[12]]
        ],
        [
            [[5]],[[10]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值