为什么在完全连接的层中花费的时间最多,尽管它的复杂性小于转换层?

时间:2017-02-07 15:18:10

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

在做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 DxWxH5x5 filter h,w没有填充pStride S of 1number of outputs N shall be 512

这导致卷积的以下计算:

  

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

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

  

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

这是因为更高级的方法可以在GPU上对卷积层进行并行处理,并且转换层有更多的操作,但是由于平行问题导致的计算时间减少了吗?或者我计算每个层的复杂性的方法是错误的?

1 个答案:

答案 0 :(得分:3)

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

  1. 您有c个大小为w × h的频道(因此形状为c × w × h),后跟一个带有n个节点的完全连接的图层。
  2. 在频道后添加重塑图层以获取(c ⋅ w ⋅ h) × 1 × 1
  3. 使用大小为n的{​​{1}}过滤器添加卷积图层。
  4. 现在检查时间。如果它比完全连接的层快,那么它只是由于更好的卷积实现。