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

使用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就不变了。
所以想请问一下各位大佬这是为啥呀。


回答:

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

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

以上是 使用keras+lstm网络来训练一个情感分析模型,但是loss到0.4,acc到78%以后就不变了 的全部内容, 来源链接: utcz.com/p/937829.html

回到顶部