«Двумерная» часть двумерной свертки не относится ни к размеру входа свертки, ни к размеру самого фильтра, а скорее к пространству, в котором фильтру разрешено перемещаться (только в 2 направлениях). Другой способ думать об этом заключается в том, что каждый из каналов RGB имеет свой собственный фильтр 2D-массива отдельно, а выходные данные добавляются в конце. отдельно от конца до конца?
Фактически это делается по каждому каналу отдельно. Например, первый слой Conv2D
принимает каждый из 3 слоев 224x224 отдельно, а затем применяет к каждому из них разные фильтры 2D-массива. Но это не сквозной путь для всех слоев модели, только внутри слоя на этапе свертки.
Но, вы можете спросить, есть 64 фильтра свертки для каждого канала , так почему же на выходе Conv2D
для 3 каналов нет каналов 3*64 = 192
? Это вызывает ваш вопрос
Объединяются ли (суммируются или объединяются) каналы RGB в какой-то момент?
Ответ: да. После того, как фильтр свертки применяется к каждому слою отдельно, добавляются значения для каждого из трех каналов, а затем также смещение, если вы это указали. См. Диаграмму ниже (из Dive Into Deep Learning , под CC BY-SA 4.0 ):
Погрузитесь в диаграмму глубокого обучения
Причина этого (добавляются отдельные слои каналов) в том, что на самом деле нет трех отдельных фильтров 2D-массива для каждого канала; технически есть только 1 фильтр 3D-массива, который движется только в двух направлениях. Вы можете думать об этом как о гамбургере: есть один фильтр 2D-массива для одного канала (булочка), другой для следующего канала (салат) и т. Д. c. но все слои сложены и функционируют как единое целое, поэтому веса фильтра складываются сразу. Для этого нет необходимости добавлять специальный вес или фильтр, поскольку веса уже присутствуют на этапе свертки (это просто умножение двух подгоночных параметров вместе, что также может быть одним).