neural-network - 为什么尽管其复杂性低于卷积层,但在全连接层上花费的时间最多?

标签 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 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(fully_connected) = 512*1024*11*11 = 63 438 848



这是因为在 GPU 上并行卷积层的更先进的方法和 conv 层有更多的操作但更少的计算时间导致了并行问题?还是我计算每一层复杂度的方法完全错误?

最佳答案

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

  • 你有 c大小 channel w × h (因此形状为 c × w × h ),然后是带有 n 的全连接层节点。
  • 在 channel 之后添加一个 reshape 层以获得(c ⋅ w ⋅ h) × 1 × 1 .
  • 添加带有 n 的卷积层尺寸过滤器 1 × 1 .

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

    关于neural-network - 为什么尽管其复杂性低于卷积层,但在全连接层上花费的时间最多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42093428/

    相关文章:

    machine-learning - 每种类型的神经网络(RNN、CNN、LSTM 等)的优势在哪里?

    algorithm - 如何根据以下代码计算 Big-O Notation

    python - tensorflow /keras神经网络中的过拟合和数据泄漏

    python - Python 中的多输出多类机器学习

    python - 获取值错误 : "Can only tuple-index with a MultiIndex "

    deep-learning - 如何在keras中将一层上采样到任何大小?

    python - Pytorch 模型中所有梯度的列表

    python - 如何将大数据集从 CSV 加载到 keras

    complexity-theory - 2 ^ n和4 ^ n在同一Big-Θ复杂度类别中吗?

    algorithm - 这个算法的时间复杂度是多少,它找到每个质数最多为 n