如何使用Tensorflow的函数式API编写需要数据集对象的输入层?



我正在尝试使用tf.keras.Input创建一个输入层,使用type_spec参数来指定使用Tensorflow的Functional API的DatasetSpec输入,以便以后可以对其进行迭代。如果我试图通过指定形状来定义输入层,我会收到错误消息,抱怨不允许在tf.tensor上迭代。

X = np.random.uniform(size=(1000,75))
Y = np.random.uniform(size=(1000))
data = tf.data.Dataset.from_tensor_slices((X, Y))
data = data.batch(batch_size=100, drop_remainder=True)

input = tf.keras.Input(type_spec = tf.data.DatasetSpec.from_value(data))

我得到以下错误:ValueError: KerasTensor only supports TypeSpecs that have a shape field; got DatasetSpec, which does not have a shape.

data对象(tf.data的输出(是两个项(XY(的元组。为了用tf.data.DatasetSpec.from_value(data)创建规范层(keras.Input(,您需要获得第一个元素的形状。

tf.data.DatasetSpec.from_value(data)
DatasetSpec((TensorSpec(shape=(100, 75), dtype=tf.float64, name=None),
TensorSpec(shape=(100,), dtype=tf.float64, name=None)), TensorShape([]))

这是一个你的方法的伪模型,

# element_spec[0] <- shape of the first element.
input = tf.keras.Input(
type_spec = tf.data.DatasetSpec.from_value(data).element_spec[0]
)
output = tf.keras.layers.Dense(1)(input)
model = tf.keras.Model(input, output)
model.compile(loss='mse')
model.fit(data, epochs=3)
Epoch 1/3
10/10 [==============================] - 0s 2ms/step - loss: 0.2506
Epoch 2/3
10/10 [==============================] - 0s 2ms/step - loss: 0.2441
Epoch 3/3
10/10 [==============================] - 0s 2ms/step - loss: 0.2378

最新更新