在固定的时间步长后,训练输出降至0,然后在LSTM模型中再次进行训练

时间:2020-08-08 17:42:01

标签: python tensorflow keras lstm

我的任务是根据4个输入来预测温度。在给定的数据中,温度非线性上升至一定极限,然后下降。它看起来类似于下图: Temperature trend

为了创建LSTM模型,我添加了3个数据文件,在0到1之间缩放数据,并考虑了200个时间步长对输入和输出数据进行了整形。对于输入数据,看起来如下

num1=int(len(X)/1000)
X=X[:num1*200].reshape(-1,200,4) """X is input data array of 4 columns"""

然后,我构建了一个LSTM模型,该模型具有3层(第一层20个神经元,第二层10个神经元和第三层5个神经元)+1个密集输出层。具有所有选项和回调,如下所示:

early_stop = EarlyStopping(monitor='loss',mode='min',verbose=1,restore_best_weights=True,patience=600)
def train_model(lrate=0.3e-4):
  model=Sequential()
  model.add(LSTM(20,name='LSTM_20',input_shape=(None,4),activation='relu',return_sequences=True))
  model.add(LSTM(10,name='LSTM_10',activation='relu',return_sequences=True))
  model.add(LSTM(5,name='LSTM_5',activation='relu',return_sequences=True))
  model.add(Dense(1,activation='linear'))
  opt=tf.keras.optimizers.Adam(lr=lrate)
  model.compile(loss='mse',optimizer=opt)
  logdir="C:\\Thesis\\logs"
  logdir =logdir+ datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
  tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir,histogram_freq=1)
  model.fit(X,Y,epochs=15000,batch_size=64,callbacks=[early_stop,tensorboard_callback],\
            verbose=1,validation_split=0.1)
  return model

为了灵活地更改学习率,我试图尽可能地训练模型,但是输出总是如下: Sample Output from model

仔细检查后,我在模型创建中提到的每200个时间步就会突然出现输出下降: Magnified model output

我尝试将时间步长更改为其他值,但这总是会发生,我无所适从来解释这种现象。有人对此有想法/解决方案吗?谢谢

1 个答案:

答案 0 :(得分:0)

答案是使用状态LSTM。它对我有用。

相关问题