为 LSTM 的 keras 时间序列生成器添加功能

Posted

技术标签:

【中文标题】为 LSTM 的 keras 时间序列生成器添加功能【英文标题】:Add features to keras time series generator for LSTM 【发布时间】:2020-05-13 04:32:02 【问题描述】:

我正在 Keras 中处理时间序列(这是我人生中的第一次)。我找到了一个有用的 Keras 工具来处理时间序列,timeseriesgenerator。我正在尝试预测以单位和金钱(2 个输出)销售的数量。我想添加一些其他功能。代码如下:

from numpy import array

from numpy import hstack

from keras.preprocessing.sequence import TimeseriesGenerator

# define dataset

in_seq1 = array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])

in_seq2 = array([15, 25, 35, 45, 55, 65, 75, 85, 95, 105])

# reshape series

in_seq1 = in_seq1.reshape((len(in_seq1), 1))

in_seq2 = in_seq2.reshape((len(in_seq2), 1))

# horizontally stack columns

dataset = hstack((in_seq1, in_seq2))

print(dataset)

# define generator

n_input = 2

generator = TimeseriesGenerator(dataset, dataset, length=n_input, batch_size=1)

# number of samples

print('Samples: %d' % len(generator))

# print each sample

for i in range(len(generator)):

    x, y = generator[i]

    print('%s => %s' % (x, y))

2 inupt 数组以单位出售并以货币出售。我的数据集上还有其他必须使用的功能:is_promo,一个布尔变量,表示产品是否处于促销中。 我的想法是在我预测的那一天加入这个功能,看看添加或不推广产品之间的区别。 请帮忙,谢谢

【问题讨论】:

【参考方案1】:

您需要添加另一个输入序列in_seq3,用于定义促销活动是否有效。我只是将它编码为 0 和 1 的列表,其中 0 表示没有促销,1 表示有促销。所以只需添加:

in_seq3 = array([0,1,0,1,1,1,0,1,1,0]) #Example data

改为使用

dataset = hstack((in_seq1, in_seq2, in_seq3))

最后,使用

generator = TimeseriesGenerator(dataset, dataset[:, :2], length=n_input, batch_size=1)

[:, :2] 确保您的输出不会不必要地包含促销字段。)

既然您已经重塑了数据并为训练模型做好了准备,那么您需要实际训练一个模型。为此,网上有很多教程。祝你好运!

【讨论】:

以上是关于为 LSTM 的 keras 时间序列生成器添加功能的主要内容,如果未能解决你的问题,请参考以下文章

Keras LSTM 模型过拟合

使用 Keras,如何将 CuDNNLSTM 生成的权重加载到 LSTM 模型中?

Keras - 向 LSTM 模型添加注意机制 [重复]

Keras:将MDN层添加到LSTM网络

在 Keras 中为 LSTM 重塑批次

将 Pytorch LSTM 的状态参数转换为 Keras LSTM