Количество слоев модели - PullRequest
0 голосов
/ 03 ноября 2019

Я тренирую CNN. В целях отчетности я хочу узнать количество слоев в моей модели.

Из того, что я вижу в приведенном ниже коде, у меня есть в общей сложности 6 слоев, layer1, layer2, conv2_drop, fc1, fc2,FC3. Я прав?

Net(
  (layer1): Sequential(
    (0): Conv2d(3, 10, kernel_size=(5, 5), stride=(1, 1))
    (1): BatchNorm2d(10, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (2): ReLU()
    (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (4): Dropout(p=0.2, inplace=False)
  )
  (layer2): Sequential(
    (0): Conv2d(10, 20, kernel_size=(5, 5), stride=(1, 1))
    (1): BatchNorm2d(20, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    (2): ReLU()
    (3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (4): Dropout(p=0.2, inplace=False)
  )
  (conv2_drop): Dropout2d(p=0.5, inplace=False)
  (fc1): Linear(in_features=500, out_features=250, bias=True)
  (fc2): Linear(in_features=250, out_features=50, bias=True)
  (fc3): Linear(in_features=50, out_features=10, bias=True)
)

Есть ли у моего NN 6 слоев, или сами layer1 и layer2 добавляют еще 4? Всего будет 14 слоев?

1 Ответ

0 голосов
/ 04 ноября 2019

Не совсем понятно, что считать слоем (это flattening слой или просто операция? Что, если он реализован как torch.nn.Module?). Нейронные сети, по сути, представляют собой графики, выполняющие операции, слои являются полезной абстракцией, которая помогает нам рассуждать о них.

В PyTorch, IMO, это будет единственный экземпляр torch.nn.Module, поэтому в этом случае этобудет 14. Более того, BatchNorm считается слоем повсеместно, и для удобства я бы также рассмотрел и другие (ReLU, MaxPool2d, Dropout).

layer1 и layer2это больше блок (стек слоев) в этом случае. Тем не менее, ваши fc1, fc2 и fc3 должны быть IMO (обратите внимание, что я использовал это снова), закодированные как еще один block (завернутый в torch.nn.Seqeuntial, вероятно).

...