[英]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 的數量,但我不確定如何獲取神經元的數量?
有沒有特定的方法來計算它們?
謝謝。
獲得總數的一種快速方法是
nn.Module.parameters
獲取所有參數;torch.nn.utils.parameters_to_vector
將生成器轉換為扁平張量;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.