Equivalent of 'class_indices' attribute of 'flow_from_directory' object in case of 'ImageDataGenerator' object

I am following a tutorial at

I am using 'ImageDataGenerator' object and want to predict the out put using the following method.

pred=model.predict_generator(test_generator, steps=10, verbose=1) predicted_class_indices=np.argmax(pred,axis=1) labels = (train_generator.class_indices) labels = dict((v,k) for k,v in labels.items()) predictions = [labels[k] for k in predicted_class_indices] 

But I am using Keras 'ImageDataGenerator' and 'flow_from_dataframe' object. 'ImageDataGenerator' has no 'class_indices' attribute. How can I get the indices of the classes

1

1 Answer

End to End example which uses ImageDataGenerator.flow_from_dataframe and which answers your question of How can I get the indices of the classes

from tensorflow.keras.models import Sequential #Import from keras_preprocessing not from keras.preprocessing from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.layers import Dense, Activation, Flatten, Dropout, BatchNormalization from tensorflow.keras.layers import Conv2D, MaxPooling2D from tensorflow.keras import regularizers, optimizers import pandas as pd import numpy as np def append_ext(fn): return fn+".png" traindf=pd.read_csv("trainLabels.csv",dtype=str) testdf=pd.read_csv("sampleSubmission.csv",dtype=str) traindf["id"]=traindf["id"].apply(append_ext) testdf["id"]=testdf["id"].apply(append_ext) datagen=ImageDataGenerator(rescale=1./255.,validation_split=0.25) train_generator=datagen.flow_from_dataframe( dataframe=traindf, directory="train/", x_col="id", y_col="label", subset="training", batch_size=32, seed=42, shuffle=True, class_mode="categorical", target_size=(32,32)) valid_generator=datagen.flow_from_dataframe( dataframe=traindf, directory="train/", x_col="id", y_col="label", subset="validation", batch_size=32, seed=42, shuffle=True, class_mode="categorical", target_size=(32,32)) test_datagen=ImageDataGenerator(rescale=1./255.) test_generator=test_datagen.flow_from_dataframe( dataframe=testdf, directory="test/", x_col="id", y_col=None, batch_size=32, seed=42, shuffle=False, class_mode=None, target_size=(32,32)) model = Sequential() model.add(Conv2D(32, (3, 3), padding='same', input_shape=(32,32,3))) model.add(Activation('relu')) model.add(Conv2D(32, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Conv2D(64, (3, 3), padding='same')) model.add(Activation('relu')) model.add(Conv2D(64, (3, 3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(10, activation='softmax')) model.compile(optimizers.RMSprop(lr=0.0001, decay=1e-6),loss="categorical_crossentropy",metrics=["accuracy"]) STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size STEP_SIZE_VALID=valid_generator.n//valid_generator.batch_size STEP_SIZE_TEST=test_generator.n//test_generator.batch_size model.fit_generator(generator=train_generator, steps_per_epoch=STEP_SIZE_TRAIN, validation_data=valid_generator, validation_steps=STEP_SIZE_VALID, epochs=10 ) model.evaluate_generator(generator=valid_generator, steps=STEP_SIZE_TEST) test_generator.reset() pred=model.predict_generator(test_generator, steps=STEP_SIZE_TEST, verbose=1) predicted_class_indices=np.argmax(pred,axis=1) labels = (train_generator.class_indices) labels = dict((v,k) for k,v in labels.items()) predictions = [labels[k] for k in predicted_class_indices] 

Finally, we print the Classes as shown below:

print(predictions) 

Output of above print statement is:

['bird', 'dog', 'bird', 'cat', 'horse', 'deer', 'deer', 'airplane', 'cat', 'cat', 'ship', 'bird', 'automobile',..........] 

For more information, please refer this Article written by Vijaya Bhaskar.

Hope this helps. Happy Learning!

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

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

You Might Also Like