如何解决5000纪元LSTM之后,学习量大增
我正在努力优化LSTM NN,让我解释一下我想做的事情:)
->我有一个数据集,可以说自2015年以来我所在位置的每日温度。
->我想根据最近30天的气温来预测明天的气温。
所以基本上我所做的是一个31列和2k行的熊猫表。 每行代表31天内的温度
[[18.5,19.6,15.2,16.3 ... 12.4,13.2]
[19.6,16.3,12.6 ... 13.2,15.5]
[......]]
然后我创建了相同的表,但是每天的温度与前一天相比以%为单位
然后我将表的前30行隔离为输入,将最后一行隔离为结果。 因此,我尝试根据过去几天的%变化来预测明天的温度%变化。
所以我写了这段代码:
import pandas as pd
import tensorflow as tf
from tensorflow.keras import layers
import numpy as np
import matplotlib.pyplot as plt
def visualize_training_results(results):
history = results.history
plt.figure(figsize=(12,4))
plt.plot(history['loss'])
plt.title('Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.show()
data_delta = [] data_base = pd.read_csv('data.csv')
length_data_base = len(data_base) for i in range(1,(length_data_base
- 1)):
data_delta.append(round(((data_base.iloc[(i),5]) - (data_base.iloc[(i - 1),5])) / (data_base.iloc[(i - 1),5]) * 100,4))
training_set = pd.DataFrame([],columns= ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','outputs'])
for j in range(31,(length_data_base - 1)):
data_train = pd.Series(data_delta[j - 31:j],index = training_set.columns)
training_set = training_set.append(data_train,ignore_index = True)
training_data = training_set.drop(training_set.columns[[30]],axis='columns') training_labels = training_set.pop('outputs')
training_data_model = np.array(training_data) training_labels_model = np.array(training_labels)
training_data_model = training_data_model.reshape(len(training_data_model),30,1)
data_model = tf.keras.Sequential([
layers.LSTM(30,return_sequences=True,activation= 'relu',input_shape=(30,1)),layers.Dense(12,activation= 'relu'),layers.LSTM(10,layers.Dense(1) ])
data_model.compile(loss = tf.losses.MeanSquaredError(),optimizer = tf.optimizers.Adam()) data_model.summary()
results = data_model.fit(training_data_model,training_labels_model,batch_size = 300,epochs=10000)
visualize_training_results(results)
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm (LSTM) (None,30) 3840
_________________________________________________________________
dense (Dense) (None,12) 372
_________________________________________________________________
dense_1 (Dense) (None,12) 156
_________________________________________________________________
lstm_1 (LSTM) (None,10) 920
_________________________________________________________________
dense_2 (Dense) (None,1) 11
=================================================================
Total params: 5,299
Trainable params: 5,299
Non-trainable params: 0
起初效果很好,但是在5000个时期之后,我出现了一个巨大的峰值,并且再也没有回到低损失水平。
这是我的失落与时代的照片
我的数据集中的%范围从-37到+42,许多值都在0左右,我试图对其进行归一化,但是使用minmaxscaler会使我的数据失去很多粒度,我希望能够预测即使大多数情况下变化仅为0-3%,也可以增加40%。
我在这里做错了什么? NN的体系结构对我正在尝试做的事情有好处吗?我应该设置其他学习率吗?
PS:我是一个初学者,所以我可能做错了很多东西:D。
提前谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。