200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Keras——用Keras搭建RNN回归循环神经网络

Keras——用Keras搭建RNN回归循环神经网络

时间:2020-07-13 18:30:10

相关推荐

Keras——用Keras搭建RNN回归循环神经网络

文章目录

1.前言2.用Keras搭建RNN回归循环神经网络2.1.导入必要模块2.2.超参数设置2.3.构造数据2.4.搭建模型2.5.激活模型2.6.训练+测试

1.前言

这次我们用循环神经网络(RNN, Recurrent Neural Networks)进行回归(Regression),主要用到LSTM RNN层。

2.用Keras搭建RNN回归循环神经网络

2.1.导入必要模块

import numpy as npimport matplotlib.pyplot as pltfrom keras.models import Sequentialfrom keras.layers import LSTM, TimeDistributed, Densefrom keras.optimizers import Adam #优化器np.random.seed(42)

2.2.超参数设置

BATCH_START = 0TIME_STEPS = 20 #序列步长为20BATCH_SIZE = 50 #每次训练的BATCH_SIZE为50INPUT_SIZE = 1#输入维度OUTPUT_SIZE = 1 #输出维度CELL_SIZE = 20#LSTM输出维度LR = 0.001 #学习率

2.3.构造数据

我们使用RNN来求解回归(Regression)问题. 首先生成序列sin(x),对应输出数据为cos(x),设置序列步长为20,每次训练的BATCH_SIZE为50

def get_batch():global BATCH_START, TIME_STEPSxs = np.arange(BATCH_START,BATCH_START+TIME_STEPS*BATCH_SIZE).reshape((BATCH_SIZE,TIME_STEPS)) / (10*np.pi)seq = np.sin(xs)res = np.cos(xs)BATCH_START += TIME_STEPS#plt.plot(xs[0, :], res[0, :], 'r', xs[0, :], seq[0, :], 'b--')#plt.show()return [seq[:,:,np.newaxis],res[:,:,np.newaxis],xs]

2.4.搭建模型

然后添加LSTM RNN层,输入为训练数据,输出数据大小由CELL_SIZE定义。因为每一个输入都对应一个输出,所以return_sequences=True。 每一个点的当前输出都受前面所有输出的影响,BATCH之间的参数也需要记忆,故stateful=True

最后添加输出层,LSTM层的每一步都有输出,使用TimeDistributed函数。

model = Sequential() #用于一层一层搭建网络model.add(LSTM( #添加LSTM RNN层batch_input_shape = (BATCH_SIZE,TIME_STEPS,INPUT_SIZE),output_dim = CELL_SIZE,#输出数据大小return_sequences = True, #每一个输入都对应一个输出,所以return_sequences=Truestateful = True #每一个点的当前输出都受前面所有输出的影响,BATCH之间的参数也需要记忆,故stateful=True))model.add(TimeDistributed(Dense(OUTPUT_SIZE)))#LSTM层的每一步都有输出,使用TimeDistributed函数adam = Adam(LR)

2.5.激活模型

pile(optimizer=adam,loss = 'mse')

2.6.训练+测试

print('Training...............')for step in range(1000):X_batch, Y_batch, xs = get_batch()cost = model.train_on_batch(X_batch,Y_batch)pred = model.predict(X_batch,BATCH_SIZE)plt.plot(xs[0,:],Y_batch[0].flatten(),'r+',xs[0,:],pred.flatten()[:TIME_STEPS],'b--')plt.ylim(-1.2,1.2)plt.draw()plt.pause(0.1)if step%50==0:print('train cost:',cost)

设置优化方法,loss函数和metrics方法之后就可以开始训练了。 训练1000次,调用matplotlib函数采用动画的方式输出结果。

拟合图:

打印loss:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。