Search code examples
pythonprintingkerasindex-errorpre-trained-model

Printing all claffication classes in vgg, keras. IndexError


I'm trying to print out all known classes with their probability values. The first value is the class with the highest probability.

Here is my code so far:

from keras.applications.vgg16 import VGG16
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
from keras.applications.vgg16 import preprocess_input
from keras.applications.vgg16 import decode_predictions

model = VGG16()

print(model.summary())


# load an image from file
image = load_img('./pictures/door.jpg', target_size=(224, 224))
image = img_to_array(image)  #output Numpy-array

#4-dimensional: samples, rows, columns, and channels.
image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2]))


# prepare the image for the VGG model. 
image = preprocess_input(image)


# predict the probability across all output classes. 
yhat = model.predict(image)


# convert the probabilities to class labels
label = decode_predictions(yhat)
# retrieve the most likely result, e.g. highest probability
for i in range(0,5):
    label = label[i][i]
    print('%s (%.2f%%)' % (label[1], label[2] * 100))

I get the following error:

Traceback (most recent call last):
  File path, line 38, in <module>
    print('%s (%.2f%%)' % (label[1], label[2] * 100))
IndexError: string index out of range

Do you have any idea how to handle it? Thanks in advance^^


Solution

  • You have an error in your code. Try this out:

    labels = decode_predictions(yhat)[0]
    # retrieve the most likely result, e.g. highest probability
    for i in range(0,5):
        label = labels[i]
        #print('%s (%.2f%%)' % (label[1], label[2] * 100)) 
        print('%s (%.2f%%)' % (label[1], float(label[2]) * 100))