做了一个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()