I have two classes, after training it says that the accuracy is 99%, but after checking for the same data it always gives out belonging to the second class.
training:
from keras.models import Sequential from keras.layers import Conv2D from keras.layers import MaxPooling2D from keras.layers import Flatten from keras.layers import Dense from keras.layers import Dropout from keras.preprocessing.image import ImageDataGenerator model = Sequential() model.add(Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(32, (3, 3), activation='relu')) model.add(Flatten()) model.add(Dense(units=128, activation='sigmoid')) model.add(Dropout(0.25)) model.add(Dense(units=2, activation='softmax')) 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) test_datagen = ImageDataGenerator(rescale=1. / 255) training_set = train_datagen.flow_from_directory('data',target_size=(64, 64), batch_size=100, class_mode='categorical') test_set = test_datagen.flow_from_directory('data',target_size=(64, 64), batch_size=32,class_mode='categorical') model.fit_generator(training_set, steps_per_epoch=100, epochs=3, validation_data=test_set, validation_steps=200) model.save("model.h5") `
check:
import sys import numpy as np from keras.models import load_model from keras.preprocessing import image model = load_model('model.h5') model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) img = image.load_img(sys.argv[1],target_size=(64,64)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) images = np.vstack([x]) classes = model.predict_classes(images) print(classes,model.predict_proba(images))