So I have built a CNN and trained it to around 95% accuracy on training data, and 90% on testing data. The issue is, when I save this model, load it in again, and predict, it always predicts 1 or close to 1. I even used training data.
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import cv2
import os
import random
from keras.models import Sequential
from keras.layers import Conv2D,Dense,Flatten,Dropout,MaxPooling2D
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import ReduceLROnPlateau
image_height = 150
image_width = 150
batch_size = 10
no_of_epochs = 10
model = Sequential()
model.add(Conv2D(32,(3,3),input_shape=(image_height,image_width,3),activation='relu'))
model.add(Conv2D(32,(3,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
model.add(Conv2D(64,(3,3),activation='relu'))
model.add(Conv2D(64,(3,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
model.add(Conv2D(128,(3,3),activation='relu'))
model.add(Conv2D(128,(3,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(units=128,activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(units=1,activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
train_datagen = ImageDataGenerator(rescale=1./255,
rotation_range=15,
shear_range=0.2,
zoom_range=0.2
)
test_datagen = ImageDataGenerator(rescale=1./255)
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import cv2
import os
import random
from keras.models import Sequential
from keras.layers import Conv2D,Dense,Flatten,Dropout,MaxPooling2D
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import ReduceLROnPlateau
from keras import *
from keras.preprocessing.image import ImageDataGenerator
from keras.preprocessing import image
training_set = train_datagen.flow_from_directory('/content/hackmed2020/train',
target_size=(image_width, image_height),
batch_size=batch_size,
class_mode='binary')
test_set = test_datagen.flow_from_directory('/content/hackmed2020/test',
target_size=(image_width, image_height),
batch_size=batch_size,
class_mode='binary')
# Updated part --->
val_set = test_datagen.flow_from_directory('/content/hackmed2020/val',
target_size=(image_width, image_height),
batch_size=1,
shuffle=False,
class_mode='binary')
reduce_learning_rate = ReduceLROnPlateau(monitor='loss',
factor=0.1,
patience=2,
cooldown=2,
min_lr=0.00001,
verbose=1)
callbacks = [reduce_learning_rate]
history = model.fit_generator(training_set,
steps_per_epoch=5216//batch_size,
epochs=no_of_epochs,
validation_data=test_set,
validation_steps=624//batch_size,
callbacks=callbacks
)
model.save('path_to_my_model.h5')
model = models.load_model('path_to_my_model85.h5')
path_to_file = "/content/Pneumonia1.jpeg"
img = image.load_img(path_to_file, target_size=(150,150))
img = image.img_to_array(img)
img = np.expand_dims(img,axis=0)
prediction = model.predict(img)