基于 "multi-input" 创建张量流数据集

Create a tensorflow dataset based on a "multi-input"

问题

从包含多个 X 数组的 numpy 数组创建一个 tf.data.Dataset 对象。

说明

这是我正在使用的模型,为了缩小图像而删除了一些层:

如您所见,该模型包含两个不同的输入:

我要解决的问题是时间序列预测。
x_train 包含一个功能。
ts_train 包含三个特征,表示错误的年、月、日。

我可以 fit/evaluate/predict 这个模型没有任何特别的问题。
fit 示例:

model.fit(
    [x_train, ts_train],
    y_train,
    batch_size=1024,
    epochs=2000,
    validation_data=([x_test, ts_test], y_test),
    callbacks=callbacks,
)

predict的例子:

model.predict([x_test[0].reshape(1, window, 1), ts_test[0].reshape(1, window, 3)])

但是,我无法理解如何将表示我的数据集的 numpy 数组转换为 tensorflow 数据集。

使用以下代码:

tf.data.Dataset.from_tensor_slices([x_train, ts_train], y_train)

我会收到以下错误:

ValueError: Can't convert non-rectangular Python sequence to Tensor.

如何将 2 x -> 1 y 转换为 tf.data.Dataset

也许尝试使用这样的元组:

import numpy as np
import tensorflow as tf

x_train = np.random.random((50, 730, 1))
ts_train = np.random.random((50, 730, 3))
y_train = np.random.random((50, 5))

ds = tf.data.Dataset.from_tensor_slices(((x_train, ts_train), y_train))

for (x, t), y in ds.take(1):
  print(x.shape, t.shape, y.shape)
(730, 1) (730, 3) (5,)

这是一个示例模型:

input1 = tf.keras.layers.Input((730, 1))
input2 = tf.keras.layers.Input((730, 3))
x = tf.keras.layers.Flatten()(input1)
y = tf.keras.layers.Flatten()(input2)
outputs = tf.keras.layers.Concatenate()([x, y])
outputs = tf.keras.layers.Dense(5)(outputs)
model = tf.keras.Model([input1, input2], outputs)
model.compile(optimizer='adam', loss='mse')
model.fit(ds.batch(10), epochs=5)