Как расширить вывод слоя встраивания в keras

У меня такая сеть:

model = Sequential()
model.add(Embedding(400000, 100, weights=[emb], input_length=12, trainable=False))

model.add(Conv2D(256,(2,2),activation='relu'))

выходные данные слоя внедрения имеют форму (batchSize, 12, 100). Слой conv2D требует ввода формы (batchSize, filter, 12, 100), и я получаю следующую ошибку:

 Input 0 is incompatible with layer conv2d_1: expected ndim=4, found ndim=3

Итак, как я могу расширить вывод слоя внедрения, чтобы сделать его подходящим для слоя Conv2D?

Я использую Keras с Tensorflow в качестве серверной части.

Замените Conv2d на Conv1D. Расширять размер не нужно.

Amir 13.09.2018 19:45
2
1
979
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Добавление слоя изменения формы должно быть правильным решением https://keras.io/layers/core/#reshape В зависимости от конкретной ситуации Conv1D холодный, хотя работает.

reshape изменяет сами данные, но мне нужно добавить еще одно измерение длиной 1 !!

ayyoob imani 14.09.2018 07:40

Кажется, вы решили свою проблему (я совсем забыл о слоях лямбда), но есть ли причина не использовать Conv1D?

Sebastian E 14.09.2018 08:51

Мне нужно 2D-ядро (окно), чтобы перемещаться по данным, Conv1D свертывается только по одному измерению.

ayyoob imani 14.09.2018 08:56
Ответ принят как подходящий

Мне удалось добавить еще одно измерение с помощью следующего фрагмента кода:

model = Sequential()
model.add(Embedding(400000, 100, weights=[emb], input_length=12, trainable=False))
model.add(Lambda(lambda x: expand_dims(x, 3)))
model.add(Conv2D(256,(2,2),activation='relu'))

Другие вопросы по теме