【问题标题】:How to implement the DecomposeMe architecture in TensorFlow?如何在 TensorFlow 中实现 DecomposeMe 架构?
【发布时间】:2016-09-15 22:45:49
【问题描述】:

我想在 TensorFlow 中试验一种架构。

这个想法是通过组合一维过滤器来组成二维过滤器内核。

来自paper

通过滤波器组合简化卷积网络

我们提议的本质是将传统网络的 ND 核分解为 N 个连续的一维核层。
...
我们提出了 DecomposeMe,它是一种由分解层组成的架构。每个分解层将 N-D 卷积层表示为 1D 滤波器的组合,此外,还包含一个非线性 φ(·) 介于两者之间。
...
将现有结构转换为分解结构是一个简单的过程,因为 每个现有的 ND 卷积层都可以系统地分解为 由一维线性整流内核和一维转置内核组成的连续层 如图1所示。

如果我理解正确,一个二维卷积层会被两个连续的一维卷积代替?

考虑到权重是共享和转置的,我不清楚如何在 TensorFlow 中实现这一点。

【问题讨论】:

    标签: tensorflow conv-neural-network


    【解决方案1】:

    我知道这个问题很老,你可能已经想通了,但它可能会帮助其他有同样问题的人。

    可分离卷积可以在tensorflow中实现如下(细节省略):

    X= placeholder(float32, shape=[None,100,100,3]);
    v1=Variable(truncated_normal([d,1,3,K],stddev=0.001));
    h1=Variable(truncated_normal([1,d,K,N],stddev=0.001));
    M1=relu(conv2(conv2(X,v1),h1));
    

    使用列向量的标准 2d 卷积与将输入的每一列与该向量进行卷积相同。与 v1 的卷积产生 K 个特征图(或具有 K 个通道的输出图像),然后将其传递给 h1 进行卷积,从而产生最终所需的特征图数 N。

    权重共享,据我所知,只是一个误导性的术语,它旨在强调您使用一个过滤器与图像中的每个补丁进行卷积的事实。显然,您将使用相同的过滤器来获得每个输出像素的结果,这是每个人在图像/信号处理中的做法。

    然后为了“分解”一个卷积层,如第 5 页所示,只需在卷积之间添加激活单元即可完成(忽略偏差):

    M1=relu(conv2(relu(conv2(X,v1)),h1));
    

    并不是说v1中的每个filter都是一个列向量[d,1],每个h1都是一个行向量[1,d]。论文有点含糊,但是在执行可分离卷积时,它是这样做的。即先将图像与列向量进行卷积,然后将结果与水平向量进行卷积,得到最终结果。

    【讨论】:

      猜你喜欢
      • 2020-03-24
      • 1970-01-01
      • 2012-11-27
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 2014-11-16
      相关资源
      最近更新 更多