簡體   English   中英

CNN 架構中的神經元數量

[英]Number of neuron in CNN architecture

我正在使用某種 CNN 架構,但是,我不確定如何計算其中的確切神經元數量。

        self.conv1 = nn.Conv2d(in_channels=1, out_channels=16,
                               kernel_size=(7, 7), padding=(1, 1),
                               stride=(2, 2))

        self.conv2 = nn.Conv2d(in_channels=16, out_channels=32,
                               kernel_size=(7, 7), padding=(1, 1),
                               stride=(2, 2))

        self.conv3 = nn.Conv2d(in_channels=32, out_channels=64,
                               kernel_size=(3, 3), padding=(2, 2),
                               stride=(2, 2))

        self.fc1 = nn.Linear(64 * 1 * 1, 8)

每個convolution layer之后還有一個2D-maxpooling ,步長為2

我可以在我的網絡中獲取參數和 Gmacs 的數量,但我不確定如何獲取神經元的數量?

有沒有特定的方法來計算它們?

謝謝。

獲得總數的一種快速方法是

  1. 使用nn.Module.parameters獲取所有參數;
  2. 使用torch.nn.utils.parameters_to_vector將生成器轉換為扁平張量;
  3. 使用torch.Tensor.numel查找元素torch.Tensor.numel

對應於:

>>> p2v(model.parameters()).numel()
44936

torch.nn.utils導入parameters_to_vector作為p2v


如果你想自己計算參數:

  • 計算內核和偏差時的卷積。 給定輸入通道in_c 、輸出通道out_c和內核大小k

     conv = lambda in_c, out_c, k: k*k*in_c*out_c + out_c
  • 全連接層:只是一個帶有偏差的二維矩陣:

     fc = lambda in_c, out_c: in_c*out_c + out_c
  • 最大池層是非參數化層: 0參數。

總而言之,這為您提供:

>>> conv(1, 16, 7) + conv(16, 32, 7) + conv(32, 64, 3) + fc(64, 8)
44936

神經元這個詞只是一個抽象概念。 如果您將其視為每個給定層的輸出維度,則:

  • 對於卷積層,它將取決於輸入的空間維度。 因此,給定空間維度x 、內核大小k 、填充p和步長s

     conv = lambda x, k, p, s: math.floor((x+2*p - k)/ s + 1)
  • 對於全連接層,它對應於輸出特征的數量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM