Beispiel #1
0
def train_and_evaluate(input_path: str,
                       model_dir: str,
                       num_epochs: int = 5,
                       batch_size: int = 128,
                       learning_rate: float = 0.01) -> None:
    """Trains and evaluates the Keras model.

    Uses the Keras model defined in model.py. Saves the trained model in TensorFlow SavedModel
    format to the path defined in part by the --job-dir argument."""

    # Split datasets into training and testing
    train_feature, eval_feature, train_target, eval_target = utils.load_data(
        input_path)
    # [END ai_platform_tfkeras_task_train_and_evaluate_load]

    # [START ai_platform_tfkeras_task_train_and_evaluate_dimensions]
    # Extract dimensions of the data
    num_train_examples, input_dim = train_feature.shape
    num_eval_examples = eval_feature.shape[1]
    output_dim = train_target.shape[1]
    # [END ai_platform_tfkeras_task_train_and_evaluate_dimensions]

    # [START ai_platform_tfkeras_task_train_and_evaluate_model]
    # Create the Keras Model
    keras_model = model.create_keras_model(
        input_dim=input_dim,
        output_dim=output_dim,
        learning_rate=learning_rate,
    )
    # [END ai_platform_tfkeras_task_train_and_evaluate_model]

    # [START ai_platform_tfkeras_task_train_and_evaluate_training_data]
    # Pass a numpy array by passing DataFrame.values
    training_dataset = model.input_fn(
        features=train_feature.values,
        labels=train_target.values,
        shuffle=True,
        num_epochs=num_epochs,
        batch_size=batch_size,
    )
    # [END ai_platform_tfkeras_task_train_and_evaluate_training_data]

    # [START ai_platform_tfkeras_task_train_and_evaluate_validation_data]
    # Pass a numpy array by passing DataFrame.values
    validation_dataset = model.input_fn(
        features=eval_feature.values,
        labels=eval_target.values,
        shuffle=False,
        num_epochs=num_epochs,
        batch_size=num_eval_examples,
    )
    # [END ai_platform_tfkeras_task_train_and_evaluate_validation_data]

    # [START ai_platform_tfkeras_task_train_and_evaluate_fit_export]
    # Train model
    keras_model.fit(
        training_dataset,
        steps_per_epoch=int(num_train_examples / batch_size),
        epochs=num_epochs,
        validation_data=validation_dataset,
        validation_steps=1,
        verbose=1,
    )

    # Export model
    keras_model.save(model_dir)
    print(f"Model exported to: {model_dir}")
def train_and_evaluate(input_path: str,
                       job_dir: str,
                       num_epochs: int = 5,
                       batch_size: int = 128,
                       learning_rate: float = 0.01) -> None:
    """Trains and evaluates the Keras model.

    Uses the Keras model defined in model.py. Saves the trained model in TensorFlow SavedModel
    format to the path defined in part by the --job-dir argument."""

    # Split datasets into training and testing
    train_feature, eval_feature, train_target, eval_target = utils.load_data(
        input_path)
    # [END ai_platform_tfkeras_task_train_and_evaluate_load]

    # [START ai_platform_tfkeras_task_train_and_evaluate_dimensions]
    # Extract dimensions of the data
    num_train_examples, input_dim = train_feature.shape
    num_eval_examples = eval_feature.shape[1]
    output_dim = train_target.shape[1]
    # [END ai_platform_tfkeras_task_train_and_evaluate_dimensions]

    # [START ai_platform_tfkeras_task_train_and_evaluate_model]
    # Create the Keras Model
    keras_model = model.create_keras_model(
        input_dim=input_dim,
        output_dim=output_dim,
        learning_rate=learning_rate,
    )
    # [END ai_platform_tfkeras_task_train_and_evaluate_model]

    # [START ai_platform_tfkeras_task_train_and_evaluate_training_data]
    # Pass a numpy array by passing DataFrame.values
    training_dataset = model.input_fn(
        features=train_feature.values,
        labels=train_target.values,
        shuffle=True,
        num_epochs=num_epochs,
        batch_size=batch_size,
    )
    # [END ai_platform_tfkeras_task_train_and_evaluate_training_data]

    # [START ai_platform_tfkeras_task_train_and_evaluate_validation_data]
    # Pass a numpy array by passing DataFrame.values
    validation_dataset = model.input_fn(
        features=eval_feature.values,
        labels=eval_target.values,
        shuffle=False,
        num_epochs=num_epochs,
        batch_size=num_eval_examples,
    )
    # [END ai_platform_tfkeras_task_train_and_evaluate_validation_data]

    # [START ai_platform_tfkeras_task_train_and_evaluate_tensorboard]
    # Setup Learning Rate decay.
    lr_decay_cb = tf.keras.callbacks.LearningRateScheduler(
        lambda epoch: learning_rate + 0.02 * (0.5**(1 + epoch)), verbose=True)

    # Setup TensorBoard callback.
    tensorboard_cb = tf.keras.callbacks.TensorBoard(os.path.join(
        job_dir, "keras_tensorboard"),
                                                    histogram_freq=1)
    # [END ai_platform_tfkeras_task_train_and_evaluate_tensorboard]

    # [START ai_platform_tfkeras_task_train_and_evaluate_fit_export]
    # Train model
    keras_model.fit(
        training_dataset,
        steps_per_epoch=int(num_train_examples / batch_size),
        epochs=num_epochs,
        validation_data=validation_dataset,
        validation_steps=1,
        verbose=1,
        callbacks=[lr_decay_cb, tensorboard_cb],
    )

    # Export model
    export_path = os.path.join(job_dir, "tfkeras_model/")
    tf.keras.models.save_model(keras_model, export_path)
    print(f"Model exported to: {export_path}")