Мой вопрос касается размеров тензоров, входящих в слой Conv1D в Керасе. Форма ввода должна быть (партия, шаги, каналы). У меня есть, например, данные акселерометра, где я получаю сигнал времени для каждой оси. Я хотел бы сделать вывод для временных окон длиной 50, поэтому один образец для вывода имеет форму (50, 3).
Теперь, если я использую слой Conv1D в качестве первого слоя для этих данных с kernel_size = 10 и filters = 64, результат первого слоя в одном окне данных будет иметь форму (41, 64). Я полностью понимаю, что появляется 41, так как это число выборок, которое возникает в результате свертки сигнала длиной 50 с ядром длины 10. Однако я не совсем уверен, где три оси моего акселерометра находятся в этих данных. Я бы больше ожидал следующего поведения:
input_shape = (пакет, шаги, каналы), output_shape = (пакет, steps_after_conv, каналы, фильтры)
Кто-нибудь может объяснить такое поведение Кераса? Я не совсем понял это из документации.
Как показано на рисунке выше (Изображение предоставлено: http://followtheart.info/kareff-Mon_15_14.html), в операции convolution
в CNN
каждый фильтр свертывается по всем каналам (три канала в случае RGB-изображения) для расчета выходной стоимости. Таким образом, в вашем случае 64 фильтров каждый фильтр будет принимать значения из всех входных каналов в своем поле восприятия. Следовательно, ваш выход будет иметь выходы из 64 фильтров независимо от количества каналов, которые у вас есть на входе.
Для пакета изображений (batch_size, num_channels, height, width)
выходные данные будут иметь форму (batch_size, num_filters, height_after_conv, width_after_conv)
.