Особенно, если вы заинтересованы в создании правильного размера тензора без заполнения.

Картинка стоит 1000 слов, так что сначала 1000 слов!

Некоторые допущения: предполагается заполнение, веса и фильтры взаимозаменяемы.

Переход 3D Conv Forward:

Переместите фильтры на входной 3D-тензор, и каждый фильтр создаст столько пространственных плоскостей на выходе (просто)

Бэкпроп:

Градиент веса: см. (1) на рисунке выше. Возьмите каждую плоскость выходного градиента (помните, что это было создано в прямом проходе с использованием одного фильтра) и выполните «двухмерную» свертку с каждой плоскостью трехмерного входного тензора. Это даст вам первый фильтр. Глядя на различные источники в Интернете, это не очень ясно. Чтобы сгенерировать N-й вес Wn => Conv2D(IN, On), где IN — весь трехмерный тензор, но для выполнения этой свертки вам нужно подавать каждую плоскость одну за другой, и она будет генерировать отдельные плоскости веса Wn в том же порядке.

Входной градиент:см. (2) на рисунке о. Поверните фильтр на 180 градусов (хорошо!). Переставьте фильтры, чтобы поменять местами измерения 3 и 4! Убедитесь сами, зачем это нужно. Возьмите каждый фильтр и сверните его с выходом (полная свертка, да), и теперь каждый (переставленный) фильтр даст вам одну пространственную плоскость ввода. Какой-то хитрый трюк, не знал. Спасибо другу, который объяснил это.

С шагом:

Расширьте вывод с помощью коэффициента шага, чтобы получить правильный размер входного тензора.

Это все!!!