Exemplo n.º 1
0
def main(args):
    if args.dataset not in _available_datasets:
        raise NotImplementedError

    dataset = build_dataset(
        name=args.dataset,
        shape=[args.height, args.width],
    )

    model = build_mobilenetv3(
        args.model_type,
        input_shape=(args.height, args.width, dataset["channels"]),
        num_classes=dataset["num_classes"],
        width_multiplier=args.width_multiplier,
    )

    if args.optimizer not in _available_optimizers:
        raise NotImplementedError

    model.load_weights(args.model_path)

    model.compile(
        optimizer=_available_optimizers.get(args.optimizer)(args.lr),
        loss="categorical_crossentropy",
        metrics=["accuracy"],
    )

    model.evaluate(
        dataset["test"].make_one_shot_iterator(),
        steps=(dataset["num_test"] // args.valid_batch_size) + 1,
    )
Exemplo n.º 2
0
def main(args):
    _available_datasets = {
        "mnist": mnist,
        "cifar10": cifar10,
    }

    if args.dataset not in _available_datasets:
        raise NotImplementedError

    train_data, num_train_data, test_data, num_test_data = _available_datasets.get(args.dataset)(
        args.train_batch_size,
        args.valid_batch_size,
        args.height,
        args.width,
    )

    model = build_mobilenetv3(
        args.model_type,
        input_shape=(args.height, args.width, args.channels),
        num_classes=args.num_classes,
        width_multiplier=args.width_multiplier,
        l2_reg=args.l2_reg,
    )

    _available_optimizers = {
        "rmsprop": tf.train.RMSPropOptimizer,
        "adam": tf.train.AdamOptimizer,
        "sgd": tf.train.GradientDescentOptimizer,
        }

    if args.optimizer not in _available_optimizers:
        raise NotImplementedError

    model.compile(
        optimizer=_available_optimizers.get(args.optimizer)(args.lr),
        loss="categorical_crossentropy",
        metrics=["accuracy"],
    )

    callbacks = [
        tf.keras.callbacks.TensorBoard(log_dir=args.logdir),
    ]

    model.fit(
        train_data.make_one_shot_iterator(),
        steps_per_epoch=(num_train_data//args.train_batch_size)+1,
        epochs=args.num_epoch,
        validation_data=test_data.make_one_shot_iterator(),
        validation_steps=(num_test_data//args.valid_batch_size)+1,
        callbacks=callbacks,
    )

    model.save_weights(f"mobilenetv3_{args.model_type}_{args.dataset}_{args.num_epoch}.h5")
Exemplo n.º 3
0
def model_fn(features, labels, mode, params):
    model = build_mobilenetv3(model_type=params['model_type'],
                              input_shape=params['input_shape'],
                              num_classes=params['num_classes'],
                              batch_size=params['batch_size'])

    predictions = model(features,
                        training=(mode == tf.estimator.ModeKeys.TRAIN))

    if mode == tf.estimator.ModeKeys.PREDICT:
        return tf.compat.v1.estimator.tpu.TPUEstimatorSpec(
            mode=mode, predictions=predictions)

    if params['optimizer'] == 'adam':
        optimizer = tf.compat.v1.train.AdamOptimizer()
    elif params['optimizer'] == 'adagrad':
        optimizer = tf.compat.v1.train.AdagradOptimizer()
    else:
        raise ValueError('Optimizer "{}" not supported.'.format(
            params['optimizer']))

    if params['use_tpu']:
        optimizer = tf.contrib.tpu.CrossShardOptimizer(optimizer)
    loss = tf.keras.losses.SparseCategoricalCrossentropy()(tf.argmax(
        labels, 1), predictions)

    train_op = optimizer.minimize(
        loss,
        var_list=model.trainable_variables,
        global_step=tf.compat.v1.train.get_or_create_global_step())

    def metric_fn(y_true, y_pred):

        predicted_classes = tf.argmax(y_pred, 1)
        accuracy = tf.compat.v1.metrics.accuracy(labels=tf.argmax(y_true, 1),
                                                 predictions=predicted_classes,
                                                 name="acc_op")
        return {"accuracy": accuracy}

    return tf.compat.v1.estimator.tpu.TPUEstimatorSpec(
        mode=mode,
        predictions=predictions,
        loss=loss,
        train_op=train_op,
        eval_metrics=(metric_fn, [labels, predictions]))
Exemplo n.º 4
0
def main(args):
    _available_datasets = {
        "mnist": mnist,
        "cifar10": cifar10,
    }

    if args.dataset not in _available_datasets:
        raise NotImplementedError

    _, _, test_data, num_test_data = _available_datasets.get(args.dataset)(
        args.valid_batch_size,
        args.valid_batch_size,
        args.height,
        args.width,
    )

    model = build_mobilenetv3(
        args.model_type,
        input_shape=(args.height, args.width, args.channels),
        num_classes=args.num_classes,
        width_multiplier=args.width_multiplier,
    )

    _available_optimizers = {
        "rmsprop": tf.train.RMSPropOptimizer,
        "adam": tf.train.AdamOptimizer,
        "sgd": tf.train.GradientDescentOptimizer,
        }

    if args.optimizer not in _available_optimizers:
        raise NotImplementedError

    model.load_weights(args.model_path)

    model.compile(
        optimizer=_available_optimizers.get(args.optimizer)(args.lr),
        loss="categorical_crossentropy",
        metrics=["accuracy"],
    )

    model.evaluate(
        test_data.make_one_shot_iterator(),
        steps=(num_test_data//args.valid_batch_size)+1,
    )
Exemplo n.º 5
0
def main(args):
    if args.dataset not in _available_datasets:
        raise NotImplementedError

    dataset = build_dataset(name=args.dataset,
                            shape=(args.height, args.width),
                            train_batch_size=args.train_batch_size,
                            valid_batch_size=args.valid_batch_size)

    model = build_mobilenetv3(
        args.model_type,
        input_shape=(args.height, args.width, dataset["channels"]),
        num_classes=dataset["num_classes"],
        width_multiplier=args.width_multiplier,
        l2_reg=args.l2_reg,
    )

    if args.optimizer not in _available_optimizers:
        raise NotImplementedError

    model.compile(
        optimizer=_available_optimizers.get(args.optimizer)(args.lr),
        loss="categorical_crossentropy",
        metrics=["accuracy"],
    )

    callbacks = [
        tf.keras.callbacks.TensorBoard(log_dir=args.logdir),
    ]

    model.fit(
        dataset["train"].make_one_shot_iterator(),
        steps_per_epoch=(dataset["num_train"] // args.train_batch_size) + 1,
        epochs=args.num_epoch,
        validation_data=dataset["test"],
        validation_steps=(dataset["num_test"] // args.valid_batch_size) + 1,
        callbacks=callbacks,
    )

    model.save_weights(
        f"mobilenetv3_{args.model_type}_{args.dataset}_{args.num_epoch}.h5")