Keras 中嵌入的输入层维度

dimension of the input layer for embeddings in Keras

我不清楚在以下示例中指定输入维度 Input(shape=(20,)) 与不指定 Input(shape=(None,)) 之间是否有任何区别:

input_layer = Input(shape=(None,)) 
emb = Embedding(86, 300) (input_layer) 
lstm = Bidirectional(LSTM(300)) (emb) 
output_layer = Dense(10, activation="softmax") (lstm)   
model = Model(input_layer, output_layer)  
model.compile(optimizer="rmsprop", loss="categorical_crossentropy", metrics=["acc"])  
history = model.fit(my_x, my_y, epochs=1, batch_size=632, validation_split=0.1)  

my_x (shape: 2000, 20) 包含引用字符的整数,而 my_y 包含一些标签的单热编码。使用 Input(shape=(None,)),我发现我可以使用 model.predict(my_x[:, 0:10]),即我只能给出 10 个字符作为输入而不是 20 个:这怎么可能?我假设 my_x 中的所有 20 个维度都需要预测相应的 y。

你用 None 说的是,你输入模型的序列的长度严格为 20。虽然模型通常需要固定长度,但递归神经网络(如你在那里使用的 LSTM ), 不需要固定的序列长度。所以 LSTM 只是不关心你的序列是否包含 20 或 100 个时间步长,因为它只是循环遍历它们。但是,当您将时间步数指定为 20 时,LSTM 期望为 20,如果没有得到它们将会引发错误。

有关详细信息,请参阅 Tim 的 post