Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Input 0 is incompatible with layer model_2

i have a generator rev_generator that yields a tuple of two elements (numpyarray of shape (1279,300,1) , int value: 0 or 1)

then i pass it to:

train_ds = tf.data.Dataset.from_generator(rev_generator,
                                      output_signature=(tf.TensorSpec(shape=(1279,300,1),dtype=tf.float32),
                                                       tf.TensorSpec(shape=(), dtype=tf.int32)))

and then a simple model

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

inputs=tf.keras.Input(shape=(1279,300,1,))
x=tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu')(inputs)
x=tf.keras.layers.MaxPooling2D()(x)
x=tf.keras.layers.Flatten()(x)
x=tf.keras.layers.Dense(64, activation='relu')(x)
outputs=tf.keras.layers.Dense(1, activation='relu')(x)
model = tf.keras.Model(inputs, outputs)
model.compile(...)

but when i call fit

model.fit(train_ds,epochs=epochs, batch_size=32)

it throws me an error:

ValueError: Input 0 is incompatible with layer model_2: expected shape=(None, 1279, 300, 1), found shape=(1279, 300, 1)

>Solution :

If you are using the tf.data.Dataset API, you should set the batch size explicitly and not in model.fit:

train_ds = train_ds.batch(32)
...
...
model.fit(train_ds,epochs=epochs)

See this:

Integer or None. Number of samples per gradient update. If
unspecified, batch_size will default to 32. Do not specify the
batch_size if your data is in the form of datasets, generators, or
keras.utils.Sequence instances (since they generate batches).

Also note that your input shape does not match your input data. You are mixing up 1279 and 1297. Here is a working example:

def gen():
  yield tf.random.normal((1279,300,1)), tf.random.uniform((), maxval=2, dtype=tf.int32)

train_ds = tf.data.Dataset.from_generator(gen,
                                      output_signature=(tf.TensorSpec(shape=(1279,300,1),dtype=tf.float32),
                                                       tf.TensorSpec(shape=(), dtype=tf.int32)))

inputs=tf.keras.Input(shape=(1279,300,1,))
x=tf.keras.layers.Conv2D(16, 3, padding='same', activation='relu')(inputs)
x=tf.keras.layers.MaxPooling2D()(x)
x=tf.keras.layers.Flatten()(x)
x=tf.keras.layers.Dense(64, activation='relu')(x)
outputs=tf.keras.layers.Dense(1, activation='relu')(x)
model = tf.keras.Model(inputs, outputs)
model.compile(optimizer='adam', loss='mse')
model.fit(train_ds.batch(32),epochs=5)
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading