lstm损失率问题求解

做了一个lstm模型,损失率下到一定位置就不下了是为什么,该如何进行修改

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/748529
  • 这篇博客你也可以参考下:异常监测②——lstm时间序列预测&lstm简易原理
  • 除此之外, 这篇博客: LSTM中的归一化与反归一化问题、预测未来值问题中的 构建LSTM模型,并编译运行 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 这里需要注意的是,LTSM的层数可以自行选择,但是应该注意的是除最后一层的LSTM的return_sequences应该为False外,其余LSTM层该参数都保持为True,否则会报错

    #构建LSTM模型,SEQ_LEN就是构造数据的时间序列
    model = Sequential([
      layers.LSTM(64,return_sequences=True,input_shape = (SEQ_LEN,1)),
      layers.LSTM(128,return_sequences=False),
      layers.Dense(1)
    ])
    
    #定义checkpoint,保存权重文件
    file_path = "td_15minmodel_02.hdf5"
    checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(filepath=file_path,
                                                          monitor = 'loss',
                                                          mode='min',
                                                          save_best_only=True,
                                                          save_weights_only=True)
    
    #模型编译
    from keras import optimizers
    model.compile(optimizer='adam',loss='mse')  
    
    #模型训练
    history = model.fit(train_batch_dataset,
                     epochs=10,validation_data=test_batch_dataset,
                     callbacks=[checkpoint_callback])
    
    #显示train loss和val loss
    plt.figure(figsize=(16,8))
    plt.plot(history.history['loss'],label='训练集误差')
    plt.plot(history.history['val_loss'],label='测试集误差')
    plt.tick_params(labelsize=18)
    font2 = {
           'weight': 'normal',
           'size': 18,
           }
    plt.xlabel('训练论数',font2)
    plt.ylabel('MAE误差', font2)
    plt.title("误差")
    plt.legend(loc='best')
    plt.show()