объединение входов с вложениями и плотным слоем

python keras

1031 просмотра

1 ответ

2724 Репутация автора

У меня есть два входа, x_a и x_b, где x_a - категориальная переменная (отсюда вложение) и x_b - обычная матрица признаков. По сути, я хочу умножить x_b на матрицу весов W_b, которая является 10x64матрицей, чтобы я получил 64-мерный вывод.

from keras.models import Sequential
from keras.layers import Dense, Activation, Embedding, Merge

encoder_cc = Sequential()

# Input layer for countries(x_a)
encoder_cc.add(Embedding(cc_idx.max(),64))
# Input layer for triggers(x_b)
encoder_trigger = Sequential()
# This should effectively be <W_b>
encoder_trigger.add(Dense(64, input_dim=10, init='uniform'))

model = Sequential()
model.add(Merge([encoder_cc, encoder_trigger], mode='concat'))

Затем я хочу объединить (объединить) эти два, прежде чем делать обычные вещи из нейронной сети. За исключением того, что я получаю ошибку:

Exception: "concat" mode can only merge layers with matching output shapes except for the concat axis. Layer shapes: [(None, 1, 64), (None, 64)]

Любые мысли о том, как я могу решить это?

Автор: sachinruk Источник Размещён: 19.07.2016 07:59

Ответы (1)


3 плюса

8448 Репутация автора

Решение

Слой Embedded сделан для использования в последовательностях, он выводит тензор с трехмерной формой (None, sequence_length, embedding_size), который в вашем случае (None, 1, 64), потому что ваш вход имеет длину 1.

Способ исправить это - добавить слой «Flatten ()» в модель encoder_cc, как предлагает Стефан, или добавить «Reshape ((64,))» после слоя встраивания. Это заставит выходную форму быть (Нет, 64) и соответствовать форме другой модели.

Надеюсь, это поможет.

Автор: Nassim Ben Размещён: 05.02.2017 05:11
Вопросы из категории :
32x32