LSTM回归模型测试预测呈扁平线问题技术求助
电池SOC时间序列回归问题:LSTM模型未学习,预测结果呈均值扁平线
这是一个以电池容量(SOC)为输出、电压为单一输入变量的非线性时间序列回归问题。使用LSTM回归模型对测试数据进行预测时,结果始终呈半扁平线,疑似为训练数据中输出变量的均值。
测试集预测值与真实值对比(模型参数:窗口大小10、批量大小256、LSTM节点数16):
数据已做归一化处理,原采样率为10Hz,先后下采样至1秒和3秒。曾怀疑电压波动是问题根源,但3秒采样未带来明显改善。
下采样至3秒后的数据:

已尝试调整多种模型与学习参数,但问题依旧,因此判断并非参数调优问题,而是模型完全未学习。调整的参数包括:
- LSTM层:始终为单层,后接无额外配置的Dense层
- LSTM节点数:[4,8,16,32]
- 训练轮数(Epoch):[16,32,64,128]
- 窗口大小(输入向量深度):[8,32,64,128]
- 批量大小:[32,64,128,256]
- 学习率:[.0005,.0001,.001]
- 优化器:ADAM,可选配置:[无,clipnorm=1,clipvalue=0.5]
模型定义代码
backend.clear_session() model1 = Sequential() model1.add(LSTM(16,input_shape=(win_sz, features_cnt) )) # stateless model1.add(layers.Dense(1)) model1.summary()
模型训练与验证代码
n_epochs = 12 iterations = tr_samples_sh_cnt // batch_sz_tr loss = tf.keras.losses.MeanAbsoluteError() optimizer = tf.optimizers.Adam(learning_rate = 0.001) loss_history = [] @tf.function def train_model_on_batch(): start = epoch * batch_sz_tr X_batch = df_feat_tr_3D[start:start+batch_sz_tr, :, :] y_batch = df_SOC_tr_2D[start:start+batch_sz_tr, :] with tf.GradientTape() as tape: current_loss = loss(model1(X_batch), y_batch) gradients = tape.gradient(current_loss, model1.trainable_variables) optimizer.apply_gradients(zip(gradients, model1.trainable_variables)) return current_loss for epoch in range(n_epochs+1): for iteration in range(iterations): current_loss = train_model_on_batch() if epoch % 1 == 0: loss_history.append(current_loss.numpy()) print("{}. Loss: {}".format( epoch, loss_history[-1])) print('\nTraining complete.') P_test = model1.predict(df_feat_test_3D)
在LSTM层与Dense层均添加sigmoid激活函数后,预测结果仅有微小变化,但仍远未达到合理拟合效果。
内容的提问来源于stack exchange,提问作者Kineticx
相关产品推荐
相关产品推荐

