膨胀卷积与IDCNN

膨胀卷积与IDCNN

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

一、一般的卷积操作:

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

<span>膨胀卷积与IDCNN</span>

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

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

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

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

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

池化层的作用:

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

(2)增大感受野。

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

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

二、膨胀卷积

 

 

<span>膨胀卷积与IDCNN</span>

如上图,膨胀卷积的好处是不做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的实现流程以及输出的结合方式。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119454.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Unity | Cinemachine FreeLook Camera「建议收藏」

    Unity | Cinemachine FreeLook Camera「建议收藏」FreeLookCamera是可以基于第三人称视角进行自由观察的虚拟相机。如下图所示,自由视角相机有上中下三个红圈,我们可以通过修改CinemachineFreeLook组件中的值来修改红圈的高度及大小。三个红圈由一个纵向的红线相连。通过改变YAxis及XAxis的Value可以修改虚拟相机的视角。 SplineCurvature决定纵向的紧绷状态。 TopRig、MiddleRig、BottomRig即三个红圈的属性。在CinemachineFreeL…

    2022年5月28日
  • VS2013注册码_vs注册密钥

    VS2013注册码_vs注册密钥vs2012注册码YKCW6-BPFPF-BT8C9-7DCTH-QXGWCRBCXF-CVBGR-382MK-DFHJ4-C69G8MMVJ9-FKY74-W449Y-RB79G-8GJGJ4D974-9QX42-9Y43G-YJ7JG-JDYBPYCFHQ-9DWCY-DKV88-T2TMH-G7BHP亲测有效!

    2022年8月22日
  • linux的nohup命令

    linux的nohup命令在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用&在程序结尾来让程序自动运行。比如我们要运行mysql在后台:/usr/local/mysql/bin/mysqld_safe–user=mysql&。可是有很多程序并不想mysqld一样,这样我们就需要nohup命令,怎样使用nohup命令呢?这里讲解nohup命令的一些用法。nohup/root/start.sh&在shell中回车后提示:[~]$appendingoutp

    2022年11月1日
  • vue项目结构解读[通俗易懂]

    1、整体结构解读2、分布解读

    2022年4月12日
  • 免费编程学习资源

    免费编程学习资源web项目 1.链接:https://pan.baidu.com/s/1qZcykm4密码:c5va 2.链接:https://pan.baidu.com/s/1i64wMNV密码:jv34 3.链接:https://pan.baidu.com/s/1o9dinNG密码:rqu8 4.链接:https://pan.baidu.com/s/…

    2022年5月21日
  • Eureka集群(Eureka详解)

    Eureka集群(Eureka详解)前言上篇文章,我们已经搭建了微服务的框架,使用了SOA(服务治理)Eureka参考:Eureka注册中心这篇文章教大家,如何使用IDEA搭建SpringCloud的集群,Spring拥有最简单的搭建集群方法一、使用IDEA二、配置写上你配置的名字,01,02区分就好,以及要集群那个模块三、端口号-Dserver.port=10087-D是修改,必须写…

    2022年5月5日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号