我正在尝试对大小为[None,None,16]的输入数据运行双向LSTM,其中第一个维度是训练样本的数量,第二个维度是句子中的单词数量,第三个维度是维度是每个单词嵌入的单词的大小。因此第二维是可变的,因为每个训练样本句子将具有不同数量的单词。在这种情况下如何指定输入形状?
sentence1_data = tf.keras.layers.Input(shape=(None, EMBEDDING_SIZE,), dtype='float32', name='sentence1_data')
sentence2_data = tf.keras.layers.Input(shape=(None, EMBEDDING_SIZE,), dtype='float32', name='sentence2_data')
我希望模型能够成功构建。但是,相反,我得到了以下错误:
ValueError: Error when checking input: expected sentence1_data to have 3 dimensions, but got array with shape (3916, 1)
这里的3916是训练样本的数量。 Keras似乎无法理解我的可变第二维输入数组。
下面是我的其余代码:
lstm1_out = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(NUM_HIDDEN))(sentence1_data)
lstm2_out = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(NUM_HIDDEN))(sentence2_data)
act1_out = tf.keras.layers.Dense(1, activation='softmax', name='act1_out')(lstm1_out)
act2_out = tf.keras.layers.Dense(1, activation='softmax', name='act2_out')(lstm2_out)
out = tf.keras.layers.Lambda(self.norm)((act1_out, act2_out))
self._model = tf.keras.models.Model(inputs=[sentence1_data, sentence2_data], outputs=out)
self._model.compile(loss='mean_squared_logarithmic_error', optimizer='adam', metrics=['accuracy'])