How do you write an input layer with Tensorflow's Functional API that expects a Dataset object?


I am trying to create an Input Layer using tf.keras.Input using the type_spec argument to specify an input of DatasetSpec using Tensorflow’s Functional API so that I can iterate over it later. If I try to define an input layer by specifying shape, I get error messages complaining that iterating over tf.tensor is not allowed.

X = np.random.uniform(size=(1000,75))
Y = np.random.uniform(size=(1000))

data =, Y))
data = data.batch(batch_size=100, drop_remainder=True)

input = tf.keras.Input(type_spec =

I got the following error:
ValueError: KerasTensor only supports TypeSpecs that have a shape field; got DatasetSpec, which does not have a shape.


The data object (output of is the tuple of two item (X and Y). In order to create specification layer (keras.Input) with, you need to get the shape of first element.

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

Here is a dummy model with your approach,

# element_spec[0] <- shape of the first element.
input = tf.keras.Input(
    type_spec =[0]
output = tf.keras.layers.Dense(1)(input)
model = tf.keras.Model(input, output)
model.compile(loss='mse'), 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

Answered By – M.Innat

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published