使用keras+lstm网络来训练一个情感分析模型,但是loss到0.4,acc到78%以后就不变了

发布于 2022-09-12 02:40:37 字数 1291 浏览 39 评论 0

模型


word_lens = 150     # 最多200个词
word2index, word2vec = get_word_dict()
n_symbols = len(word2index) + 1  # 索引数字的个数,因为有的词语索引为0,所以+1
embedding_weights = np.zeros((n_symbols, 100))  # 创建一个n_symbols * 100的0矩阵
for w, index in word2index.items():  # 从索引为1的词语开始,用词向量填充矩阵
    embedding_weights[index, :] = word2vec[w]  # 词向量矩阵,第一行是0向量(没有索引为0的词语,未被填充)

X_train, X_test, y_train, y_test = train_test_split(*load_data(), test_size=0.2, random_state=44)


self._model = Sequential()
self._model.add(Embedding(output_dim=100,
                        input_dim=n_symbols,
                        mask_zero=True,
                        weights=[embedding_weights],
                        input_length=word_lens))
# dropout = 0.2, recurrent_dropout = 0.2,
self._model.add(LSTM(units=64, activation='sigmoid', recurrent_activation='hard_sigmoid'))
self._model.add(Dropout(0.5))
self._model.add(Dense(2, activation='sigmoid'))
optimizer = optimizers.Adam(lr=0.0002)
self._model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])

self._mode.fit(X_train, y_train, batch_size=64, epochs=30)

数据

数据的话,是3w负面,3w非负面。

只需要对数据进行二分类即可。

问题

刚开始的时候loss还一直下降,但是不管怎么调整到最后都是到loss=0.4x, acc=0.7x就不变了。
所以想请问一下各位大佬这是为啥呀。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谷夏 2022-09-19 02:40:37

你可以试试带momentum的SGD优化器,重新训练。 Adam收敛较快,但有时会无法达到最优的收敛结果,可以参考这篇博文

本人之前同样遇到过类似问题,使用SGD重新训练, 最后得到了更好的收敛结果。
希望对你有帮助。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文