Deep learning 卷积神经网络的内存大小是多少?

Deep learning 卷积神经网络的内存大小是多少?,deep-learning,conv-neural-network,Deep Learning,Conv Neural Network,我在看 我不明白为什么层2(CONV3-64:[224x224x64])的内存大小是224x224x64 我知道有64个大小为3x3的过滤器,但为什么输入大小要乘以64 为什么层(CONV3-128)中的权重数是(3x3x64)x128而不是 (3x64x64)x128?(上一层的权重乘以新的128个过滤器) 谢谢 INPUT: [224x224x3] memory: 224*224*3=150K weights: 0 CONV3-64: [224x224x64] memo

我在看

我不明白为什么层2(CONV3-64:[224x224x64])的内存大小是224x224x64

  • 我知道有64个大小为3x3的过滤器,但为什么输入大小要乘以64
  • 为什么层(CONV3-128)中的权重数是(3x3x64)x128而不是 (3x64x64)x128?(上一层的权重乘以新的128个过滤器)
  • 谢谢

    INPUT: [224x224x3]        memory:  224*224*3=150K   weights: 0
    CONV3-64: [224x224x64]  memory:  224*224*64=3.2M   weights: (3*3*3)*64 = 1,728
    CONV3-64: [224x224x64]  memory:  224*224*64=3.2M   weights: (3*3*64)*64 = 36,864
    POOL2: [112x112x64]  memory:  112*112*64=800K   weights: 0
    CONV3-128: [112x112x128]  memory:  112*112*128=1.6M   weights: (3*3*64)*128 = 73,728
    CONV3-128: [112x112x128]  memory:  112*112*128=1.6M   weights: (3*3*128)*128 = 147,456
    POOL2: [56x56x128]  memory:  56*56*128=400K   weights: 0
    CONV3-256: [56x56x256]  memory:  56*56*256=800K   weights: (3*3*128)*256 = 294,912
    CONV3-256: [56x56x256]  memory:  56*56*256=800K   weights: (3*3*256)*256 = 589,824
    CONV3-256: [56x56x256]  memory:  56*56*256=800K   weights: (3*3*256)*256 = 589,824
    POOL2: [28x28x256]  memory:  28*28*256=200K   weights: 0
    CONV3-512: [28x28x512]  memory:  28*28*512=400K   weights: (3*3*256)*512 = 1,179,648
    CONV3-512: [28x28x512]  memory:  28*28*512=400K   weights: (3*3*512)*512 = 2,359,296
    CONV3-512: [28x28x512]  memory:  28*28*512=400K   weights: (3*3*512)*512 = 2,359,296
    POOL2: [14x14x512]  memory:  14*14*512=100K   weights: 0
    CONV3-512: [14x14x512]  memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
    CONV3-512: [14x14x512]  memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
    CONV3-512: [14x14x512]  memory:  14*14*512=100K   weights: (3*3*512)*512 = 2,359,296
    POOL2: [7x7x512]  memory:  7*7*512=25K  weights: 0
    FC: [1x1x4096]  memory:  4096  weights: 7*7*512*4096 = 102,760,448
    FC: [1x1x4096]  memory:  4096  weights: 4096*4096 = 16,777,216
    FC: [1x1x1000]  memory:  1000 weights: 4096*1000 = 4,096,000
    
    TOTAL memory: 24M * 4 bytes ~= 93MB / image (only forward! ~*2 for bwd)
    TOTAL params: 138M parameters
    

    您的第一个问题是指向前传球时存储的记忆。

  • 64英寸224x224x64属于CONV3-64层,因为当您通过单个224x224x3图像时,它会通过64个3x3x3过滤器,因此必须在内存中存储64个新图像,以便通过前向传递将这些64个过滤器的效果传播到网络中
  • 您的第二个是指网络中的权重参数。

  • 在CONV3-128层中,输入为112x112x64,这意味着如果要应用单个3x3滤波器,实际上要对64个输入通道中的每个应用不同的滤波器。您可以将输入视为一个112x112x64卷,该卷正在被64个不同的3x3过滤器过滤,可以将其视为一个3x3x64体积过滤器,该过滤器将输出一个112x112图像。该层的输出设置为128个通道,因此必须执行128次,因此该层中的权重为128*64*3*3
    您的第一个问题是指向前传球时存储的记忆。

  • 64英寸224x224x64属于CONV3-64层,因为当您通过单个224x224x3图像时,它会通过64个3x3x3过滤器,因此必须在内存中存储64个新图像,以便通过前向传递将这些64个过滤器的效果传播到网络中
  • 您的第二个是指网络中的权重参数。

  • 在CONV3-128层中,输入为112x112x64,这意味着如果要应用单个3x3滤波器,实际上要对64个输入通道中的每个应用不同的滤波器。您可以将输入视为一个112x112x64卷,该卷正在被64个不同的3x3过滤器过滤,可以将其视为一个3x3x64体积过滤器,该过滤器将输出一个112x112图像。该层的输出设置为128个通道,因此必须执行128次,因此该层中的权重为128*64*3*3