使用keras的RNN编码器解码器

RNN Encoder Decoder using keras

我正在尝试构建一个将用于机器语言翻译(从英语到法语)的架构

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.The 根据文档,第一个参数必须是 'dimensionality of output space'。我不明白那是什么意思。另外,

  1. 到底发生了什么 return_sequences 设置为 True

请告诉我。

您要向您的网络提供什么样的数据?因为在我看来你没有将你的单词转换为向量(二进制向量或编码向量)。

无论如何,LSTM 网络需要一个 3 维条目,维度对应于:(样本、时间步长、特征)。

在你的例子中,样本对应于你的句子的数量,我猜是 137861。时间步长对应于每个序列的长度,在你的例子中是 15,特征是每个编码词的大小(取决于你选择哪种类型的编码。如果你选择OneHotEncoding,它将是199)。

您得到的错误表明您为网络序列提供了 21 个而不是 15 个时间步。

对于你的第二个问题,当 return_sequences 设置为 False 时,它​​ returns 每个 LSTM 层只有一个输出,在你的情况下,你的第一个 LSTM 层将是 (256, )。当它设置为 True 时,每个时间步将有一个输出,为您提供形状为 (15 , 256) 的整体输出。当你想堆叠两个或更多 LSTM 层时,你总是必须将第一层设置为 return_sequences = True.

此外,您正在构建的架构称为多对多架构,输入和输出的时间步长不同(15 对 21)。据我所知,在keras中实现起来并不容易。