sam_b
sam_b

Reputation: 43

model.fit gives InvalidArgumentError: Graph execution error:

My code is as follows:

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator
#import os
#os.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'
model = Sequential()
model.add(Conv2D(16, (3, 3), input_shape=(32,32, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))


model.add(Dropout(0.5))
model.add(Dense(27))
model.add(Activation('sigmoid'))

model.compile(loss = 'categorical_crossentropy',
              optimizer = 'rmsprop',
              metrics = ['accuracy'])

batch_size = 5

# Training Augmentation configuration

train_datagen = ImageDataGenerator(rescale = 1./255, 
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = False)

# Testing Augmentation - Only Rescaling
test_datagen = ImageDataGenerator(rescale = 1./255)

# Generates batches of Augmented Image data
train_generator = train_datagen.flow_from_directory('D:/college_project/resources/training/', 
                                                    target_size = (64, 64), 
                                                    batch_size = batch_size,
                                                    class_mode = 'categorical') 

# Generator for validation data
validation_generator = test_datagen.flow_from_directory('D:/college_project/resources/testing/', 
                                                        target_size = (64, 64),
                                                        batch_size = batch_size,
                                                        class_mode = 'categorical')

# Fit the model on Training data

model.fit(train_generator, epochs=5, validation_data=validation_generator)


# Evaluating model performance on Testing data
loss, accuracy = model.evaluate(validation_generator)

print("\nModel's Evaluation Metrics: ")
print("---------------------------")
print("Accuracy: {} \nLoss: {}".format(accuracy, loss))```

I am working on image classification but I am getting this error:

Traceback (most recent call last):

  File "D:\college_project\modules\traing example.py", line 56, in <module>
    `model.fit(train_generator, epochs=5, validation_data=validation_generator)`

  File "C:\Users\shubh\anaconda3\lib\site-packages\keras\utils\traceback_utils.py", line 67, in error_handler
    raise e.with_traceback(filtered_tb) from None

  File "C:\Users\shubh\anaconda3\lib\site-packages\tensorflow\python\eager\execute.py", line 54, in quick_execute
    tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,

InvalidArgumentError: Graph execution error:

Upvotes: 2

Views: 6671

Answers (1)

AloneTogether
AloneTogether

Reputation: 26708

You need to flatten (make sure your output is 1D) your output after the last MaxPooling2D layer before feeding it to your output layer and since you are using categorical_crossentropy as your loss function, you should use a softmax activation function instead of sigmoid. Also, 27 nodes in your output layer means you have 27 different classes. Check if that is really the case. Here is a working example:

import tensorflow as tf
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator


flowers = tf.keras.utils.get_file(
    'flower_photos',
    'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
    untar=True)

train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale = 1./255, 
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = False)


train_generator = train_datagen.flow_from_directory(directory = flowers,
                                               batch_size = 32,
                                               target_size = (32, 32),
                                               seed = 42, class_mode='categorical')

model = Sequential()
model.add(Conv2D(16, (3, 3), input_shape=(32,32, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(5))
model.add(Activation('softmax'))

model.compile(loss = 'categorical_crossentropy',
              optimizer = 'rmsprop',
              metrics = ['accuracy'])

model.fit(train_generator, epochs=5)

Upvotes: 2

Related Questions