Кажется, что вы неправильно поняли некоторые термины, а также запутались, что сверточные слои имеют 3 измерения.
РЕДАКТИРОВАТЬ: я должен дать понять, что входной слой для CNN является сверточным слоем.
Количество нейронов в любом слое определяется разработчиком. Для полностью связанного слоя обычно это тот случай, когда для каждого входа есть нейрон. Итак, как вы упомянули в своем вопросе, для изображения число нейронов в полностью подключенном входном слое, вероятно, будет равно количеству пикселей (если только разработчик не захотел уменьшить частоту дискретизации в этой точке чего-либо). Это также означает, что вы можете создать полностью подключенный входной слой, который принимает все пиксели в каждом канале (ширина, высота, канал). Хотя каждый вход получает входной нейрон только один раз, в отличие от сверточных слоев.
Сверточные слои работают немного по-другому. Каждый нейрон в сверточном слое имеет то, что мы называем локальным рецептивным полем . Это просто означает, что нейрон подключен не ко всему входу (это будет называться полностью подключенным ), а просто к некоторой части входа (которая должна быть пространственно локальной). Эти входные нейроны предоставляют абстракции небольших разделов входных данных, которые при объединении по всему входному сигналу мы называем картой объектов .
Важной особенностью сверточных слоев является то, что они пространственно инвариантны . Это означает, что они ищут одинаковые функции по всему изображению. В конце концов, вы не хотели бы, чтобы нейронная сеть, обученная распознаванию объектов, распознавала велосипед только в том случае, если он находится в левом нижнем углу изображения! Это достигается путем ограничения всех весов в локальных рецептивных полях одинаковыми. Нейроны в сверточном слое, которые покрывают весь ввод и ищут одну особенность, называются filters . Эти фильтры являются двухмерными (они покрывают все изображение).
Однако, если весь сверточный слой ищет только одну функцию (например, угол), это серьезно ограничит пропускную способность вашей сети. Поэтому разработчики добавляют несколько фильтров , чтобы слой мог искать множество функций по всему вводу. Этот набор фильтров создает трехмерный сверточный слой.
Надеюсь, это помогло!
Edit-
Используя пример, приведенный в статье, чтобы очистить свободные концы:
Вопрос ОП:
Итак, представьте, что у нас есть изображение (27 х 27). И скажем, есть 3 фильтра каждого размера (3 X 3). Таким образом, есть полностью 3 X 3 X 3 = 27 параметров (W). Итак, мой вопрос, как эти нейроны связаны? Каждый из фильтров должен повторять более 27 пикселей (нейронов). Таким образом, одновременно 9 входных нейронов подключены к одному фильтрующему нейрону. И эти соединения меняются, когда фильтр проходит по всем пикселям.
Ответ:
Во-первых, важно отметить, что типичным (и часто важным) является то, что рецептивные поля перекрываются. Таким образом, для перекрытия / шага 1 восприимчивое поле 3x3 верхнего левого нейрона (нейрон A), восприимчивое поле нейрона справа (нейрон B) также будет иметь восприимчивое поле 3x3, чье самое левое 3 соединения может занять те же входы, что и у самых правых соединений нейрона А.
С учетом вышесказанного, я думаю, что вы хотели бы визуализировать это, поэтому я буду придерживаться вашего примера, где нет совпадений, и предположим, что мы не хотим никаких отступов вокруг изображения. Если есть изображение с разрешением 27х27, и мы хотим 3 фильтра (это наш выбор). Тогда у каждого фильтра будет 81 нейрон (9x9 2D сетка нейронов). Каждый из этих нейронов будет иметь 9 соединений (соответствует рецептивному полю 3х3). Поскольку есть 3 фильтра, и каждый имеет 81 нейрон, у нас будет 243 нейрона.
Надеюсь, это прояснит ситуацию. Для меня ясно, что вы путаете свою терминологию (слой, фильтр, нейрон, параметр и т. Д.). Я бы порекомендовал вам прочитать некоторые блоги, чтобы лучше понять эти вещи, а затем сосредоточиться на CNN. Удачи:)