我正在尝试复制神经网络。神经网络的架构为LSTM Model。第一输入是作为大小为2 ^ 18的二进制向量的散列词,该散列词使用嵌入层嵌入可训练的500维分布式表示中。
单词数与每个批处理元素不同。在词被嵌入并应用了辍学之后,我需要与特征向量连接,特征向量每个词具有24个特征。
问题在于,嵌入后的第一个输入具有不同维的特征向量。嵌入词的维数为(None,None,18,500),特征vetors的维数为(None,None,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)]
由于单个步骤的输入包含用于嵌入层的18个输入,因此我们可能需要重新调整嵌入层的输出形状以使最终的二维平面变平。