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个时期之后,我出现了一个巨大的峰值,并且再也没有回到低损失水平。

这是我的失落与时代的照片

Spike after 5000 epoch

我的数据集中的%范围从-37到+42,许多值都在0左右,我试图对其进行归一化,但是使用minmaxscaler会使我的数据失去很多粒度,我希望能够预测即使大多数情况下变化仅为0-3%,也可以增加40%。

在这里做错了什么? NN的体系结构对我正在尝试做的事情有好处吗?我应该设置其他学习率吗?

PS:我是一个初学者,所以我可能做错了很多东西:D。

提前谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...