Skip to content

Instantly share code, notes, and snippets.

@ardamavi
Created October 22, 2017 15:59
Show Gist options
  • Save ardamavi/f434c61aae7a0d599c3af089ce523d3e to your computer and use it in GitHub Desktop.
Save ardamavi/f434c61aae7a0d599c3af089ce523d3e to your computer and use it in GitHub Desktop.
Deep Learning Models With Keras
# Arda Mavi
import os
import sys
from keras.models import Model
from keras.layers import Input, Conv2D, MaxPooling2D, Activation, Flatten, Dense, Dropout
from keras.models import model_from_json
def save_model(model, path='Data/Model'):
if not os.path.exists(path):
os.makedirs(path)
model_json = model.to_json()
with open(path+'/model.json', 'w') as model_file:
model_file.write(model_json)
# serialize weights to HDF5
model.save_weights(path+'/weights.h5')
print('Model and weights saved')
return
def get_saved_model(model_path='Data/Model/model.json', weights_path='Data/Model/weights.h5'):
# Getting model:
model_file = open(model_path, 'r')
model = model_file.read()
model_file.close()
model = model_from_json(model)
# Getting weights
model.load_weights(weights_path)
return model
def get_model(model_name='LENET-5'):
if model_name == 'LENET-5':
return get_lenet_5()
elif model_name == 'MVGG-5':
return get_mvgg_5()
elif model_name == 'MVGG-6':
return get_mvgg_6()
elif model_name == 'MVGG-7':
return get_mvgg_7()
elif model_name == 'MVGG-8':
return get_mvgg_8()
elif model_name == 'MVGG-9':
return get_mvgg_9()
else:
print('Model "{0}" not found!'.format(model_name))
return None
def get_lenet_5():
inputs = Input(shape=(28, 28, 1))
conv_1 = Conv2D(6, (5, 5), strides=(1,1), padding='SAME')(inputs)
act_1 = Activation('relu')(conv_1)
pooling_1 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_1)
conv_2 = Conv2D(16, (5, 5), strides=(1,1), padding='SAME')(pooling_1)
act_2 = Activation('relu')(conv_2)
pooling_2 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_2)
conv_3 = Conv2D(120, (5, 5), strides=(1,1), padding='SAME')(pooling_2)
act_3 = Activation('relu')(conv_3)
flat_1 = Flatten()(act_3)
fc = Dense(84)(flat_1)
fc = Activation('relu')(fc)
fc = Dropout(0.5)(fc)
fc = Dense(10)(fc)
outputs = Activation('softmax')(fc)
model = Model(inputs=inputs, outputs=outputs)
model.compile(loss='categorical_crossentropy', optimizer='adam')
return model
def get_mvgg_5():
inputs = Input(shape=(28, 28, 1))
conv_1 = Conv2D(16, (3, 3), strides=(1,1), padding='SAME')(inputs)
act_1 = Activation('relu')(conv_1)
conv_2 = Conv2D(16, (3, 3), strides=(1,1), padding='SAME')(act_1)
act_2 = Activation('relu')(conv_2)
pooling_1 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_2)
conv_3 = Conv2D(48, (3, 3), strides=(1,1), padding='SAME')(pooling_1)
act_3 = Activation('relu')(conv_3)
pooling_2 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_3)
flat_1 = Flatten()(pooling_2)
fc = Dense(128)(flat_1)
fc = Activation('relu')(fc)
fc = Dropout(0.5)(fc)
fc = Dense(10)(fc)
outputs = Activation('softmax')(fc)
model = Model(inputs=inputs, outputs=outputs)
model.compile(loss='categorical_crossentropy', optimizer='adam')
return model
def get_mvgg_6():
inputs = Input(shape=(28, 28, 1))
conv_1 = Conv2D(16, (3, 3), strides=(1,1), padding='SAME')(inputs)
act_1 = Activation('relu')(conv_1)
conv_2 = Conv2D(16, (3, 3), strides=(1,1), padding='SAME')(act_1)
act_2 = Activation('relu')(conv_2)
pooling_1 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_2)
conv_3 = Conv2D(32, (3, 3), strides=(1,1), padding='SAME')(pooling_1)
act_3 = Activation('relu')(conv_3)
conv_4 = Conv2D(48, (3, 3), strides=(1,1), padding='SAME')(act_3)
act_4 = Activation('relu')(conv_4)
pooling_2 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_4)
flat_1 = Flatten()(pooling_2)
fc = Dense(128)(flat_1)
fc = Activation('relu')(fc)
fc = Dropout(0.5)(fc)
fc = Dense(10)(fc)
outputs = Activation('softmax')(fc)
model = Model(inputs=inputs, outputs=outputs)
model.compile(loss='categorical_crossentropy', optimizer='adam')
return model
def get_mvgg_7():
inputs = Input(shape=(28, 28, 1))
conv_1 = Conv2D(16, (3, 3), strides=(1,1), padding='SAME')(inputs)
act_1 = Activation('relu')(conv_1)
conv_2 = Conv2D(16, (3, 3), strides=(1,1), padding='SAME')(act_1)
act_2 = Activation('relu')(conv_2)
pooling_1 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_2)
conv_3 = Conv2D(32, (3, 3), strides=(1,1), padding='SAME')(pooling_1)
act_3 = Activation('relu')(conv_3)
conv_4 = Conv2D(32, (3, 3), strides=(1,1), padding='SAME')(act_3)
act_4 = Activation('relu')(conv_4)
pooling_2 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_4)
conv_5 = Conv2D(48, (3, 3), strides=(1,1), padding='SAME')(pooling_2)
act_5 = Activation('relu')(conv_5)
pooling_3 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_5)
flat_1 = Flatten()(pooling_3)
fc = Dense(128)(flat_1)
fc = Activation('relu')(fc)
fc = Dropout(0.5)(fc)
fc = Dense(10)(fc)
outputs = Activation('softmax')(fc)
model = Model(inputs=inputs, outputs=outputs)
model.compile(loss='categorical_crossentropy', optimizer='adam')
return model
def get_mvgg_8():
inputs = Input(shape=(28, 28, 1))
conv_1 = Conv2D(16, (3, 3), strides=(1,1), padding='SAME')(inputs)
act_1 = Activation('relu')(conv_1)
conv_2 = Conv2D(16, (3, 3), strides=(1,1), padding='SAME')(act_1)
act_2 = Activation('relu')(conv_2)
pooling_1 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_2)
conv_3 = Conv2D(32, (3, 3), strides=(1,1), padding='SAME')(pooling_1)
act_3 = Activation('relu')(conv_3)
conv_4 = Conv2D(32, (3, 3), strides=(1,1), padding='SAME')(act_3)
act_4 = Activation('relu')(conv_4)
pooling_2 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_4)
conv_5 = Conv2D(48, (3, 3), strides=(1,1), padding='SAME')(pooling_2)
act_5 = Activation('relu')(conv_5)
conv_6 = Conv2D(48, (3, 3), strides=(1,1), padding='SAME')(act_5)
act_6 = Activation('relu')(conv_6)
pooling_3 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_6)
flat_1 = Flatten()(pooling_3)
fc = Dense(128)(flat_1)
fc = Activation('relu')(fc)
fc = Dropout(0.5)(fc)
fc = Dense(10)(fc)
outputs = Activation('softmax')(fc)
model = Model(inputs=inputs, outputs=outputs)
model.compile(loss='categorical_crossentropy', optimizer='adam')
return model
def get_mvgg_9():
inputs = Input(shape=(28, 28, 1))
conv_1 = Conv2D(16, (3, 3), strides=(1,1), padding='SAME')(inputs)
act_1 = Activation('relu')(conv_1)
conv_2 = Conv2D(16, (3, 3), strides=(1,1), padding='SAME')(act_1)
act_2 = Activation('relu')(conv_2)
pooling_1 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_2)
conv_3 = Conv2D(32, (3, 3), strides=(1,1), padding='SAME')(pooling_1)
act_3 = Activation('relu')(conv_3)
conv_4 = Conv2D(32, (3, 3), strides=(1,1), padding='SAME')(act_3)
act_4 = Activation('relu')(conv_4)
pooling_2 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_4)
conv_5 = Conv2D(48, (3, 3), strides=(1,1), padding='SAME')(pooling_2)
act_5 = Activation('relu')(conv_5)
conv_6 = Conv2D(48, (3, 3), strides=(1,1), padding='SAME')(act_5)
act_6 = Activation('relu')(conv_6)
pooling_3 = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(act_6)
conv_7 = Conv2D(64, (3, 3), strides=(1,1), padding='SAME')(pooling_3)
act_7 = Activation('relu')(conv_7)
pooling_4 = MaxPooling2D(pool_size=(4, 4), strides=(4, 4), padding='SAME')(act_7)
flat_1 = Flatten()(pooling_2)
fc = Dense(128)(flat_1)
fc = Activation('relu')(fc)
fc = Dropout(0.5)(fc)
fc = Dense(10)(fc)
outputs = Activation('softmax')(fc)
model = Model(inputs=inputs, outputs=outputs)
model.compile(loss='categorical_crossentropy', optimizer='adam')
return model
if __name__ == '__main__':
model_name = sys.argv[1]
model = get_model(model_name)
if model != None:
print('Model Architecture:')
print(model.summary())
save_model(model)
print('Model saved!')
@ardamavi
Copy link
Author

Models:
models

@ardamavi
Copy link
Author

For MNIST Datasets.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment