了解 Keras LSTM 中的字符级嵌入
Understanding Character Level Embedding in Keras LSTM
我是在 Keras RNN 结构中实现语言模型的新手。我有一个包含以下统计数据的离散词数据集(不是来自单个段落),
- 单词样本总数:1953
- 不同字符总数:33(包括 START、END 和 *)
- 一个单词的最大长度(字符数)为 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 C A T END * * * *(9 个字符)
相同的目标 --- C A T END * * * * *(9 个字符)
因此,对于 TimeDistributed
输出,我正在测量网络预测和目标的差异。我还将 batch_size
设置为 1。这样在读取每个示例单词后,网络会重置其状态。
我的问题是我这样做在概念上是否正确?每当我 运行 时,我的训练准确率都停留在 56% 左右。
请赐教。谢谢
据我所知,该结构是基本结构,可能在一定程度上起作用。我有一些建议
在TimeDistributed
层,应该加一个activation
在 multi-classification
中广泛使用的函数 softmax
。
现在在你的结构中,输出是不受限制的,它不是
直观,因为您的目标只是一个热点。
用softmax
函数,你可以把loss改成
cross-entropy
这增加了正确的概率 class 和
减少其他。比较合适
你可以试试看。对于更有用的模型,您可以尝试遵循 Pytorch tutorial 中给出的结构。谢谢。
我是在 Keras RNN 结构中实现语言模型的新手。我有一个包含以下统计数据的离散词数据集(不是来自单个段落),
- 单词样本总数:1953
- 不同字符总数:33(包括 START、END 和 *)
- 一个单词的最大长度(字符数)为 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 C A T END * * * *(9 个字符)
相同的目标 --- C A T END * * * * *(9 个字符)
因此,对于 TimeDistributed
输出,我正在测量网络预测和目标的差异。我还将 batch_size
设置为 1。这样在读取每个示例单词后,网络会重置其状态。
我的问题是我这样做在概念上是否正确?每当我 运行 时,我的训练准确率都停留在 56% 左右。
请赐教。谢谢
据我所知,该结构是基本结构,可能在一定程度上起作用。我有一些建议
在
TimeDistributed
层,应该加一个activation 在multi-classification
中广泛使用的函数softmax
。 现在在你的结构中,输出是不受限制的,它不是 直观,因为您的目标只是一个热点。用
softmax
函数,你可以把loss改成cross-entropy
这增加了正确的概率 class 和 减少其他。比较合适
你可以试试看。对于更有用的模型,您可以尝试遵循 Pytorch tutorial 中给出的结构。谢谢。