tensorflow - 用于时间序列预测的编码器解码器
问题描述
我想从 55 天的训练规模预测 7 天。我尝试应用此处和此处给出的模型,但我将所有 7 天的输出值都设为 1。
我也对如何将时间序列作为编码器解码器的输入及其代码感到困惑,我根据自己的理解进行了尝试。
model.add(LSTM(150, input_shape=(None, 1)))
model.add(RepeatVector(8))
model.add(LSTM(150, return_sequences=True))
model.add(TimeDistributed(Dense(1, activation='softmax')))
model.compile(loss='mse', optimizer='adam')
for i in range(7):
x=df[i*7:(i+1)*7]
y=df[(i+1)*7:(i+2)*7]
x=np.array(x)
x=np.insert(x,0,len(x))
x=x.reshape(1,len(x),1)
y=np.array(y)
y=np.insert(y,0,len(y))
y=y.reshape(1,len(y),1)
model.fit(x, y, epochs=1, verbose=2)
训练后,我从整个火车序列中预测 7 天。
第二我从链接2尝试
#functions define_models and predict_sequence same as link
for i in range(0,47):
x1=df[i:i+7]
print(len(x1))
x2=df[i+1:i+8]
print(len(x2))
y=df[i+1:i+8]
x1=np.array(x1)
x1=np.insert(x1,0,len(x1))
print(len(x1))
x1=x1.reshape(len(x1),1,1)
x2=np.array(x2)
x2=np.insert(x2,0,0)
print(len(x2))
x2=x2.reshape(len(x2),1,1)
y=np.array(y)
y=np.insert(y,0,len(y))
y=y.reshape(len(y),1,1)
model.fit([x1,x2],y,epochs=1)
这也给出了 1 的输出。我不知道 x2 应该是什么。
请纠正我哪里错了。
解决方案
第一个问题是,要训练深度网络,您应该执行以下步骤:
- 创建一个清晰的数据集。“清晰的数据集”是指
tf.Dataset
对象的一个实例。要创建tf.Dataset
您的实例,应首先将数据集组织在具有形状(最大序列长度、批量大小、每条记录的大小)的 NumPy 数组中。在您的情况下,X
包含训练数据的数组的大小应该是 (7, 1, 1),Y
包含训练数据标签的数组应该是 (7,1)。 - 按照说明的格式组织好数据后,就可以创建一个
tf.Dataset
使用函数的实例了tf.Dataset.from_tensor_slices()
- 您应该使用
model.fit()
创建的tf.Dataset
实例并指定大于 1 的合适时期数来使用该函数。该参数指定网络应在要训练的数据集上迭代的次数。此参数的值在某种程度上是任意的,但是,您应该尝试不同的值以达到最适合您的问题的值。
请注意,使用此过程您不再需要创建 for 循环。循环将在model.fit
函数内部执行。
有关如何在 TensorFlow 中实现和训练编码器-解码器模型的更多信息,请查看神经机器翻译的官方示例。
推荐阅读
- ios - 在 UITableViewCell XCTest 中测试单元格
- javascript - 在 React/Javascript 中显示基于 array/json 对象的可折叠文件夹/文件树结构
- ios - 配对设备锁定时如何处理Apple Watch中的本地推送通知?
- javascript - 使用 geojson 文件搜索的传单标记
- excel - 如何使用 Excel 公式合并具有相同列名的文本?
- google-apps-script - Google 应用脚本属性服务 | 安全和财产寿命
- ruby - 滚动到无法在 selenium webdriver 上工作的视图 - Ruby + watir-webdriver 用于自动化
- flask - 当某些微服务出现故障时,重新加载时有机会更改IP地址..那么,如何设置每个微服务的IP和端口?
- react-native - 如何在不中断其余代码的情况下在 react-native 中制作分钟间隔计时器
- sql - 从 SQL Server 中的多个打卡或多个打卡中获取打卡和打卡时间