【发布时间】:2020-12-11 11:41:35
【问题描述】:
我正在考虑为时间序列 LSTM 模型创建管道。我有两个输入源,我们称它们为 series1 和 series2。
我通过调用from.tensor.slices来初始化tf.data对象:
ds = tf.data.Dataset.from_tensor_slices((series1, series2))
我将它们进一步批处理到设置窗口大小的窗口中并在窗口之间移动 1:
ds = ds.window(window_size + 1, shift=1, drop_remainder=True)
在这一点上,我想尝试一下它们是如何组合在一起的。我想产生一个像下面这样的输入作为例子:
series1 = [1, 2, 3, 4, 5]
series2 = [100, 200, 300, 400, 500]
batch 1: [1, 2, 100, 200]
batch 2: [2, 3, 200, 300]
batch 3: [3, 4, 300, 400]
所以每个批次将返回 series1 的两个元素,然后是 series2 的两个元素。这段代码 sn-p 不单独批处理它们:
ds = ds.map(lambda s1, s2: (s1.batch(window_size + 1), s2.batch(window_size + 1))
因为它返回两个数据集对象的映射。由于它们是对象,它们不可下标,所以这也不起作用:
ds = ds.map(lambda s1, s2: (s1[:2], s2[:2]))
我确信解决方案是使用 .apply 和自定义 lambda 函数。非常感谢任何帮助。
编辑
我也在考虑制作一个代表该系列下一个元素的标签。例如,批次将产生以下内容:
batch 1: (tf.tensor([1, 2, 100, 200]), tf.tensor([3]))
batch 2: (tf.tensor([2, 3, 200, 300]), tf.tensor([4]))
batch 3: (tf.tensor([3, 4, 300, 400]), tf.tensor([5]))
其中[3]、[4] 和[5] 表示要预测的series1 的下一个元素。
【问题讨论】:
标签: python tensorflow keras tensorflow2.0 tensorflow-datasets