将两个张量流数据集合并为一个具有输入和标签的数据集

Merge two tensorflow datasets into one dataset with inputs and lables

我有两个使用 timeseries_dataset_from_array (docs) 生成的张量流数据集。一个对应于我的网络的输入,另一个对应于输出。我想我们可以称它们为 inputs 数据集和 targets 数据集,它们都是相同的形状(a 的时间序列 window固定大小)。

我用来生成这些数据集的代码是这样的:

train_x = timeseries_dataset_from_array(
    df_train['x'],
    None,
    sequence_length,
    sequence_stride=sequence_stride,
    batch_size=batch_size
)
train_y = timeseries_dataset_from_array(
    df_train['y'],
    None,
    sequence_length,
    sequence_stride=sequence_stride,
    batch_size=batch_size
)

问题是当调用 model.fit 时,tf.keras 期望如果在 x 参数中给出了 tf.data.Dataset,它必须同时提供 输入目标。这就是为什么我需要将这两个数据集合并为一个,将一个设置为 inputs,将另一个设置为 targets.

最简单的方法是使用 tf.data.Dataset.zip:

import tensorflow as tf
import numpy as np

X = np.arange(100)
Y = X*2

sample_length = 20
input_dataset = tf.keras.preprocessing.timeseries_dataset_from_array(
  X, None, sequence_length=sample_length, sequence_stride=sample_length)
target_dataset = tf.keras.preprocessing.timeseries_dataset_from_array(
  Y, None, sequence_length=sample_length, sequence_stride=sample_length)

dataset = tf.data.Dataset.zip((input_dataset, target_dataset))

for x, y in dataset:
  print(x.shape, y.shape)
(5, 20) (5, 20)

然后您可以 dataset 直接喂给您的模型。