Мне нужна помощь в понимании того, как тензорный поток организует данные из одного сверточного слоя в другой. Мотивация для этого заключается в том, что я пытаюсь реализовать пользовательский слой и не пытаюсь упорядочить выходные данные и не обработать входные данные.
Предположим, что первый скрытый слой в сети реализует 2 -D свертка по фильтрам NumFilt, и что данные имеют один канал и в формате последнего канала. Таким образом, тензор фильтра имеет форму K x L x 1 x NumFilt, где K и L - высота и ширина фильтров. Кроме того, входные данные отформатированы как NumBatch x Высота x Ширина x 1. Для простоты предположим, что отступ равен «ОДНО».
Выход этого первого слоя представляет собой четырехмерный тензор с размерами NumBatch x Высота х Ширина х NumFilt, нет? Если второй уровень также реализует 2-D свертку с использованием тех же фильтров, то он применяет каждый из фильтров NumFilt к каждому выходному каналу NumFilt из предыдущих уровней. Таким образом, выходные данные этого второго слоя должны быть NumBatch x Высота x Ширина x NumFilt * NumFilt, нет?
Мой вопрос: правильное ли поведение второго слоя для итерации по размеру канала его входа, так что он может переформатировать данные в отдельные тензоры NumFilt, каждый из которых имеет размер NumBatch x Высота x Ширина x 1, чтобы можно было вызывать conv2d для каждого из них? Выходные данные каждой свертки будут затем сохраняться в одном из пространств NumFilt * NumFilt в четвертом измерении выходного тензора.
Моя путаница проистекает из того факта, что я не вижу такого поведения, реализованного в tenenflowflow / keras. исходный код. То, что я вижу, это как простые вызовы функции свертки в классе _Conv:
outputs = K.conv2d(
inputs,
self.kernel,
strides=self.strides,
padding=self.padding,
data_format=self.data_format,
dilation_rate=self.dilation_rate)
и никакого переформатирования / реорганизации или зацикливания входного тензора. Если входным тензором для этой функции является NumBatch x Высота x Ширина x NumFilt, а ядро - L x P x 1 x NumFilt, то приведенное выше вызовет исключение, поскольку число каналов между этими двумя не совпадает.