【发布时间】: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 1 和number 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