Я пытаюсь скопировать нейронную сеть. Архитектура нейронной сети Модель LSTM . Первый вход представляет собой хешированное слово в виде двоичного вектора размером 2 ^ 18, которое внедряется в обучаемое 500-мерное распределенное представление, используя слой внедрения.
Количество слов отличается от каждого элемента пакета. После того, как слова были внедрены и применены исключения, мне нужно объединить вектор функций, который имеет 24 функции для каждого слова.
Проблема в том, что первый ввод после встраивания имеет разные размеры векторов объектов. Слова вставки имеют размерность (Нет, Нет, 18, 500), а векторы функций имеют размерность (Нет, Нет, 24). Первый None - это размер пакета, второй None - это количество слов для каждого элемента пакета.
Как объединить встраиваемое слово с вектором признаков?
Ниже мой код:
inputs = Input(shape=(None, 18,), dtype=np.int16, name="Inp1")
embbed_input = Embedding(input_dim=1, output_dim=500, input_length=18)
aux = embbed_input(inputs)
aux = Dropout(rate=self.dropout_rate)(aux)
inputs_feat = Input(shape=(None, 24,), dtype=np.float32, name="Inp2")
aux = concatenate([aux, inputs_feat], axis=2) #ValueError here
aux = Dense(units=600, activation="relu")(aux)
aux = Dense(units=600, activation="relu")(aux)
aux = Bidirectional(LSTM(units=400, return_sequences=True))(aux)
aux = Dropout(rate=self.dropout_rate)(aux)
aux = Dense(units=600, activation="relu")(aux)
aux = Dense(units=600, activation="relu")(aux)
aux = Dense(units=29, activation="sigmoid")(aux)
ValueError: A 'Concatenate' layer require inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, None, 18, 500), (None, None, 24)]