在以下示例中,我尚不清楚指定输入尺寸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
(形状:2000、20)包含引用字符的整数,而my_y
包含某些标签的一次性编码。使用Input(shape=(None,))
,我看到我可以使用model.predict(my_x[:, 0:10])
,即我只能输入10个字符而不是20个字符:这怎么可能?我假设my_x
中的所有20个维度都需要用来预测相应的y。
答案 0 :(得分:0)
您用None
说的是,输入模型的序列的严格长度为20。虽然模型通常需要固定长度的递归神经网络(如您在此处使用的LSTM),不需要固定的序列长度。因此,LSTM不在乎您的序列是包含20个时间步还是包含100个时间步,因为它只是循环遍历它们。但是,当您将时间步长指定为20时,LSTM预期为20,如果没有得到,则会引发错误。
有关更多信息,请参见Tim {的post}