【问题标题】:In Tensorflow (in general deep learning), can I apply "local FC layer" with "CONV layer"?在 Tensorflow(一般深度学习)中,我可以将“本地 FC 层”与“CONV 层”一起应用吗?
【发布时间】:2017-03-11 02:16:49
【问题描述】:

谁能确定我的推理?

假设我有一个(预训练的)全连接层fc,它将bx20x20x10 作为输入,bx64作为输出层,其中b 是批量大小。

现在,我输入了 cx100x60x10。身高和体重100x60可以细分为5x320x20。我想通过fc 层获得5x3 的本地响应(输出),即`cx5x3x64'。

现在我在想:这样做与使用fc weights 的卷积层和宽度为 20 和高度为 20 的步幅相同。这是正确的吗?有区别吗?

【问题讨论】:

  • 我认为是一样的。稍后我会详细写一个答案。

标签: tensorflow deep-learning


【解决方案1】:

是的,如果对密集层权重矩阵进行适当的重新整形,它会是一样的。

让我们先看看密集层。您将20 x 20 x 10 矩阵输入到密集层。它将首先被展平以产生4000 x 1 向量。您希望输出的大小为 64 x 1 向量。因此,所需的权重矩阵是4000 x 6464 偏差参数。然后y = w^T * x + b = [4000 x 64]^T * [4000 x 1] + [64 x 1] 将产生一个[64 x 1] 向量。因此,y[i] = w[i][0]*x[0] + ... + w[i][3999]*x[3999] + b[i] 对应于i = [0, 63]。请注意,b 表示一个偏差参数。

让我们转向卷积。要从大小为100 x 60 x 10 的输入生成5 x 3 x 64 输出,您需要64 个过滤器,每个过滤器的大小为(20,20) 和步幅(20,20),没有零填充。然而,每个20 x 20 滤波器都具有沿整个深度延伸的局部连通性,即一个神经元连接到沿输入深度的所有 10 个维度。请阅读this了解更多关于卷积层局部连通性的信息。

你的卷积层有一个20 x 20 的感受野。卷积层中的每个神经元都将连接到一个20 x 20 x 10。因此总共有 4000 个权重(和一个偏差参数)。您有 64 个这样的过滤器。因此,这一层的总可学习权重 = 4000 x 64 + 64xw(大小 = 64 x 20 x 20 x 10)的一个 20 x 20 x 10 块之间的卷积可以执行为:

convResult = np.sum(np.sum(np.sum(x*w[:,:,::-1,::-1], axis=-1), axis=-1),axis=-1)

这里有一些要点。我做了w[:,:,::-1,::-1] 因为theano 卷积翻转了卷积核(嗯,没那么简单!)。如果您对谁翻转谁不翻转感兴趣,请阅读this

最后,密集层和卷积层(在此上下文中)本质上执行相同的操作。他们首先按元素相乘,然后将两组 4000 个元素的向量/矩阵相加。此过程重复 64 次以生成64 x 1 向量。因此,通过对密集层权重矩阵进行适当的重塑,可以实现密集层和卷积层完全相同的结果。但是,您需要注意内核翻转以匹配结果。

下面我给出一个代码 sn-p 来手动计算卷积(使用 numpy)并使用 Theano。

import theano
from theano import tensor as T
import numpy as np

X = T.ftensor4('X')
W = T.ftensor4('W')
out = T.nnet.conv2d(X,W)
f = theano.function([X, W], out, allow_input_downcast=True)

x = np.random.random((1,10,20,20))
w = np.random.random((64,10,20,20))

# convolution using Theano
c1 = np.squeeze(f(x,w)[0])

# convolution using Numpy
c2 = np.sum(np.sum(np.sum(x*w[:,:,::-1,::-1],axis=-1),axis=-1),axis=-1)

# check that both are almost identical
print np.amax(c2 - c1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 2017-12-09
    • 2017-12-10
    • 1970-01-01
    • 2020-03-06
    相关资源
    最近更新 更多