Skip to content

Instantly share code, notes, and snippets.

@sam-thecoder
Created March 21, 2018 08:04
Show Gist options
  • Save sam-thecoder/4da97642919253085b52c3a82f87b558 to your computer and use it in GitHub Desktop.
Save sam-thecoder/4da97642919253085b52c3a82f87b558 to your computer and use it in GitHub Desktop.
training model
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras import backend as K
from keras.callbacks import EarlyStopping
from keras.callbacks import ModelCheckpoint
# dimensions of our images.
img_width, img_height = 250, 250
train_data_dir = 'training_images'
validation_data_dir = 'validation_images'
nb_train_samples = 10000
nb_validation_samples = 800
epochs = 50
batch_size = 10
if K.image_data_format() == 'channels_first':
input_shape = (1, img_width, img_height)
else:
input_shape = (img_width, img_height, 1)
model = Sequential()
model.add(Conv2D(128, (3, 3), input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(128, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(1000))
model.add(Activation('relu'))
model.add(Dense(14951, activation="softmax"))
monitor = EarlyStopping(monitor='val_loss', min_delta=1e-3, patience=5, verbose=0, mode='auto')
checkpointer = ModelCheckpoint(filepath="best_weights.hdf5", verbose=0, save_best_only=True) # save best model
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
# this is the augmentation configuration we will use for training
train_datagen = ImageDataGenerator(
rescale=1. / 255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
# this is the augmentation configuration we will use for testing:
# only rescaling
test_datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
color_mode='grayscale',
batch_size=batch_size,
class_mode='categorical',
shuffle=True)
validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
color_mode='grayscale',
class_mode='categorical',
shuffle=True)
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs,
validation_steps=nb_validation_samples // batch_size,
callbacks=[monitor,checkpointer],
validation_data=validation_generator)
model.load_weights('best_weights.hdf5') # load weights from best model
model.save('grey_model.h5')
scoreSeg = model.evaluate_generator(validation_generator,800)
print("Accuracy = ",scoreSeg[1])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment