You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

搭建IDS入侵检测LSTM模型时多轮训练准确率无变化如何解决?

问题核心原因
  • 输出层激活函数选择错误:二分类任务的单神经元输出层使用softmax激活是完全错误的,softmax会对所有输出做归一化使总和为1,单神经元场景下输出永远固定为1,模型完全无法输出有效概率值,没有学习能力。
  • 损失函数与任务不匹配:二分类任务使用回归任务常用的MSE(均方误差)作为损失函数,MSE在分类场景下梯度更新效率极低,甚至会出现梯度消失的情况,无法有效引导模型参数更新。
  • 未做输入数据标准化/归一化:代码中没有对输入特征做标准化处理,不同维度特征数值范围差异过大,会导致LSTM层学习效率极低,收敛困难。
  • LSTM层激活函数容易引发梯度消失:LSTM层使用sigmoid作为激活函数,长序列场景下很容易出现梯度饱和,参数几乎得不到更新。
可行解决方案
  • 修正输出层配置:将输出层的softmax激活替换为sigmoid激活,适配二分类单神经元输出的概率输出需求。
  • 更换适配的损失函数:将损失函数从mse更换为二分类交叉熵binary_crossentropy,如果标签是one-hot编码可以用categorical_crossentropy,交叉熵损失更适配分类任务的梯度更新逻辑。
  • 增加输入数据预处理步骤:对输入特征做标准化(比如Z-score标准化)或者归一化(缩放到0-1区间),统一所有特征的数值范围,加快模型收敛速度。
  • 调整LSTM层配置:将LSTM层的激活函数更换为relu,同时可以适当增加Dropout层防止过拟合,比如在LSTM层后加Dropout(0.2)。
  • 调整优化器和学习率:可以更换为Adam优化器,同时设置更小的初始学习率比如1e-4,避免学习率过大导致参数更新震荡无法收敛。
  • 检查标签格式:确认标签y的格式是否符合二分类要求,是0/1的整数编码还是one-hot编码,和损失函数、输出层配置匹配。

参考修改后代码

# 新增数据标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
x = scaler.fit_transform(pd.DataFrame(X).values)
x_test = scaler.transform(pd.DataFrame(X_test).values)

# 重构3D输入
x_train = np.reshape(x,(x.shape[0],x.shape[1],1))
x_test = np.reshape(x_test,(x_test.shape[0],x_test.shape[1],1))

# 调整后的模型结构
Model = keras.Sequential([
        keras.layers.LSTM(80,input_shape=(x_train.shape[1],x_train.shape[2]),
                          activation='relu',recurrent_activation='hard_sigmoid'),
        keras.layers.Dropout(0.2),
        keras.layers.Dense(1,activation="sigmoid")
    ])

# 调整编译配置
Model.compile(optimizer=keras.optimizers.Adam(learning_rate=1e-4),
              loss='binary_crossentropy', 
              metrics=['accuracy'])

# 训练模型
Model.fit(x_train, y, epochs=10, batch_size= 32) 

内容的提问来源于stack exchange,提问作者Abdulmajeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:54:01