Vinay Venugopal
Vinay Venugopal

Reputation: 1

CNN classifier unable to classify images in a given dataset

I used the following code on a training dataset of 40 images of flowers but the CNN classifier fails to classify it.]

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D
from tensorflow.keras.layers import MaxPooling2D
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense
from tensorflow.keras.preprocessing.image import ImageDataGenerator
model = Sequential()
model.add(Conv2D(16, (3, 3), input_shape = (32, 32, 3), activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(Flatten())
model.add(Dense(units = 128, activation = 'relu'))
model.add(Dense(units = 4, activation = 'softmax'))

model.summary()
model.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])
train_datagen = ImageDataGenerator(rescale = 1./255,
                               shear_range = 0.2,
                               zoom_range = 0.2,
                               horizontal_flip = True)
val_datagen = ImageDataGenerator(rescale = 1./255)

training_set = 
train_datagen.flow_from_directory('C:\\Users\\vinay\\flowerclassification\\dataset\\train',
                                             target_size = (32, 32),
                                             batch_size = 8
                                             )
val_set = 
val_datagen.flow_from_directory('C:\\Users\\vinay\\flowerclassification\\dataset\\val',
                                        target_size = (32, 32),
                                       batch_size = 8)

model.fit(training_set,
                     steps_per_epoch = 10,
                     epochs = 25,
                     validation_data = val_set,
                     validation_steps = 4)



model_json = model.to_json()
with open("model.json", "w") as json_file:
    json_file.write(model_json)
model.save_weights("model.h5")
print("Saved model to disk")

/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:1940: UserWarning: Model.fit_generator is deprecated and will be removed in a future version. Please use Model.fit, which supports generators. warnings.warn('Model.fit_generator is deprecated and '

ValueError Traceback (most recent call last) in () ----> 1 model.fit_generator(training_set,steps_per_epoch = 10,epochs = 25,validation_data = val_set,validation_steps = 2)

7 frames /usr/local/lib/python3.7/dist-packages/keras_preprocessing/image/iterator.py in getitem(self, idx) 55 'but the Sequence ' 56 'has length {length}'.format(idx=idx, ---> 57 length=len(self))) 58 if self.seed is not None: 59 np.random.seed(self.seed + self.total_batches_seen)

ValueError: Asked to retrieve element 0, but the Sequence has length 0

also this message is printed in the previous step: Found 0 images belonging to 0 classes. Found 0 images belonging to 0 classes.

Upvotes: 0

Views: 255

Answers (1)

user11530462
user11530462

Reputation:

Please try again executing the same above code by removing steps_per_epoch and validation_steps from model.fit:

model.fit(training_set,
          #steps_per_epoch = 10,
          epochs = 25,
          validation_data = val_set,
         # validation_steps = 4
          )

Steps_per_epoch and validation_steps are not correct. Removing these from model will itself count the steps_per_epoch as per given images_count and batch_size. Check this similar answer for reference.

As from warning, it shows Model.fit_generator is deprecated. You can use model.fit instead to remove the warning. Please let us know if the issue still persists.

Upvotes: 0

Related Questions