У меня такая сеть:
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 в качестве серверной части.
Добавление слоя изменения формы должно быть правильным решением https://keras.io/layers/core/#reshape В зависимости от конкретной ситуации Conv1D холодный, хотя работает.
reshape изменяет сами данные, но мне нужно добавить еще одно измерение длиной 1 !!
Кажется, вы решили свою проблему (я совсем забыл о слоях лямбда), но есть ли причина не использовать Conv1D?
Мне нужно 2D-ядро (окно), чтобы перемещаться по данным, Conv1D свертывается только по одному измерению.
Мне удалось добавить еще одно измерение с помощью следующего фрагмента кода:
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'))
Замените Conv2d на Conv1D. Расширять размер не нужно.