【问题标题】:Why is the most time spent in the fully connected layers despite its complexity is less than the conv-layers?为什么尽管其复杂性低于卷积层,但在全连接层上花费的时间最多?
【发布时间】:2017-06-24 21:48:11
【问题描述】:

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

O(conv) = N*(D * (W+P) * (H+P) *  h *w)/S
O(fully_connected) = D*W*H*N

在哪里

D = Dimensions Input 
W,w = Width Input, width Filter
H, h = Height Input, height Filter
S = Stride
P = Padding
N = number of outputs

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

这导致卷积的以下计算:

O(conv) = 512*(1024*11*11*5*5)/1 = 1 585 971 200

如果相同的输入用于全连接层,并且期望的输出仍然是 512,那么:

O(完全连接)= 512*1024*11*11 = 63 438 848

这是由于在 GPU 上并行卷积层的更高级方法和卷积层具有更多操作但计算时间更少导致并行问题的原因吗?还是我计算每一层复杂度的方法完全错误?

【问题讨论】:

  • 您好,您的基准实验的 NN 架构是什么?你会在 512 个内核之后进行最大池化吗?
  • 我在 AlexNet、GoogleNet 和 LeNet 中发现了这种行为,因此在某些情况下包含池化层,但大部分时间仍然是完全连接的层,基准测试是使用 caffe time 命令完成的

标签: neural-network deep-learning complexity-theory caffe convolution


【解决方案1】:

您可以通过将全连接连接转换为等效卷积来检查它是否只是实现。对于每个全连接层,都有一个等效的卷积层(详见my question)。

  1. 您有 c 大小为 w × h 的通道(因此形状为 c × w × h),然后是带有 n 节点的全连接层。
  2. 在通道之后添加一个重塑层以获得(c ⋅ w ⋅ h) × 1 × 1
  3. 添加具有n 大小为1 × 1 的过滤器的卷积层。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-13
    • 2021-11-17
    • 2018-12-22
    • 1970-01-01
    • 2018-06-04
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多