Вопрос или проблема
Я применяю модель CNN к своему набору данных для прогнозирования. После изменения размеров, input_shape моей модели1 становится:
model1.input_shape:
(None, 1, 3, 4)
затем я применяю CNN, первый слой ввода определен ниже:
model1.add(Convolution2D(128, (2,2), border_mode=”valid” , input_shape=(1, 3, 4), activation= ‘relu’))
здесь 1 – это количество каналов, 3 и 4 представляют мои узлы, что означает 12 входных узлов или признаков, теперь когда я проверяю output_shape model1, это:
model1.output_shape:
(None, 128, 2, 3)
здесь 128 – это количество нейронов, которые я указал в своем входном слое. Мой вопрос: что означают элементы 2 и 3 здесь?
Выходная форма в 2D свёрточном слое зависит от:
- Размеров входа W, H
- Размеров фильтра F
- Дополнения P
- Шага S
- Количество фильтров или глубины D
Здесь, в вашей модели, W=3, H=4, F=2, P=0 (умолчательное дополнение в Keras), S=1 (умолчательный шаг в Keras), D=128, как вы это определили.
Преобразование определяется математической операцией свёртки, давая вам выходную форму:
$\frac{W−F+2P}{S} + 1$
Эта выходная форма показывает, как ваш вход реагирует (в терминах размера) при свёртке с вашими 128 фильтрами один за другим.
Ответ или решение
Ваша проблема касается параметров .output_shape
, которые используются в модели свёрточной нейронной сети (CNN). Давайте разберёмся детально в вопросах, связанных с преобразованием размеров на каждом этапе.
Параметры, влияющие на выходную форму
Как вы уже заметили, выходная форма вашего слоя свёртки вычисляется на основании нескольких параметров:
- Размер входа (W, H): Ширина (W) и высота (H) вашего входного тензора.
- Размер фильтра (F): Размер ядра свёртки, который в вашем случае составляет (2, 2).
- Паддинг (P): Параметр, определяющий, добавляются ли нули к краям изображения. При использовании значения "valid" в Keras, паддинг равен 0.
- Шаг (S): Шаг, который указывает, на сколько позиций сдвигается фильтр при свёртке. По умолчанию S равно 1.
- Число фильтров (D): Это количество свёрточных фильтров, которое вы задали, равно 128.
Расчёт выходной формы
На основе вышеизложенного, выходная форма после слоя свёртки может быть рассчитана с помощью следующей формулы:
[
\text{Output Width} = \frac{W – F + 2P}{S} + 1
]
[
\text{Output Height} = \frac{H – F + 2P}{S} + 1
]
Подставим ваши значения в формулу:
-
Для ширины:
- (W = 3), (F = 2), (P = 0), (S = 1):
[
\text{Output Width} = \frac{3 – 2 + 2 \cdot 0}{1} + 1 = 2
]
- (W = 3), (F = 2), (P = 0), (S = 1):
-
Для высоты:
- (H = 4), (F = 2), (P = 0), (S = 1):
[
\text{Output Height} = \frac{4 – 2 + 2 \cdot 0}{1} + 1 = 3
]
- (H = 4), (F = 2), (P = 0), (S = 1):
Интерпретация выходной формы
Теперь, когда вы узнали, как вычислять размеры выходов, давайте рассмотрим вашу выходную форму:
model1.output_shape: (None, 128, 2, 3)
- None — это размер батча, который не фиксирован и будет определяться во время обучения.
- 128 — это число фильтров, которые вы указали, то есть количество свёрточных ядер, применённых к входным данным.
- 2 и 3 — это высота и ширина выходного тензора после свёртки, которые вы рассчитали, равные 2 и 3 соответственно.
Таким образом, выходная форма (None, 128, 2, 3)
указывает, что в результате применения 128 фильтров размер выходного изображения составит 2 пикселя по высоте и 3 пикселя по ширине. Это полезно для последующих слоёв модели, таких как слои подвыборки или полносвязные слои, где необходимо учитывать размеры выходных данных.
Заключение
В целом, понимание изменения размерности через свёрточные слои — ключевой аспект для успешного проектирования и настройки моделей глубокого обучения. Факторы, такие как размер входных данных, размер фильтров и их количество, играют критически важную роль в формировании окончательного архитектурного решения вашей нейронной сети.