2017-06-16 39 views
4

我是在Keras RNN结构中实现语言模型的新手。我有具有以下统计离散的话(而不是从一个段落)的数据集,了解Keras中的字符级嵌入LSTM

  1. 总字样本:1953
  2. 明显不同的字符的总数:33(包括开始,结束和*)
  3. 一句话
  4. 最大长度(字符数)为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结束* * * * *(9个字符)

因此,与TimeDistributed输出我测量网络预测和目标的差异。我也将batch_size设置为1.因此,在读取每个样本字后,网络重置其状态。

我的问题是我在做概念上的权利?每当我运行我的训练时,准确度都会停留在56%左右。

请赐教。谢谢。

回答

4

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

  1. TimeDistributed层,你应该添加一个启动 功能softmax这是在multi-classification广泛使用。 现在在你的结构中,输出不受限制,它不直观,因为你的目标只是一个热点。

  2. 随着softmax功能,你可以改变损失 cross-entropy这增加了正确的类的概率和 降低等。这是更合适的。

你可以试试看。对于更有用的模型,您可以尝试遵循Pytorch tutorial中给出的结构。谢谢。

enter image description here

+0

谢谢danche您的快速回复。我曾使用CCE但错过了softmax。也会尝试pytorch教程。 –