0

I was programming on CodeCademy and got stuck. I cant find the answer and the terminal is showing some strange stuff. The project is about classifing images of covid-19, Pneumonia and normal lungs. Hope you can help me.

Code:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.preprocessing.image import ImageDataGenerator

from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras import layers

import matplotlib.pyplot as plt
import app

training_generator = ImageDataGenerator(rescale = 1./255)
training_iterator = training_generator.flow_from_directory("augmented-data/train", class_mode='categorical',color_mode='grayscale', batch_size=5)

validation_generator = ImageDataGenerator(rescale = 1./255)
validation_iterator = validation_generator.flow_from_directory("augmented-data/test", class_mode='categorical',color_mode='grayscale', batch_size=5)

model = Sequential()
model.add(tf.keras.Input(shape=training_iterator.image_shape))
model.add(tf.keras.layers.Conv2D(8, 3, strides = 2, activation = "relu"))
model.add(tf.keras.layers.MaxPooling2D(pool_size = (2, 2), strides = (2, 2)))
model.add(tf.keras.layers.Conv2D(8, 3, strides = 2, activation = "relu"))
model.add(tf.keras.layers.MaxPooling2D(pool_size = (2, 2), strides = (2, 2)))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(16, activation = "relu"))
model.add(tf.keras.layers.Dense(4, activation = "relu"))


model.compile(optimizer = tf.keras.optimizers.Adam(learning_rate = 0.01), loss = tf.keras.losses.CategoricalCrossentropy(), metrics = [tf.keras.metrics.CategoricalAccuracy(),tf.keras.metrics.AUC()])

model.fit(training_iterator, steps_per_epoch = training_iterator.samples / 5, epochs = 5, validation_data = validation_iterator, validation_steps = validation_iterator.samples / 5)

Error:

Traceback (most recent call last):
  File "script.py", line 31, in <module>
    model.fit(training_iterator, steps_per_epoch = training_iterator.samples / 5, epochs = 5, validation_data = validation_iterator, validation_steps = validation_iterator.samples / 5)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py", line 66, in _method_wrapper
    return method(self, *args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py", line 848, in fit
    tmp_logs = train_function(iterator)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/def_function.py", line 580, in __call__
    result = self._call(*args, **kwds)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/def_function.py", line 644, in _call
    return self._stateless_fn(*args, **kwds)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/function.py", line 2420, in __call__
    return graph_function._filtered_call(args, kwargs)  # pylint: disable=protected-access
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/function.py", line 1665, in _filtered_call
    self.captured_inputs)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/function.py", line 1746, in _call_flat
    ctx, args, cancellation_manager=cancellation_manager))
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/function.py", line 598, in call
    ctx=ctx)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/execute.py", line 60, in quick_execute
    inputs, attrs, num_outputs)
tensorflow.python.framework.errors_impl.InvalidArgumentError:  Incompatible shapes: [5,3] vs. [5,4]
     [[node categorical_crossentropy/mul (defined at script.py:31) ]] [Op:__inference_train_function_1137]

Function call stack:
train_function

2 Answers 2

1

The project is about classifing images of covid-19, Pneumonia and normal lungs.

As you stated, you have 3 classes, but in the last dense layer, your output layer has 4 neurons, which is incompatible, also having 'relu' as activation, which is another mistake.

You should change last dense layer to:

model.add(tf.keras.layers.Dense(3, activation = tf.nn.softmax))
Sign up to request clarification or add additional context in comments.

2 Comments

Thx! Is there a difference between "softmax" and tf.nn.softmax?
Not really, they give the same output, you can use 'softmax' if you want to.
0

Your data does not match your model architecture

Incompatible shapes: [5,3] vs. [5,4]

To debug these types of errors, try adding the run_eagerly=False parameter to your model.compile function; the errors become a little more readable.

https://www.tensorflow.org/api_docs/python/tf/keras/Model#compile

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.