问题描述
在以下示例中,我尚不清楚指定输入尺寸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。
解决方法
您用None
说的是,输入模型的序列的严格长度为20。虽然模型通常需要固定长度的递归神经网络(如您在此处使用的LSTM),不需要固定的序列长度。因此,LSTM不在乎您的序列是包含20个时间步还是包含100个时间步,因为它只是循环遍历它们。但是,当您将时间步长指定为20时,LSTM预期为20,如果没有得到,则会引发错误。
有关更多信息,请参见Tim {的post}