keras搭建多层LSTM时间序列预测模型

参考基于 Keras 的 LSTM 时间序列分析——以苹果股价预测为例

######################导入库##########################import osos.environ['KERAS_BACKEND']='tensorflow'import kerasimport tensorflow as tffrom keras import optimizers#优化器from keras.models import Sequential, load_modelfrom keras.layers import Dense, LSTMfrom keras.layers import Dropout

1层LSTM

def lstm_single(x,y,hidden_cell,epoch,batch_size,verbose):    #verbose=0不显示训练进度,verbose=2显示训练进度和每个epoch所需时间    model = Sequential()    model.add(LSTM(hidden_cell, input_shape=(x.shape[1],1)))    model.add(Dense(1))    adam=optimizers.Adam(learning_rate=0.01)    model.compile(loss='mean_squared_error', optimizer=adam)    model.fit(x,y, epochs=epoch, batch_size=batch_size, verbose=verbose)    #loss=model.history.history['loss']#记录模型模型的损失函数值    return model

4层LSTM

def lstm_4layer(x,y,hidden_cell,epoch,batch_size,verbose):model = Sequential()model.add(LSTM(units=hidden_cell,return_sequences=True,input_shape=(x.shape[1], 1)))model.add(Dropout(0.2))#可有可无,model.add(LSTM(units=hidden_cell,return_sequences=True))model.add(Dropout(0.2))model.add(LSTM(units=hidden_cell,return_sequences=True))model.add(Dropout(0.2))model.add(LSTM(units=hidden_cell))model.add(Dropout(0.2))model.add(Dense(units=1))adam=optimizers.Adam(learning_rate=0.01)model.compile(loss='mean_squared_error', optimizer=adam)#上面两行可以用下面这行代替,但是下面这行不能修改学习率#model.compile(optimizer='adam',loss='mean_squared_error')model.fit(x,y,epochs=epoch,batch_size=batch_size,verbose=verbose)return model

参数初始化

'''变量初始化'''import numpy as npx_train=np.random.random(size=(300,5,1))y_train=np.random.random(300)x_test=np.random.random(size=(100,5,1))y_test=np.random.random(100)hidden_cell,epoch,batch_size,verbose=5,100,1,0#hidden_cell是隐层节点数,epoch是最大训练次数,batch_size我说不清,只知batch_size越大训练越快,但是精度下降,verbose=0不会显示训练过程,=1或者=2会显示训练过程batch_size和verbose有默认值

模型训练

x=x_train;y=y_trainhidden_cell,epoch,batch_size,verbose=5,100,1,0model=lstm_4layer((x,y,hidden_cell,epoch,batch_size,verbose))

绘制模型训练过程损失值变化情况

plt.plot(model.history.history['loss'])plt.xlabel('epochs')plt.ylabel('loss')

使用训练好的模型预测

ypre=model.predict(x_test,y_test)

来源:https://www.icode9.com/content-4-799051.html

(0)

相关推荐