def merge_with_defaults()

in ludwig/utils/defaults.py [0:0]


def merge_with_defaults(model_definition):
    _perform_sanity_checks(model_definition)

    # ===== Preprocessing =====
    model_definition['preprocessing'] = merge_dict(
        default_preprocessing_parameters,
        model_definition.get('preprocessing', {})
    )

    stratify = model_definition['preprocessing']['stratify']
    if stratify is not None:
        features = (
                model_definition['input_features'] +
                model_definition['output_features']
        )
        feature_names = set(f['name'] for f in features)
        if stratify not in feature_names:
            logger.warning(
                'Stratify is not among the features. '
                'Cannot establish if it is a binary or category'
            )
        elif ([f for f in features if f['name'] == stratify][0][TYPE]
              not in {BINARY, CATEGORY}):
            raise ValueError('Stratify feature must be binary or category')

    # ===== Training =====
    set_default_value(model_definition, TRAINING, default_training_params)

    for param, value in default_training_params.items():
        set_default_value(model_definition[TRAINING], param,
                          value)

    set_default_value(
        model_definition[TRAINING],
        'validation_metric',
        output_type_registry[model_definition['output_features'][0][
            TYPE]].default_validation_metric
    )

    # ===== Training Optimizer =====
    optimizer = model_definition[TRAINING]['optimizer']
    default_optimizer_params = get_default_optimizer_params(optimizer[TYPE])
    for param in default_optimizer_params:
        set_default_value(optimizer, param, default_optimizer_params[param])

    # ===== Input Features =====
    for input_feature in model_definition['input_features']:
        get_from_registry(input_feature[TYPE],
                          input_type_registry).populate_defaults(input_feature)

    # ===== Combiner =====
    set_default_value(model_definition, 'combiner',
                      {'type': default_combiner_type})

    # ===== Output features =====
    for output_feature in model_definition['output_features']:
        get_from_registry(output_feature['type'],
                          output_type_registry).populate_defaults(
            output_feature)

    return model_definition