如何解决LSTM的损失从一个低值开始,然后逐渐减小直到停止
我有一个双向LSTM模型,该模型将文本的单词作为输入,经过一个嵌入层,一个双向LSTM层,最后经过具有4个单元和softmax激活的密集层。该模型的目的是预测单词是否是一个实体以及它是什么类型的实体。
在训练过程中,该模型以较低的验证和训练损失(≈0.01)开始,并逐渐减小直至停滞。数据集中的文本的字长可能会有所不同,因此我决定将小于2048的示例填充到该值。超过2048个单词(小于数据集的1%)的单词被拆分为两个或多个文本,最后的填充被填充,直到它包含2048个单词。我决定使用2048作为最大大小,因为我想避免拆分示例,而使用2048只会拆分少于1%的数据。
我正在使用4个回调函数(每个类一个)作为度量标准,尽管它们一开始并没有给出糟糕的结果(最差的一个函数目前为其中一个类给出了75%),但它们没有随着时间的推移而改善。我的猜测是,这是一个消失的梯度问题,因为序列长度非常大,但我不确定。我将使用size = 1024的输入再试一次。我认为这里的数据集大小不是问题,因为我正在使用的训练数据集有大约500k的示例,而验证数据集有50k的示例。如果还有其他需要补充的内容,请告诉我,我会尽快处理。
我的模型摘要:
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None,2048)] 0
_________________________________________________________________
embedding (Embedding) (None,2048,300) 15145800
_________________________________________________________________
bidirectional (Bidirectional (None,256) 439296
_________________________________________________________________
dropout (Dropout) (None,256) 0
_________________________________________________________________
dense (Dense) (None,4) 1028
=================================================================
Total params: 15,586,124
Trainable params: 440,324
Non-trainable params: 15,145,800
解决方法
是的,将输入大小减小一半确实有助于获得更好的结果。但这还不够,我还必须添加一个新的双向LSTM层并将这两个层中的单元数加倍(256到512)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。