Увеличение размеров в середине структуры модели Keras. 2D в 3DPython

Программы на Python
Ответить
Anonymous
 Увеличение размеров в середине структуры модели Keras. 2D в 3D

Сообщение Anonymous »

По сути, я пытаюсь научить CNN обнаруживать простые вейвлеты (и их смещения) в изображениях с низким разрешением (30x48 пикселей).
Результаты моей модели были неудовлетворительными. отлично, поэтому я попытался применить некоторую эвристику к проектированию модели, и мне пришла в голову идея: сначала мне нужно было бы создать conv2D (слой 1) с большим ядром, скажем, 5x15, что должен в Теория соответствует одному вейвлету, поэтому должна быть в состоянии обнаружить вейвлет. (мб смелое предположение). Но чтобы обнаружить вейвлеты, поскольку они не всегда одинаковы, я сделал число ядер равным 30. Я хотел бы проследить за этим еще одним преобразованием. слой, однако я не думаю, что количество различных ядер не обязательно должно быть 30, я думаю, что 5 должно быть достаточно.
Поэтому моя идея заключалась в том, чтобы иметь слой conv3D (слой 2 ), который будет принимать значения различных отфильтрованных слоев после L1 и объединять их, но может иметь разное ядро ​​для каждого из отфильтрованных слоев.
Одним из недостатков может быть: что отфильтрованные слои в новом измерении, назовем это z (например, изображение, имеющее X,Y ), больше не имеет никакой «позиционной информации». Потому что Z dim — это просто набор фильтров, и я не могу контролировать порядок фильтров. Однако я все еще хочу сохранить информацию X,Y. Мой обходной путь — использовать слой conv3D с ядром (26,34,30), чтобы в индексе L1 Z для этого ядра была только одна допустимая позиция.

Код: Выделить всё

model = keras.Sequential( # upgraded acconeer gesture detection network
[
keras.layers.Input(shape=input_shape),
keras.layers.Conv2D(filters=30, kernel_size=(5,15), activation='relu'),
keras.layers.Conv3D(filters=5, kernel_size=(26,34,30), activation='relu'),
keras.layers.MaxPool2D((1,5)),
keras.layers.Flatten(),
keras.layers.Dense(15, activation = 'relu')
...
Однако это не работает, поскольку для conv3D требуется вход 5D, а у меня есть только вход 4D. Мне не удалось выяснить, как и вообще можно ли добавить слой изменения формы или масштабирования в стек модели.
Похоже, это не работает, так как мне нужен массив "x" "(входные данные), которых у меня нет (или не может быть) на момент определения модели. См. ниже:

Код: Выделить всё

model = keras.Sequential( # upgraded acconeer gesture detection network
[
keras.layers.Input(shape=input_shape),
keras.layers.Conv2D(filters=30, kernel_size=(5,15), activation='relu'),
keras.layers.Reshape(-1,26,34,30) #(x)
keras.layers.Conv3D(filters=5, kernel_size=(26,34,30), activation='relu'),
keras.layers.MaxPool2D((1,5)),
keras.layers.Flatten(),
keras.layers.Dense(15, activation = 'relu')
...
TLDR:
Могу ли я каким-то образом использовать слой Reshape в стеке модели, чтобы увеличить размер массива с 4D до 5D в середине модели?
(честно говоря, любые хорошие источники о дизайне CNN приветствуются, я чувствую, что что-то упускаю)
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/792 ... e-2d-to-3d
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»