我是Keras RNN结构中语言模型实现的新手。我有一个离散词的数据集(不是来自单个段落),它有以下统计数据,
现在,我想构建一个接受角色并预测单词中下一个角色的模型。我填写了所有单词,以便它们具有相同的长度。所以我的输入是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%左右。
请赐教。感谢。
答案 0 :(得分:5)
据我所知,结构是基本的,可能在某种程度上起作用。我有一些建议
在TimeDistributed
图层中,您应该添加激活
函数softmax
在multi-classification
中广泛使用。
而现在在你的结构中,输出是非限制性的,而不是
直观,因为你的目标只是一热。
使用softmax
功能,您可以将损失更改为
cross-entropy
这会增加正确课程的概率
减少其他人。它更合适。