How to feed multi head tensorflow model with tf.data.dataset

问题描述 投票:0回答:1

我第一次使用 tf.data.dataset 来提供模型。我看了一些例子,但没有找到如何在 2 头模型上使用多输入。

我的第一个输入是 shape[nb_samples, nb_timesteps, nb_features] 以喂养 LSTM 第一个头部。 我的第二个输入是 shape[nb_samples, nb_features] 来喂养密集的第二个头。 输出是一个包含 8 个值的序列 例如:

input_1 = [14000, 10, 5]
input_2 = [14000, 6]
output = [14000, 8]

现在如何将我的 numpy 输入转换为数据集并将其传递给模型

input_1 = tf.data.Dataset.from_tensor_slices((X))
input_2= tf.data.Dataset.from_tensor_slices((Xphysio))
output = tf.data.Dataset.from_tensor_slices((y))
combined_dataset = tf.data.Dataset.zip(((inputs_hydro, inputs_static), output))

history = model.fit(combined_dataset)

但在这个阶段,我必须如何“拆分”我的输入以将其定向到好的头部模型? 这是模型的一个简单示例,以及我如何在其中引导输入...

tensor_input1 = Input(shape=(10, 5))
tensor_input2 = Input(shape=(6, ))

x = LSTM(100, return_sequences=False)(tensor_input1)
x = Dropout(rate = params['dropout1'])(x)
x = Dense(50)(x)
merge = concatenate([x, tensor_input2])
x = Dense(50)(merge)
x = Dropout(rate = params['dropout1'])(x)
output = Dense(8)(x)

model = Model(inputs=[tensor_input1, tensor_input2], outputs=output)

如果我理解,在使用 tf.data.dataset 时不需要指定输入的形状,如 Input(shape[.....]).

感谢您的帮助,如果我的英语不是最好的,对不起,我也在努力

tensorflow lstm keras-layer tf.data.dataset
1个回答
0
投票

完整的解决方案大概如下

import tensorflow as tf
import numpy as np

input_1 = tf.data.Dataset.from_tensor_slices(np.random.normal(size=[14, 10, 5]).astype(np.float32))
input_2= tf.data.Dataset.from_tensor_slices(np.random.normal(size=[14, 6]).astype(np.float32))
output = tf.data.Dataset.from_tensor_slices(np.random.normal(size=[14, 8]).astype(np.float32))
combined_dataset = tf.data.Dataset.zip(((input_1, input_2), output))
input_dataset = combined_dataset.batch(2)

tensor_input1 = tf.keras.Input(shape=(10, 5))
tensor_input2 = tf.keras.Input(shape=(6,))
x = tf.keras.layers.LSTM(100, return_sequences=False)(tensor_input1)
x = tf.keras.layers.Dropout(rate=0.1)(x)
x = tf.keras.layers.Dense(50)(x)
merge = tf.keras.layers.Concatenate(axis=1)([x, tensor_input2])
x = tf.keras.layers.Dense(50)(merge)
x = tf.keras.layers.Dropout(rate=0.1)(x)
output = tf.keras.layers.Dense(8)(x)
model = tf.keras.Model(inputs=[tensor_input1, tensor_input2], outputs=output)
model.compile(loss="mse")

history = model.fit(input_dataset)
# 7/7 [==============================] - 2s 6ms/step - loss: 1.6438
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.