Keras Conv2D и входные каналы
Документация уровня Keras определяет размеры ввода и вывода для сверточных слоев: https://keras.io/layers/convolutional/
Форма ввода: (samples, channels, rows, cols)
Форма вывода: (samples, filters, new_rows, new_cols)
Размер ядра - это пространственный параметр, т.е. Определяет только ширину и высоту.
Таким образом, вход с каналами c
даст выход с каналами filters
независимо от значения c
. Поэтому он должен применять двумерную свертку с пространственным фильтром height x width
и затем собирать результаты как-то для каждого изученного фильтра.
Что это за оператор агрегации? это суммирование по каналам? могу ли я его контролировать? Я не мог найти никакой информации о документации Keras.
Благодарю.
Ответы
Ответ 1
Возможно, это путано, что он называется слоем Conv2D (это было для меня, поэтому я и искал этот ответ), потому что, как писал Нилеш Бирари,
Наверное, вам не хватает 3D-ядра [ширина, высота, глубина]. Таким образом, результат суммирования по каналам.
Возможно, 2D проистекает из того, что ядро только скользит по двум измерениям, третье измерение фиксировано и определяется количеством входных каналов (входной глубины).
Для более подробного объяснения прочитайте https://petewarden.com/2015/04/20/why-gemm-is-at-the-heart-of-deep-learning/
Я отобрал иллюстративный образ оттуда:
Ответ 2
Я также задавался этим вопросом и нашел здесь еще один ответ, где сказано (внимание мое):
Возможно, самым ощутимым примером многоканального входа является то, когда у вас есть цветное изображение, которое имеет 3 канала RGB. Позвольте получить его до уровня свертки с 3 входными каналами и 1 выходным каналом. (...) Что он делает, так это то, что он вычисляет свертку каждого фильтра с соответствующим входным каналом (...). Шаг всех каналов одинаковый, поэтому они выводят матрицы одинакового размера. Теперь он суммирует все матрицы и выводит одну матрицу, которая является единственным каналом на выходе слоя свертки.
Иллюстрация:
Обратите внимание, что веса ядер свертки для каждого канала различны, которые затем итеративно корректируются на этапах обратного распространения, например, градиентные приличные алгоритмы, такие как стохастический градиентный спуск (SDG).
Вот более технический ответ от TensorFlow API.