Ejemplo n.º 1
0
def train_vgg16(nameOverride=None, layers_to_train=None):
    """
    Build, train and save VGG16 model with block4 and block5 fine-tuning.
    :return: null
    """

    if nameOverride is None:
        nameOverride = "block4and5"
    # load data
    training_sets = load_augmented_dataset()

    # build models
    model_vgg = build_vgg_trainable(fine_tune=layers_to_train)

    baseWeights_t = model_vgg.get_weights()

    # NOTE: You can still leave this alone if you've only downloaded the fully augmented set.
    for training_set in training_sets:
        print("     Starting training for set {}".format(str(training_set)))
        model_vgg.set_weights(baseWeights_t)  # Resets model
        train_x = np.load(
            os.path.join("./model_cache/train_data",
                         training_sets[training_set][0]))
        train_y = np.load(
            os.path.join("./model_cache/train_data",
                         training_sets[training_set][1]))

        early_stopping_monitor = EarlyStopping(patience=2)
        history = model_vgg.fit(train_x,
                                train_y,
                                batch_size=32,
                                epochs=20,
                                verbose=1,
                                validation_split=0.2,
                                shuffle=True,
                                callbacks=[early_stopping_monitor])

        mpu.plot_accuracy_loss(
            history, "./model_cache/train_data/{}_{}_vgg16_plots.png".format(
                str(training_set), nameOverride))

        upload_blob(
            BUCKET_NAME,
            "./model_cache/train_data/{}_{}_vgg16_plots.png".format(
                str(training_set),
                nameOverride), "model_charts/{}_{}_vgg16_plots.png".format(
                    str(training_set), nameOverride))

        model_vgg.save("./model_cache/train_data/{}_{}_vgg16.h5".format(
            str(training_set), nameOverride))

        upload_blob(
            BUCKET_NAME, "./model_cache/train_data/{}_{}_vgg16.h5".format(
                str(training_set), nameOverride),
            "saved_models/{}_{}_vgg16.h5".format(str(training_set),
                                                 nameOverride))
Ejemplo n.º 2
0
def train_mobilenetv2():
    """
    Build, train and save MobileNetV2 model with 80% fine-tuning.
    :return: null
    """

    # load data
    training_sets = load_augmented_dataset()

    # build models
    model_mobile = build_mobilenetv2()

    # store base weights
    baseWeights_t = model_mobile.get_weights()

    # NOTE: You can still leave this alone if you've only downloaded the fully augmented set.
    for training_set in training_sets:
        print("     Starting training for set {}".format(str(training_set)))
        model_mobile.set_weights(baseWeights_t)  # Resets model
        train_x = np.load(
            os.path.join("./model_cache/train_data",
                         training_sets[training_set][0]))
        train_y = np.load(
            os.path.join("./model_cache/train_data",
                         training_sets[training_set][1]))

        early_stopping_monitor = EarlyStopping(patience=2)
        history = model_mobile.fit(train_x,
                                   train_y,
                                   batch_size=32,
                                   epochs=20,
                                   verbose=1,
                                   validation_split=0.2,
                                   shuffle=True,
                                   callbacks=[early_stopping_monitor])

        mpu.plot_accuracy_loss(
            history,
            "./model_cache/train_data/{}_mobilenetv2_plots.png".format(
                str(training_set)))

        upload_blob(
            BUCKET_NAME,
            "./model_cache/train_data/{}_mobilenetv2_plots.png".format(
                str(training_set)),
            "model_charts/{}_mobilenetv2_plots.png".format(str(training_set)))

        model_mobile.save("./model_cache/train_data/{}_mobilenetv2.h5".format(
            str(training_set)))

        upload_blob(
            BUCKET_NAME, "./model_cache/train_data/{}_mobilenetv2.h5".format(
                str(training_set)),
            "saved_models/{}_mobilenetv2.h5".format(str(training_set)))
Ejemplo n.º 3
0
def train_efficientnet():
    """
    Build, train and save Efficientnet model.
    :return: null
    """

    # load data
    training_sets = load_augmented_dataset()

    # build models
    model_efn = build_efficientnet()

    baseWeights_t = model_efn.get_weights()

    for training_set in training_sets:
        print("     Starting training for set {}".format(str(training_set)))
        model_efn.set_weights(baseWeights_t)  # Resets model
        train_x = np.load(
            os.path.join("./model_cache/train_data",
                         training_sets[training_set][0]))
        train_y = np.load(
            os.path.join("./model_cache/train_data",
                         training_sets[training_set][1]))

        early_stopping_monitor = EarlyStopping(patience=5)
        history = model_efn.fit(train_x,
                                train_y,
                                batch_size=32,
                                epochs=40,
                                verbose=1,
                                validation_split=0.2,
                                shuffle=True,
                                callbacks=[early_stopping_monitor])

        mpu.plot_accuracy_loss(
            history,
            "./model_cache/train_data/{}_efficientnet_plots.png".format(
                str(training_set)))

        upload_blob(
            BUCKET_NAME,
            "./model_cache/train_data/{}_efficientnet_plots.png".format(
                str(training_set)),
            "model_charts/{}_efficientnet_plots.png".format(str(training_set)))

        model_efn.save("./model_cache/train_data/{}_efficientnet.h5".format(
            str(training_set)))

        upload_blob(
            BUCKET_NAME, "./model_cache/train_data/{}_efficientnet.h5".format(
                str(training_set)),
            "saved_models/{}_efficientnet.h5".format(str(training_set)))