def mLeNetDefault_Features_Dense(input_shape,
                                 num_classes,
                                 steps_per_epoch,
                                 epochs,
                                 use_cache=False,
                                 dataset='dataset1'):
    model_name = 'LeNetDefault_Features_Dense'
    helpers.createFoldersForModel(model_name, dataset)
    print("===================== " + model_name +
          " model ====================")

    losses = {
        'classifierOutput': classifierLossFunction,
        'featuresOutput': featuresLossFunction
    }
    metrics = {
        'classifierOutput': classifierAccuracy,
        'featuresOutput': featuresAccuracy
    }
    weights = {'classifierOutput': 1.0, 'featuresOutput': 1.0}

    if existsModelCache(model_name, dataset) and use_cache:
        model = loadModel(model_name, dataset)
        model.compile(loss=losses,
                      metrics=metrics,
                      optimizer='rmsprop',
                      run_eagerly=True,
                      loss_weights=weights)
        evaluateModel(model, dataset, input_shape, steps_per_epoch, epochs,
                      True)
        return model

    model = getDefaultModel(input_shape)
    dense1 = Dense(120)(model.layers[-1].output)
    dense2 = Dense(84)(dense1)
    dense3 = Dense(units=64, activation="relu")(dense2)
    classifierOutput = Dense(num_classes,
                             activation='softmax',
                             name='classifierOutput')(dense3)
    featuresOutput = Flatten(name='featuresOutput')(model.layers[-1].output)
    # define new model
    model = Model(inputs=model.inputs,
                  outputs=[classifierOutput, featuresOutput])

    model.compile(loss=losses,
                  metrics=metrics,
                  optimizer='rmsprop',
                  run_eagerly=True,
                  loss_weights=weights)
    model.run_eagerly = True
    [history, time_taken] = fitModel(model, dataset, input_shape,
                                     steps_per_epoch, epochs, True)

    if use_cache:
        saveModel(model, model_name, dataset)

    createAndSaveCurvesFeatures(history, model_name, dataset)

    return model
def mLeNetDefault(input_shape,
                  num_classes,
                  steps_per_epoch,
                  epochs,
                  use_cache=False,
                  dataset='dataset1'):
    model_name = 'LeNetDefault'
    helpers.createFoldersForModel(model_name, dataset)
    print("===================== " + model_name +
          " model ====================")
    if existsModelCache(model_name, dataset) and use_cache:
        model = loadModel(model_name, dataset)
        model.compile(loss='categorical_crossentropy',
                      optimizer='rmsprop',
                      metrics=['accuracy'])
        evaluateModel(model, dataset, input_shape, steps_per_epoch, epochs)
        return model

    model = getDefaultModel(input_shape)
    model.add(Dense(120))
    model.add(Dense(84))
    model.add(Dense(num_classes, activation='softmax'))
    # model.add(Activation('softmax'))
    model.compile(loss='categorical_crossentropy',
                  optimizer='rmsprop',
                  metrics=['accuracy'])

    [history, time_taken] = fitModel(model, dataset, input_shape,
                                     steps_per_epoch, epochs, False)

    if use_cache:
        saveModel(model, model_name, dataset)

    createAndSaveCurves(history, model_name, dataset)

    return model