为什么尽管复杂度比转换层少,但在全连接层上花费的时间最多?

Kev*_*n91 5 complexity-theory convolution neural-network deep-learning caffe

在做CNN基准测试时,我发现大部分时间都花在完全连接的层上。但是,在计算计算复杂度时,我发现:

O(conv) = N*(D * (W+P) * (H+P) *  h *w)/S
O(fully_connected) = D*W*H*N
Run Code Online (Sandbox Code Playgroud)

哪里

D = Dimensions Input 
W,w = Width Input, width Filter
H, h = Height Input, height Filter
S = Stride
P = Padding
N = number of outputs
Run Code Online (Sandbox Code Playgroud)

例如,我有一个1024x11x11 feature map input DxWxH,一个5x5 filter h,w不带padding p,带有Stride S of 1,和number of outputs N shall be 512

这导致对卷积进行以下计算:

O(转化)= 512 *(1024 * 11 * 11 * 5 * 5)/ 1 = 1585971200

如果将相同的输入用于完全连接的层,而所需的输出仍为512,则:

O(完全连接)= 512 * 1024 * 11 * 11 = 63438848

这是由于更高级的方法来并行化GPU上的卷积层,而conv层具有更多的操作却却减少了并行性问题的计算时间吗?还是我计算各层复杂度的方法完全错误?

Mar*_*oma 3

您可以通过将全连接连接转换为等效卷积来检查它是否只是实现。对于每个完全连接的层,都有一个等效的卷积层(有关详细信息和示例,请参阅我的问题)。

\n\n
    \n
  1. 您有c大小的通道w \xc3\x97 h(因此是 shape c \xc3\x97 w \xc3\x97 h),后面是带有节点的全连接层n
  2. \n
  3. 在通道之后添加一个重塑层以获得(c \xe2\x8b\x85 w \xe2\x8b\x85 h) \xc3\x97 1 \xc3\x97 1
  4. \n
  5. 添加一个带有n大小为 的滤波器的卷积层1 \xc3\x97 1
  6. \n
\n\n

现在检查时间。如果它比全连接层更快,那么这只是由于卷积的更好实现。

\n