2016-09-15 69 views
1

我想在TensorFlow中尝试一种体系结构。如何在TensorFlow中实现DecomposeMe体系结构?

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

paper

简化ConvNets通过筛选组合物

我们的提议的实质在于分解传统网络的ND内核成1D内核的N个连续层。
...
我们建议DecomposeMe这是一个由分解层组成的体系结构。每个分解层表示作为1D滤波器的组合的N-D卷积层,并且另外通过在其之间包括非线性φ(·)。
...
转换现有结构以分解的那些是一个简单的过程, 每个现有ND卷积层可以系统被分解成组的连续 层由1D的线性整流内核和1D换位内核 如图如图1所示。

如果我理解正确,单个2-D卷积层被替换为两个连续的1-D卷积?

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

回答

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个通道的输出图像),然后将其传递到卷积通过产生featuremaps N的最终期望数量H1

重量共享,据我所知,只是一个误导性术语,这是为了强调一个事实,即您使用与图像中每个补丁卷积的一个滤镜。很明显,您将使用相同的滤镜来获取每个输出像素的结果,这就是每个人在图像/信号处理中的表现。

然后以“分解”的卷积层5页中所示,可以通过简单地将活化单位的卷积之间完成(忽略偏压):

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

这并不是说每个过滤器在v1是列向量[d,1],每个h1是行向量[1,d]。这篇论文有点含糊,但是在执行可分离卷积时,这是如何完成的。也就是说,您将图像与列向量进行卷积,然后将结果与水平向量进行卷积,以获得最终结果。