title: How to predict input image using trained model in Keras, .h5 saved file?
body: <p>I'm only beginning with Keras and machine learning in general.</p>
  
  <p>I trained a model to classify images from 9 classes and saved it using model.save(). Here is the code I used:</p>
  
  <pre><code>from keras.layers import Input, Lambda, Dense, Flatten
  from keras.models import Model
  from keras.applications.resnet50 import ResNet50
  from keras.preprocessing import image
  from keras.preprocessing.image import ImageDataGenerator
  from keras.models import Sequential
  import numpy as np
  from glob import glob
  import matplotlib.pyplot as plt
  
  # re-size all the images to this
  IMAGE_SIZE = [224, 224]
  
  train_path = 'Datasets/Train'
  valid_path = 'Datasets/Test'
  
  # add preprocessing layer to the front of resnet
  resnet = ResNet50(input_shape=IMAGE_SIZE + [3], weights='imagenet', include_top=False)
  
  # don't train existing weights
  for layer in resnet.layers:
      layer.trainable = False
  
      # useful for getting number of classes
  folders = glob('Datasets/Train/*')
  
  # our layers - you can add more if you want
  x = Flatten()(resnet.output)
  # x = Dense(1000, activation='relu')(x)
  prediction = Dense(len(folders), activation='softmax')(x)
  
  # create a model object
  model = Model(inputs=resnet.input, outputs=prediction)
  
  # view the structure of the model
  model.summary()
  
  # tell the model what cost and optimization method to use
  model.compile(
      loss='categorical_crossentropy',
      optimizer='adam',
      metrics=['accuracy']
  )
  
  from keras.preprocessing.image import ImageDataGenerator
  
  train_datagen = ImageDataGenerator(rescale=1. / 255,
                                     shear_range=0.1,
                                     zoom_range=0.1,
                                     horizontal_flip=True)
  
  test_datagen = ImageDataGenerator(rescale=1. / 255)
  
  training_set = train_datagen.flow_from_directory('Datasets/Train',
                                                   target_size=(224, 224),
                                                   batch_size=32,
                                                   class_mode='categorical')
  
  test_set = test_datagen.flow_from_directory('Datasets/Test',
                                              target_size=(224, 224),
                                              batch_size=32,
                                              class_mode='categorical')
  
  
  # fit the model
  r = model.fit_generator(
      training_set,
      validation_data=test_set,
      epochs=3,
      steps_per_epoch=len(training_set),
      validation_steps=len(test_set)
  )
  def plot_loss_accuracy(r):
      fig = plt.figure(figsize=(12, 6))
      ax = fig.add_subplot(1, 2, 1)
      ax.plot(r.history["loss"], 'r-x', label="Train Loss")
      ax.plot(r.history["val_loss"], 'b-x', label="Validation Loss")
      ax.legend()
      ax.set_title('cross_entropy loss')
      ax.grid(True)
  
      ax = fig.add_subplot(1, 2, 2)
      ax.plot(r.history["accuracy"], 'r-x', label="Train Accuracy")
      ax.plot(r.history["val_accuracy"], 'b-x', label="Validation Accuracy")
      ax.legend()
      ax.set_title('acuracy')
      ax.grid(True)
  </code></pre>
  
  <p>It successfully trained. To load and test this model on new images, I used the below code:</p>
  
  <pre><code>from keras.models import load_model
  import cv2
  import numpy as np
  
  model = load_model('model.h5')
  
  model.compile(loss='categorical_crossentropy',
                optimizer='adam',
                metrics=['accuracy'])
  
  img = cv2.imread('test.jpg')
  img = cv2.resize(img,(320,240))
  img = np.reshape(img,[1,320,240,3])
  
  classes = model.predict_classes(img)
  
  print(classes)
  </code></pre>
  
  <p>It outputs:</p>
  
  <p><strong>AttributeError: 'Model' object has no attribute 'predict_classes'</strong></p>
  
  <p>Why wouldn't it even predict?</p>
  
  <p>Thank you,</p>