我的任务是根据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
我尝试将时间步长更改为其他值,但这总是会发生,我无所适从来解释这种现象。有人对此有想法/解决方案吗?谢谢
答案 0 :(得分:0)
答案是使用状态LSTM。它对我有用。