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