我正在尝试构建一个用于机器语言翻译(从英语到法语)的架构
model = Sequential()
model.add(LSTM(256, input_shape =(15,1)))
model.add(RepeatVector(output_sequence_length))
model.add(LSTM(21,return_sequences=True))
model.add(TimeDistributed(Dense(french_vocab_size, activation='sigmoid'))
英语句子的最大长度为 15,法语句子的最大长度为 21。英语单词的最大数量为 199,法语单词的最大数量为 399。output_sequence_length
为 21。
这个模型给我一个错误
检查输入时出错:预期 lstm_40_input 具有形状 (None, 15, 1),但得到的数组具有形状 (137861, 21, 1)
我对keras中的LSTM的理解很困惑。
1.根据文档,第一个参数必须是“输出空间的维数”。我不明白那是什么意思。另外,
- 到底发生了什么
return_sequences
设置为True
请告诉我。
最佳答案
您想向您的网络提供什么类型的数据?因为在我看来,您没有将单词转换为向量(二进制向量或编码向量)。
无论如何,LSTM 网络需要一个 3 维条目,维度对应于:(样本、时间步长、特征)。
在你的情况下,样本对应于你的句子的数量,我猜是137861。时间步长对应于每个序列的长度,在你的情况下是15,特征是每个编码单词的大小(取决于哪种类型您选择的编码。如果您选择OneHotEncoding,则为199)。
您收到的错误表明您为网络序列提供了 21 个时间步,而不是 15 个。
对于第二个问题,当 return_sequences 设置为 False 时,每个 LSTM 层仅返回一个输出,在您的情况下,第一个 LSTM 层的输出将为 (256, )。当它设置为 True 时,每个时间步将有一个输出,为您提供形状为 (15 , 256) 的整体输出。当您想要堆叠两个或多个 LSTM 层时,您始终必须将第一层设置为 return_sequences = True。
此外,您正在构建的架构称为多对多架构,输入和输出具有不同的时间步长度(15 与 21)。据我所知,在keras中实现起来并不是那么容易。
关于machine-learning - 使用 keras 的 RNN 编码器解码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49815672/