Tensorflow:空洞卷积(Atrous convolution) atrous_conv2d的代码实现

一、参考文献

https://blog.youkuaiyun.com/mao_xiao_feng/article/details/78003730

https://blog.youkuaiyun.com/davincil/article/details/80902366

二、概念

空洞卷积的基本概念则是扩大卷积核,例如下图(作图为标准卷积核,有图为空洞卷积核):

                  

这里使用空洞卷积的时候padding一定要注意,因为卷积核可能比输入还要打,所以尽量使用padding=‘SAME’

这篇博客中对空洞卷积有一个详细的流程图解释:https://blog.youkuaiyun.com/mao_xiao_feng/article/details/78003730

上图中输入是一个4*4的一个双通道的图片,在padding=same中,卷积核相乘的时候进行了填充,相反valid是不对输出进行天填充,所以最后的输出的维度是偏小的

上图的卷积就是空洞卷积,原本3*3*2的卷积核在空洞步长rate=2的情况下变成了5*5*2的卷积核,这就是为什么要使用padding=same的原因了,因为卷积核5*5已经大于4*4的输入了,不然会报错!!

三、Tensorflow中的空洞卷积

函数的调用为:

atrous_conv2d(value, filters, rate, padding, name=None)

value: 
指需要做卷积的输入图像,要求是一个4维Tensor,具有[batch, height, width, channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数]

filters: 
相当于CNN中的卷积核,要求是一个4维Tensor,具有[filter_height, filter_width, channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],同理这里第三维channels,就是参数value的第四维

rate: 
要求是一个int型的正数,正常的卷积操作应该会有stride(即卷积核的滑动步长),但是空洞卷积是没有stride参数的,这一点尤其要注意。取而代之,它使用了新的rate参数,那么ra

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值