Результаты моей модели были неудовлетворительными. отлично, поэтому я попытался применить некоторую эвристику к проектированию модели, и мне пришла в голову идея: сначала мне нужно было бы создать 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')
...
Похоже, это не работает, так как мне нужен массив "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')
...
Могу ли я каким-то образом использовать слой Reshape в стеке модели, чтобы увеличить размер массива с 4D до 5D в середине модели?
(честно говоря, любые хорошие источники о дизайне CNN приветствуются, я чувствую, что что-то упускаю)
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/792 ... e-2d-to-3d
Мобильная версия