基于 "multi-input" 创建张量流数据集
Create a tensorflow dataset based on a "multi-input"
问题
从包含多个 X
数组的 numpy 数组创建一个 tf.data.Dataset
对象。
说明
这是我正在使用的模型,为了缩小图像而删除了一些层:
如您所见,该模型包含两个不同的输入:
- 数据本身(形状 [Batch, 730, 1])(从现在起称为
x_train
)
- 时间戳(形状 [Batch, 730, 3])(从现在起称为
ts_train
)
我要解决的问题是时间序列预测。
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)
问题
从包含多个 X
数组的 numpy 数组创建一个 tf.data.Dataset
对象。
说明
这是我正在使用的模型,为了缩小图像而删除了一些层:
如您所见,该模型包含两个不同的输入:
- 数据本身(形状 [Batch, 730, 1])(从现在起称为
x_train
) - 时间戳(形状 [Batch, 730, 3])(从现在起称为
ts_train
)
我要解决的问题是时间序列预测。
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)