使用keras+lstm网络来训练一个情感分析模型,但是loss到0.4,acc到78%以后就不变了
模型
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你可以试试带momentum的SGD优化器,重新训练。 Adam收敛较快,但有时会无法达到最优的收敛结果,可以参考这篇博文。
本人之前同样遇到过类似问题,使用SGD重新训练, 最后得到了更好的收敛结果。
希望对你有帮助。