При чтении книги Машинное обучение: вероятностная перспектива Мерфи и этой статьи Майка О'Нила Я столкнулся с некоторыми вычислениями количества весов в сверточной нейронной сети, которыеЯ хочу понять.Архитектура сети выглядит следующим образом:
И это объяснение из вышеприведенной статьи:
Layer# 2 также является сверточным слоем, но с 50 картами объектов.Каждая карта пространственных объектов имеет размер 5x5, и каждый блок в картах объектов представляет собой сверточное ядро 5x5 соответствующих областей всех 6 карт объектов предыдущих слоев, каждая из которых является картой объектов 13x13.Таким образом, в слое № 2 имеется 5x5x50 = 1250 нейронов, (5x5 + 1) x6x50 = 7800 весов и 1250x26 = 32500 соединений.
Расчет количества весов (5x5+1) x6x50 = 7800 , мне кажется странным.Фактическое вычисление не должно быть таким: (5x5x6 + 1) x50 = 7550 в соответствии с объяснением совместного использования параметров здесь .
Мой аргумент таков: у нас есть 50 фильтров размером 5x5x6 и 1 смещение для каждого фильтра, следовательно, общее количество весов составляет (5x5x6 + 1) x50 = 7550.И это код Pytorch, который подтверждает это:
import torch
import torch.nn as nn
model = nn.Conv2d(in_channels=6, out_channels=50, kernel_size=5, stride=2)
params_count = sum(param.numel() for param in model.parameters() if param.requires_grad)
print(params_count) # 7550
Может кто-нибудь объяснить это, и какой из них является правильным?