最近尝试使用序列模型LSTM进行文本分类,数据集为入侵检测用的ADWA-LD数据集。
0x01 初始loss
最开始试运行模型时loss一直稳定为0.46,无论训练多少个epoch都不改变。下图为一开始使用的模型
def get_lstm_model(max_features, embed_size):
model = Sequential()
model.add(Embedding(max_features, embed_size))
model.add(Bidirectional(LSTM(32, recurrent_dropout=0.1)))
model.add(Dense(64)
model.add(Dense(7))
model.add(Activation('sigmond'))
model.summary()
adam = Adam(0.01)
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])
return model
1.检查网络后发现最后的激活层存在问题,由于是多分类问题,因此需要采用softmax作为激活层。
2.全连接层要指定激活函数,确保梯度问题
0x02 第二次改进
改进后的模型如下, 改进后模型的loss开始产生变化,但准确度在0.6左右
def get_lstm_model(max_features, embed_size):
model = Sequential()
model.add(E