Skip to content

Instantly share code, notes, and snippets.

@avsthiago
Created June 11, 2020 19:26
Show Gist options
  • Save avsthiago/3d7e0ff9f4a7ba0ce37b3a28e9ff9cd9 to your computer and use it in GitHub Desktop.
Save avsthiago/3d7e0ff9f4a7ba0ce37b3a28e9ff9cd9 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 29 09:57:55 2018
@author: avsthiago
"""
import numpy as np
np.random.seed(42)
from keras.applications.mobilenet import MobileNet
from keras.layers import Input
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import EarlyStopping, ModelCheckpoint, TensorBoard
from keras.layers import Dense, GlobalAveragePooling2D
from keras.models import Model, load_model
from keras.utils.multi_gpu_utils import multi_gpu_model
from keras.applications.imagenet_utils import preprocess_input
from keras.callbacks import ReduceLROnPlateau
import cv2
import json
from tensorflow import set_random_seed
import os
import gc
import tensorflow as tf
import time
import keras
import keras.backend as K
PATH = '/home/user/full_224/augmented_dataset'
out_dict = 'output/path'
datasets = os.listdir(PATH)
def preprocess(img):
return img - np.array([ 117.27782207, 91.85453205, 57.67647879])
class TimeHistory(keras.callbacks.Callback):
def on_train_begin(self, logs={}):
self.times = []
def on_epoch_begin(self, batch, logs={}):
self.epoch_time_start = time.time()
def on_epoch_end(self, batch, logs={}):
self.times.append(time.time() - self.epoch_time_start)
size = 224
name = 'mobilenet_224_data_agumentation'
set_random_seed(42)
input_tensor = Input(shape=(size, size, 3))
base_model = MobileNet(input_tensor=input_tensor,input_shape=(size,size,3), weights='imagenet', include_top=False)
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(7, activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=predictions)
model = multi_gpu_model(model,2)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
path_train = os.path.join(PATH, 'train')
path_val = os.path.join(PATH, 'validation')
path_test = os.path.join(PATH,'test')
train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input)
val_datagen = ImageDataGenerator(preprocessing_function=preprocess_input)
test_datagen = ImageDataGenerator(preprocessing_function=preprocess_input)
train_generator = train_datagen.flow_from_directory(path_train, target_size=(size, size), batch_size=40)
val_generator = val_datagen.flow_from_directory(path_val,target_size=(size, size), batch_size=40)
test_generator = test_datagen.flow_from_directory(path_test,target_size=(size, size), batch_size=40)
earlystopper = EarlyStopping(patience=5, verbose=1)
model_name = os.path.join('/home/user/multiple_arch', name+'.h5')
time_callback = TimeHistory()
checkpointer = ModelCheckpoint(model_name , verbose=1, save_best_only=True)
learning_rate_reduction = ReduceLROnPlateau(monitor='val_loss',
patience=3,
verbose=1,
factor=0.5,
min_lr=0.000001)
results = model.fit_generator(train_generator, validation_data=val_generator,
epochs=50, callbacks=[earlystopper, checkpointer,
learning_rate_reduction, time_callback ])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment