我正在尝试构建一个用于机器语言翻译的架构(从英语到法语)
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.根据文档的第一个论点必须是输出空间的维度'。我不明白这意味着什么。此外,
return_sequences
设置为True 请告诉我。
答案 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中实施并不容易。