5

我是在 Keras RNN 结构中实现语言模型的新手。我有一个离散单词的数据集(不是来自单个段落),它具有以下统计信息,

  1. 单词样本总数:1953
  2. 不同字符总数:33 个(包括 START、END 和 *)
  3. 一个单词的最大长度(字符数)为 10

现在,我想建立一个模型来接受一个字符并预测单词中的下一个字符。我已经填充了所有单词,使它们具有相同的长度。所以我的输入是 Word_input ,形状为1953 x 9,目标是1953 x 9 x 33。我也想使用嵌入层。所以我的网络架构是

    self.wordmodel=Sequential()
    self.wordmodel.add(Embedding(33,embedding_size,input_length=9))
    self.wordmodel.add(LSTM(128, return_sequences=True))
    self.wordmodel.add(TimeDistributed(Dense(33)))
    self.wordmodel.compile(loss='mse',optimizer='rmsprop',metrics=['accuracy'])

例如,带有填充的单词“CAT”表示

网络输入 -- START CAT END * * * * (9 个字符)

相同的目标 --- CAT END * * * * *(9 个字符)

因此,TimeDistributed我正在使用输出测量网络预测和目标的差异。我还将 设置batch_size为 1。因此,在读取每个示例单词后,网络会重置其状态。

我的问题是我在概念上做对了吗?每当我进行训练时,准确率都会停留在 56% 左右。

请赐教。谢谢。

4

1 回答 1

5

据我所知,该结构是基本的,可能在某种程度上起作用。我有一些建议

  1. 在该TimeDistributed层中,您应该添加一个softmaxmulti-classification. 现在在您的结构中,输出是无限的,而且它不直观,因为您的目标只是一个热点。

  2. 使用softmax函数,您可以将损失更改为 cross-entropy增加正确类别的概率并减少其他类别的概率。比较合适。

你可以试一试。对于更有用的模型,您可以尝试Pytorch 教程中给出的结构。谢谢。

在此处输入图像描述

于 2017-06-17T07:10:18.327 回答