使用keras的RNN编码器解码器

时间:2018-04-13 11:12:19

标签: machine-learning neural-network deep-learning keras recurrent-neural-network

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

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具有形状(无,15,1)但是具有形状的数组(137861,21,1)

我对keras中对LSTM的理解感到困惑。

1.根据文档的第一个论点必须是输出空间的维度'。我不明白这意味着什么。此外,

  1. 究竟发生了什么return_sequences设置为True
  2. 请告诉我。

1 个答案:

答案 0 :(得分:1)

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

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

在你的情况下,样本对应于句子的数字,我猜137861.时间步长对应于每个序列的长度,在你的情况下是15,并且feature是每个编码单词的大小(取决于哪种类型)您选择的编码。如果您选择OneHotEncoding,它将是199)。

您收到的错误表明您的网络序列是21次而不是15次。

对于第二个问题,当return_sequences设置为False时,它只返回每个LSTM图层的一个输出,在您的情况下,对于您的第一个LSTM图层将为(256)。当它设置为True时,每个时间步将有一个输出,给你一个整体形状输出(15,256)。如果要堆叠两个或更多LSTM图层,则必须将第一个图层设置为return_sequences = True。

此外,您正在构建的内容称为多对多体系结构,输入和输出的时间步长不同(15 vs 21)。据我所知,在keras中实施并不容易。