def conv2d_maxpool(x, filters, conv_size=(3,3), padding='valid', strides=(1, 1),
pool_strides =(2,2),pool_size = (3,3)
name=None):
x = Conv2D(
filters, conv_size,
strides=strides,
padding=padding,
use_bias=False,
name=conv_name)(x)
x = Activation('relu', name=name)(x)
x= MaxPooling2D(pool_size = pool_size,strides = pool_strides)(x)
return x
class Total_Models():
def __init__(self, nb_classes):
self.nb_classes = nb_classes
metrics = ['accuracy']
if self.nb_classes >= 10:
self.model,self.original_model = self.zf_model()
optimizer = Adam(lr=1e-5)
self.model.compile(loss='categorical_crossentropy', optimizer=optimizer,
metrics=metrics)
print(self.model.summary())
def zf_model(self):
inputs = Input(shape=(299,299,3))
layer_1 = conv2d_maxpool(inputs, 96, conv_size=(7,7), padding='valid', strides=(2, 2),
pool_strides =(2,2),pool_size = (3,3))
layer_2 = conv2d_maxpool(layer_1, 256, conv_size=(5,5), padding='valid', strides=(2, 2),
pool_strides =(2,2),pool_size = (3,3))
layer_3 = Conv2D(384, (3, 3),strides=1,padding='same',activation= 'relu', use_bias=True, name='layer3')(layer_2)
layer_4 = Conv2D(384, (3, 3),strides=1,padding='same',activation='relu', use_bias=True, name='layer4')(layer_3)
layer_5 = conv2d_maxpool(layer_4, 256, conv_size=(5,5), padding='same', strides=(2, 2),
pool_strides =(2,2),pool_size = (3,3))
flatten = Flatten()(layer_5)
layer_6 = Dense(4096,activation = 'relu')(flatten)
dropout_6 = Dropout(0.5)(layer_6)
layer_7 = Dense(4096,activation ='relu')(dropout_6)
dropout_7 = Dropout(0.5)(layer_7)
layer_8 = Dense(self.nb_classes)(dropout_7)
model = Model(inputs= inputs,outputs = layer_8)
parallel_model=multi_gpu_model(model,gpus=4)
return parallel_model,model