in = Input(shape=(None, num_words)) # let's assume it is one-hot encoded words
latent = Masking()(in) # sentences in same batch need to same length, padded
latent = LSTM(latent_size)(latent) # skips masked timesteps
out = Dense(num_words, activation='softmax')
model = Model(in, out)
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
2 回答
是的,您可以在Keras中指定可变长度输入,即通过指定
input_shape=(None, features)
,其中None
表示未知的时间步数 . 这是一个示例模型:关键的一点是批量句子需要填充张量操作,但实际上不同的批次可以有不同的时间步长,允许你的模型处理不同长度的句子 .
在keras中,您需要平滑的输入形状,但您可以填充序列(例如填充0)以具有相同的大小 .
LSTM采用3d输入:( batch_size,timesteps,features) . 时间步长代表单词,并以单个单词的表示为特征 . 假设您有20个单词的句子,并且句子的每个单词都表示为1000个元素的OneHot向量 . 对于单个句子,您的输入形状必须是(1,20,1000) . 您可以手动预处理数据以适应这些条件,或者您可以在keras中使用预先构建的功能来为您完成工作 . 你可以在这里找到所有这些功能:https://keras.io/preprocessing/text/