machine-learning - 使用 keras 的 RNN 编码器解码器

标签 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 具有形状 (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/

    相关文章:

    python - Theano中的借用参数是什么

    python - 我如何在 DeepPavlov 分类器中获得概率?

    machine-learning - 使用 scikit 学习重建错误分析的快速 ICA

    machine-learning - 概率分布中的 argmax 比 softmax 中的随机采样更好的策略?

    machine-learning - cat 中的任意数据集检测 Google 的深度学习工作?

    python - TypeError : tuple indices must be integers or slices, 未列出 - 加载模型 Keras 时

    python - 如何在 numpy 中优化此函数的计算?

    python - 了解 Tensorflow LSTM 模型输入?

    python - 如何重用 Dense 层?

    python - dropout 中的 keep_prob 值以及通过 dropout 获得最差结果