提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在使用Tensorflow框架进行时间序列预测时遇到了模型输入尺寸以及batch_size相关的设置问题和LSTM网络中return_sequence的设置
一、问题描述
搭建一个简单的Dense+LSTM的时间序列预测模型,模型的输入是想用七天的历史数据对于未来一天的历史数据进行预测,其中时间间隔是15min。
因为我们想要借助的是LSTM的时间推理能力,所以我们的一个样本就是7*96 而不是1*672,对于tensorflow来说,模型的输入应该是(None,7,96),输出应该是(None,1,96),其中None指的是每次训练样本输入的批大小,由于本文使用的是tf.data.Dataset构建数据库,这与之前版本的TF并不一样。
在本次实验中,遇到两个问题:
1. 训练时batch_size的设置问题,即mode.fit()函数设置失效
2. LSTM层中的return_sequences设置问题
二、模型准备
2.1 数据集准备
本文使用tf.data.Dataset构造数据集,而非使用传统的Numpy构造数据集,事实上tf.data.Dataset也是目前Tensorflow所推荐的方式。
dataset = tf.data.Dataset.from_tensor_slices((inputDataset,labelDataset))
这里不多赘述,其中inputDataset,labelDataset分别是输入和输出,格式都是Numpy,尺寸分别为(702, 7, 96)和(702, 1, 96), 其中702是样本数。
构造出来的dataset如下
<_TensorSliceDataset element_spec=(TensorSpec(shape=(7, 96), dtype=tf.float64, name=None), TensorSpec(shape=(1, 96), dtype=tf.float64, name=None))>
2.2 模型构建
model = tf.keras.models.Sequential()
model.add(Dense(units=48,activation='tanh',input_shape=(7,96,)))
model.add(LSTM(48,return_sequences=False))
model.add(Dense(96,activation='tanh'))
model.compile(loss='mae', optimizer='adam')
这里就是一个很简单的Dense + LSTM + Dense的结构,注意LSTM的输入必须三维的,其中第一维是batch_size,第二维我个人理解是时间步长,因为我用七天的数据,步长为一天,所以在这里就是7,第三维是你每一个时间步的输入,也就是96(当然由于前面用了一个Dense层进行降维,所以设置为48)。
三、问题一:batch_size问题
由于我之前用的tensorflow v1版本,所以当时采用的模型构建方式是model.fit(),并且数据集也是自己构建的Numpy格式,并没用使用Dataset格式。
代码如下:
model.fit(trainX, trainY, epochs=20, batch_size=50)
</

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



