Source code for deeptables.models.config

# -*- coding:utf-8 -*-

import collections
import os
from ..utils import consts
from . import deepnets as deepnets


[docs]class ModelConfig(collections.namedtuple('ModelConfig', ['name', 'nets', 'categorical_columns', 'exclude_columns', 'task', 'pos_label', 'metrics', 'auto_categorize', 'cat_exponent', 'cat_remain_numeric', 'auto_encode_label', 'auto_imputation', 'auto_discrete', 'auto_discard_unique', 'apply_gbm_features', 'gbm_params', 'gbm_feature_type', 'fixed_embedding_dim', 'embeddings_output_dim', 'embeddings_initializer', 'embeddings_regularizer', 'embeddings_activity_regularizer', 'dense_dropout', 'embedding_dropout', 'stacking_op', 'output_use_bias', 'apply_class_weight', 'optimizer', 'loss', 'dnn_params', 'autoint_params', 'fgcnn_params', 'fibinet_params', 'cross_params', 'pnn_params', 'afm_params', 'cin_params', 'home_dir', 'monitor_metric', 'earlystopping_patience', 'gpu_usage_strategy', 'distribute_strategy', ])): def __hash__(self): return self.name.__hash__() def __new__(cls, name='conf-1', nets=['dnn_nets'], categorical_columns='auto', exclude_columns=[], task=consts.TASK_AUTO, pos_label=None, metrics=['accuracy'], auto_categorize=False, cat_exponent=0.5, cat_remain_numeric=True, auto_encode_label=True, auto_imputation=True, auto_discrete=False, auto_discard_unique = True, apply_gbm_features=False, gbm_params={}, gbm_feature_type=consts.GBM_FEATURE_TYPE_EMB, # embedding/dense fixed_embedding_dim=True, embeddings_output_dim=4, embeddings_initializer='uniform', embeddings_regularizer=None, embeddings_activity_regularizer=None, dense_dropout=0, embedding_dropout=0.3, stacking_op=consts.STACKING_OP_ADD, output_use_bias=True, apply_class_weight=False, optimizer='auto', loss='auto', dnn_params={ 'hidden_units': ((128, 0, False), (64, 0, False)), 'activation': 'relu', }, autoint_params={ 'num_attention': 3, 'num_heads': 1, 'dropout_rate': 0, 'use_residual': True, }, fgcnn_params={'fg_filters': (14, 16), 'fg_heights': (7, 7), 'fg_pool_heights': (2, 2), 'fg_new_feat_filters': (2, 2), }, fibinet_params={ 'senet_pooling_op': 'mean', 'senet_reduction_ratio': 3, 'bilinear_type': 'field_interaction', }, cross_params={ 'num_cross_layer': 4, }, pnn_params={ 'outer_product_kernel_type': 'mat', }, afm_params={ 'attention_factor': 4, 'dropout_rate': 0 }, cin_params={ 'cross_layer_size': (128, 128), 'activation': 'relu', 'use_residual': False, 'use_bias': False, 'direct': False, 'reduce_D': False, }, home_dir=None, monitor_metric=None, earlystopping_patience=1, gpu_usage_strategy=consts.GPU_USAGE_STRATEGY_GROWTH, distribute_strategy=None, ): nets = deepnets.get_nets(nets) if home_dir is None and os.environ.get(consts.ENV_DEEPTABLES_HOME) is not None: home_dir = os.environ.get(consts.ENV_DEEPTABLES_HOME) return super(ModelConfig, cls).__new__(cls, name, nets, categorical_columns, exclude_columns, task, pos_label, metrics, auto_categorize, cat_exponent, cat_remain_numeric, auto_encode_label, auto_imputation, auto_discrete, auto_discard_unique, apply_gbm_features, gbm_params, gbm_feature_type, fixed_embedding_dim, embeddings_output_dim, embeddings_initializer, embeddings_regularizer, embeddings_activity_regularizer, dense_dropout, embedding_dropout, stacking_op, output_use_bias, apply_class_weight, optimizer, loss, dnn_params, autoint_params, fgcnn_params, fibinet_params, cross_params, pnn_params, afm_params, cin_params, home_dir, monitor_metric, earlystopping_patience, gpu_usage_strategy, distribute_strategy, ) @property def first_metric_name(self): if self.metrics is None or len(self.metrics)<=0: raise ValueError('`metrics` is none or empty.') first_metric = self.metrics[0] if isinstance(first_metric, str): return first_metric if callable(first_metric): return first_metric.__name__ raise ValueError('`metric` must be string or callable object.')