Как добавить слой ConvLSTM2D после слоя Conv2D? - PullRequest
0 голосов
/ 24 июня 2019

Я делаю авто-кодер для оценки глубины по монокулярным изображениям. Первый уровень представляет собой сверточный уровень, а второй уровень представляет собой сверточный уровень LSTM. Как добавить слой ConvLSTM2D после слоя Conv2D.

Это код, который я пробовал, но выдает ошибку.

autoencoder = Sequential()

autoencoder.add(Conv2D(64, (3, 3),strides = 2 , input_shape = (640, 480, 3), activation = 'linear'))
autoencoder.add(LeakyReLU(alpha = 0.1))

autoencoder.add(ConvLSTM2D(256, (3,3), strides = 2, input_shape = (None, 32), return_sequences = True))

Я получаю следующую ошибку

ValueError: вход 0 несовместим со слоем conv_gr_u2d_1: ожидается ndim = 5, найдено ndim = 4

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Возможно, вы неправильно поняли, для чего ConvLSTM2D хорош. Он разработан для сценария, в котором у вас есть ряд данных, где каждая точка данных представляет собой изображение. Итак, фильм будет типичным вариантом использования.

Итак, все, что вы в нее вводите, должно иметь форму (batch_size, timesteps, rows, cols, channels). С другой стороны, Conv2D имеет выходную форму (batch_size, rows, cols, features). Это то, что говорит вам ошибка.

Технически, вы можете просто добавить слой Reshape между ними и генерировать любую фигуру, какую захотите, но я не понимаю, как это будет иметь смысл в вашем сценарии.

Иметь его наоборот (сначала ConvLSTM2D, затем Conv2D) имело бы гораздо больше смысла. Но тогда вам нужны «кинематографические» входные данные. Если я вас правильно понимаю, у вас этого нет.

0 голосов
/ 24 июня 2019

форма ввода в Conv2D должна быть:

input_shape = (batch_size, img_wd, img_hg, channels) 

например:

input_shape = (None, 640, 480, 3)

и вам не нужно добавлять аргумент input_shape в ConvGRU2D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...