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层具有更多的操作却却减少了并行性问题的计算时间吗?还是我计算各层复杂度的方法完全错误?
您可以通过将全连接连接转换为等效卷积来检查它是否只是实现。对于每个完全连接的层,都有一个等效的卷积层(有关详细信息和示例,请参阅我的问题)。
\n\nc大小的通道w \xc3\x97 h(因此是 shape c \xc3\x97 w \xc3\x97 h),后面是带有节点的全连接层n。(c \xe2\x8b\x85 w \xe2\x8b\x85 h) \xc3\x97 1 \xc3\x97 1。n大小为 的滤波器的卷积层1 \xc3\x97 1。现在检查时间。如果它比全连接层更快,那么这只是由于卷积的更好实现。
\n