Example #1
0
def pretrain_model():
    model =Xception(include_top = False, weights = "imagenet",input_shape = (71,71,3))
    x=model.output
    x=GlobalAveragePooling2D()(x)
    x=Dense(512,activation='relu')(x)
    x = Dropout(0.8)(x)
    x= Dense(256,activation='relu')(x)
    x = Dropout(0.8)(x)
    y=Dense(10,activation='softmax')(x)
    model = Model(inputs = model.input, outputs =y)

    for layer in model.layers[:30]:
        layer.trainable = False
        
        if layer.name.startswith('batch_normalization'):
            layer.trainable = True

    for layer in model.layers[30:]:
        layer.trainable = True
        #if layer.name.startswith('batch_normalization'):
        #    layer.trainable = True

    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=["accuracy"])

    return model
Example #2
0
def get_kernel(params):
    model = Xception(weights=None)
    optimizer = SGD()
    model.compile(
        loss="sparse_categorical_crossentropy",
        optimizer=optimizer,
        metrics=["accuracy"],
    )
    return model
Example #3
0
    def create_model(self):
        img_input_layer = tf.keras.layers.Input(self.img_input_dim,
                                                name="img_input")
        ann_input_layer = tf.keras.layers.Input(self.ann_input_dim,
                                                name="ann_input")

        ## Uncomment lines according to model type
        # If training Xception, use first line. If training InceptionResNetV2, use second line, etc.
        model = Xception(input_tensor=img_input_layer,
                         include_top=False,
                         weights='imagenet')
        #         model = InceptionResNetV2(input_tensor=img_input_layer, include_top=False, weights='imagenet')
        #         model = EfficientNetB3(input_tensor=img_input_layer, include_top=False, weights='imagenet')
        x = model(img_input_layer)

        # output layers
        x1 = tf.keras.layers.GlobalAveragePooling2D()(x)
        x2 = tf.keras.layers.GlobalMaxPooling2D()(x)
        x3 = tf.keras.layers.Flatten()(x)

        # Annot model
        embed = tf.keras.layers.Embedding(126964,
                                          64,
                                          input_length=self.ann_input_dim[0])
        m = embed(ann_input_layer)
        m = tf.keras.layers.Flatten()(m)

        out = tf.keras.layers.Concatenate(axis=-1)([x1, x2, x3, m])
        out = tf.keras.layers.Dropout(0.3)(out)
        output_layer = tf.keras.layers.Dense(self.n_classes,
                                             activation='softmax')(out)

        model = tf.keras.models.Model(
            inputs=[img_input_layer, ann_input_layer], outputs=output_layer)

        model.compile(optimizer=tf.keras.optimizers.Adam(),
                      loss="categorical_crossentropy",
                      metrics=['acc'])
        return model
    def create_model(self):
        input_layer = tf.keras.layers.Input(self.input_dim)
        
        ## Uncomment lines according to model type
        ## If training Xception, use first line. If training InceptionResNetV2, use second line, etc.
        model = Xception(input_tensor=input_layer, include_top=False, weights='imagenet')
#         model = InceptionResNetV2(input_tensor=input_layer, include_top=False, weights='imagenet')
        x = model(input_layer)

        # output layers
        x1 = tf.keras.layers.GlobalAveragePooling2D()(x)
        x2 = tf.keras.layers.GlobalMaxPooling2D()(x)
        x3 = tf.keras.layers.Flatten()(x)

        out = tf.keras.layers.Concatenate(axis=-1)([x1, x2, x3])
        out = tf.keras.layers.Dropout(0.3)(out)
        output_layer = tf.keras.layers.Dense(self.n_classes, activation='softmax')(out)

        model = tf.keras.models.Model(inputs=input_layer, outputs=output_layer)

        model.compile(optimizer=tf.keras.optimizers.Adam(), 
                      loss="categorical_crossentropy", metrics=['acc'])
        return model
    dogs_model = InceptionV3(weights=None, classes=dogs_num_of_classes)
    cats_model = InceptionV3(weights=None, classes=cats_num_of_classes)
elif model_name == 'inception_resnet_v2':
    binary_model = InceptionResNetV2(weights=None, classes=num_of_classes)
    dogs_model = InceptionResNetV2(weights=None, classes=dogs_num_of_classes)
    cats_model = InceptionResNetV2(weights=None, classes=cats_num_of_classes)
elif model_name == 'xception':
    binary_model = Xception(weights=None, classes=num_of_classes)
    dogs_model = Xception(weights=None, classes=dogs_num_of_classes)
    cats_model = Xception(weights=None, classes=cats_num_of_classes)
else:
    raise ValueError(f"not supported model name {model_name}")
"""MODEL PARAMS AND CALLBACKS"""
# binary model #
binary_model.compile(optimizer='adam',
                     loss='BinaryCrossentropy',
                     metrics=['accuracy'])
binary_checkpoint = ModelCheckpoint(
    filepath=f'advanced_weights_binary_{model_name}.hdf5',
    save_best_only=True,
    verbose=1)
binary_early_stopping = EarlyStopping(monitor='val_accuracy',
                                      patience=10,
                                      verbose=1)
binary_reduce_lr = ReduceLROnPlateau(patience=5, verbose=1)

# dogs model #
dogs_model.compile(optimizer='adam',
                   loss='categorical_crossentropy',
                   metrics=['accuracy'])
dogs_checkpoint = ModelCheckpoint(
Example #6
0
checkpoint = ModelCheckpoint(filepath,
                             monitor='val_acc',
                             verbose=0,
                             save_best_only=True,
                             mode='max')
# Log the epoch detail into csv
csv_logger = CSVLogger(os.path.join(output_folder, modelname + '.csv'))
callbacks_list = [checkpoint, csv_logger]

# define model
model = Xception(include_top=True,
                 input_shape=(IMG_SIZE, IMG_SIZE, 3),
                 weights=None,
                 classes=4)
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

model.summary()
from tensorflow.keras.utils import plot_model
model_file = os.path.join(output_folder, modelname + "_model.png")
plot_model(model,
           to_file=model_file,
           show_shapes=True,
           show_layer_names=False,
           rankdir='TB')
# fit model

model.fit_generator(train_it,
                    validation_data=val_it,
                    epochs=50,