Dilation 卷积,也被称为:空洞卷积、膨胀卷积。

一、一般的卷积操作:

首先,可以通过动态图,理解正常卷积的过程:

如上图,可以看到卷积操作。

对于CNN结构,通常包括如下部分:

输入层 (input layer)---  卷积计算层 (CONV)--- 激励层(RELU) --- 池化层(Pooling) --- 全连接层(FC)

通常利用卷积来实现数据的特征提取。卷积层还有一个权值共享的原则:用一句话表达就是每个神经元只关注一个特征

当然卷积完经过激励层做一个非线性映射,输出后就到Pooling layer了。

池化层的作用:

(1)压缩数据和参数的量,减小过拟合。

(2)增大感受野。

主要两种方法:Max Pooling  和  Average Pooling

对于有些算法,池化完还需要upsampling获得原始数的尺寸进行后续操作。由于这种通过卷积操作存在内部数据丢失的问题,存在信息损失,有人提出了dilated conv算法,即不通过池化获得较大的视野,并减小信息损失。

二、膨胀卷积

如上图,膨胀卷积的好处是不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。在图像需要全局信息或者自然语言处理中需要较长的sequence信息依赖的问题中,都能很好的应用。

在tensorflow中代码为:

tf.nn.atrous_conv2d(value,filters,rate,padding,name=None)

  value:输入的卷积图像,[batch, height, width, channels]。

  filters:卷积核,[filter_height, filter_width, channels, out_channels],通常NLP相关height设为1。

  rate:正常的卷积通常会有stride,即卷积核滑动的步长,而膨胀卷积通过定义卷积和当中穿插的rate-1个0的个数,实现对原始数据采样间隔变大。

  padding:”SAME”:补零   ; ”VALID”:丢弃多余的

 三、IDCNN(Iterated Dilated CNN)

模型是4个大的相同结构的Dilated CNN block拼在一起,每个block里面是dilation width为1, 1, 2的三层Dilated卷积层,所以叫做 Iterated Dilated CNN。参考代码实现:

layers = [
{
'dilation': 1
},
{
'dilation': 1
},
{
'dilation': 2
},
]
finalOutFromLayers = []
totalWidthForLastDim = 0
for j in range(4):
for i in range(len(layers)):
dilation =layers[i]['dilation']
isLast = True if i == (len(layers) - 1) else False
w = tf.get_variable("filterW",shape=[1, filter_width, num_filter,num_filter],initializer=tf.contrib.layers.xavier_initializer())
b = tf.get_variable("filterB", shape=[num_filter])
conv = tf.nn.atrous_conv2d(layerInput,w,rate=dilation,padding="SAME")
conv = tf.nn.bias_add(conv, b)
conv = tf.nn.relu(conv)
if isLast:
finalOutFromLayers.append(conv)
totalWidthForLastDim += num_filter
layerInput = conv
finalOut = tf.concat(axis=3, values=finalOutFromLayers)

  通过代码可以看到具体的IDCNN的实现流程以及输出的结合方式。

膨胀卷积与IDCNN的更多相关文章

  1. NLP进阶之(七)膨胀卷积神经网络

    NLP进阶之(七)膨胀卷积神经网络1. Dilated Convolutions 膨胀卷积神经网络1.2 动态理解1.2.2 转置卷积动画1.2.3 理解2. Dilated Convolutions ...

  2. 【Tensorflow】tf.nn.atrous_conv2d如何实现空洞卷积?膨胀卷积

    介绍关于空洞卷积的理论可以查看以下链接,这里我们不详细讲理论: 1.Long J, Shelhamer E, Darrell T, et al. Fully convolutional network ...

  3. 转置卷积&&膨胀卷积

    Convolution arithmetic tutorial theano Convolution arithmetric github 如何理解深度学习中的deconvolution networ ...

  4. [转]CNN 中千奇百怪的卷积方式大汇总

    https://www.leiphone.com/news/201709/AzBc9Sg44fs57hyY.html 推荐另一篇很好的总结:变形卷积核.可分离卷积?卷积神经网络中十大拍案叫绝的操作. ...

  5. tensorflow 卷积神经网络基本参数()

    目录: 1. tf.placeholder_with_default(tf.constant(1.0),shape=[],name='use_dropout')   # 设置一个占位符 2. tf.c ...

  6. CNN中千奇百怪的卷积方式大汇总

    1.原始版本 最早的卷积方式还没有任何骚套路,那就也没什么好说的了. 见下图,原始的conv操作可以看做一个2D版本的无隐层神经网络. 附上一个卷积详细流程: [TensorFlow]tf.nn.co ...

  7. 卷积神经网络以及TextCNN

    对于卷积神经网络的详细介绍和一些总结可以参考以下博文: https://www.cnblogs.com/pinard/p/6483207.html https://blog.csdn.net/guoy ...

  8. 时空卷积网络TCN

    1.写在前面 实验表明,RNN 在几乎所有的序列问题上都有良好表现,包括语音/文本识别.机器翻译.手写体识别.序列数据分析(预测)等. 在实际应用中,RNN 在内部设计上存在一个严重的问题:由于网络一 ...

  9. LSTM的备胎,用卷积处理时间序列——TCN与因果卷积(理论+Python实践)

    什么是TCN TCN全称Temporal Convolutional Network,时序卷积网络,是在2018年提出的一个卷积模型,但是可以用来处理时间序列. 卷积如何处理时间序列 时间序列预测,最 ...

随机推荐

  1. 构造方法和一般方法的区别(面试)-----java基础知识总结

    构造方法:对象创建时,就会调用与之对应的构造方法,对对象进行初始化: 一般方法:对象创建后,需要方法功能时才会调用. 构造方法,在对象创建时,会调用且只调用一次. 一般方法,对象创建后,可以被调用多次 ...

  2. 手机安全卫士-——Splash总结

    1.在AndroidManifest.xml文件的application中配置,应用的主题:不带标题的主题 android:theme="@android:style/Theme.Black ...

  3. HDU 1729 类NIM 求SG

    每次有n个盒子,每个盒子有容量上限,每次操作可以放入石头,数量为不超过当前盒子中数量的平方,不能操作者输. 一个盒子算一个子游戏. 对于一个盒子其容量为s,当前石子数为x,那么如果有a满足 $a \t ...

  4. 20155226 2016-2017-2 《Java程序设计》第6周学习总结

    20155226 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 10.1 InputStream与OutputStream 1 . 串流 ...

  5. RaspberryPi.1.开机与远程桌面

    raspberry  3b+ ------------------------------------------------------------------------------- 写系统 有 ...

  6. Hibernate常用的Java数据类型映射到mysql和Oracle

    研究了常用的Java基本数据类型在mysql和oracle数据库的映射类型.这里使用的是包装类型做研究,一般在hibernate声明的时候最好不要用基本类型,因为数据库中的null空数据有可能映射为基 ...

  7. cmd命令,bat脚本

    1.cd /d D:\>cd mysql D:\mysql>cd /d C:/TEMP C:\Temp>cd /? 显示当前目录名或改变当前目录. CHDIR [/D] [drive ...

  8. 安装odbc驱动

    1.下载对应的驱动 (32位/64位) http://www.oracle.com/technetwork/database/database-technologies/instant-client/ ...

  9. Twisted框架

    Twisted是一个事件驱动型的网络模型.时间驱动模型编程是一种范式,这里程序的执行流由外部决定.特点是:包含一个事件循环,当外部事件发生时,使用回调机制来触发相应的处理. 线程模式: 1.单线程同步 ...

  10. python自动安装mysql5.7【转】

    #!/usr/bin/env python import os import sys import re base_dir = '/opt/software/mysql-5.7.17-linux-gl ...