簡體   English   中英

基於“多輸入”創建 tensorflow 數據集

[英]Create a tensorflow dataset based on a "multi-input"

問題

從包含多個X數組的 numpy 數組創建tf.data.Dataset object。

解釋

這是我正在使用的 model,為了縮小圖像而消除了一些層: 模型

如您所見,model 包含兩個不同的輸入:

  • 數據本身(形狀 [Batch, 730, 1])(現在稱為x_train
  • 時間戳(形狀 [Batch, 730, 3])(現在稱為ts_train

我要解決的問題是時間序列預測。
x_train包含一個特征。
ts_train包含三個特征,分別代表錯誤的年、月、日。

我可以毫無問題地擬合/評估/預測 model。
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)])

但是,我不明白如何將 rappresent 我的數據集的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,)

這是一個示例 model:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM