def load(cls, path: str, reset_paths=True, verbose=True): model = super().load(path=path, reset_paths=reset_paths, verbose=verbose) if model._load_model: try_import_autogluon_vision() from autogluon.vision import ImagePredictor model.model = ImagePredictor.load(os.path.join(path, cls.nn_model_name)) model._load_model = None return model
def _fit(self, X: pd.DataFrame, y: pd.Series, X_val: Optional[pd.DataFrame] = None, y_val: Optional[pd.Series] = None, time_limit: Optional[int] = None, sample_weight=None, verbosity=2, **kwargs): try_import_mxnet() try_import_autogluon_vision() from autogluon.vision import ImagePredictor params = self._get_model_params() X = self.preprocess(X, fit=True) if X_val is not None: X_val = self.preprocess(X_val) if sample_weight is not None: # TODO: support logger.log( 15, "\tsample_weight not yet supported for ImagePredictorModel, this model will ignore them in training." ) X = X.reset_index(drop=True) y = y.reset_index(drop=True) if X_val is not None: X_val = X_val.reset_index(drop=True) y_val = y_val.reset_index(drop=True) X[self._label_column_name] = y if X_val is not None: X_val[self._label_column_name] = y_val verbosity_image = max(0, verbosity - 1) root_logger = logging.getLogger() root_log_level = root_logger.level # TODO: ImagePredictor doesn't use problem_type in any way at present. # It also doesn't error or warn if problem_type is not one it expects. self.model = ImagePredictor( problem_type=self.problem_type, path=self.path, # eval_metric=self.eval_metric, # TODO: multiclass/binary vision problem works only with accuracy, regression with rmse verbosity=verbosity_image) logger.log(15, f'\tHyperparameters: {params}') # FIXME: ImagePredictor crashes if given float time_limit if time_limit is not None: time_limit = int(time_limit) self.model.fit(train_data=X, tuning_data=X_val, time_limit=time_limit, hyperparameters=params, random_state=0) # self.model.set_verbosity(verbosity) # TODO: How to set verbosity of fit predictor? root_logger.setLevel(root_log_level) # Reset log level
def _fit(self, X: pd.DataFrame, y: pd.Series, X_val: Optional[pd.DataFrame] = None, y_val: Optional[pd.Series] = None, time_limit: Optional[int] = None, sample_weight=None, verbosity=2, **kwargs): # try_import_mxnet() try_import_autogluon_vision() from autogluon.vision import ImagePredictor params = self._get_model_params() X = self.preprocess(X, fit=True) if X_val is not None: X_val = self.preprocess(X_val) if sample_weight is not None: # TODO: support logger.log( 15, "\tsample_weight not yet supported for ImagePredictorModel, this model will ignore them in training." ) X = X.reset_index(drop=True) y = y.reset_index(drop=True) if X_val is not None: X_val = X_val.reset_index(drop=True) y_val = y_val.reset_index(drop=True) X[self._label_column_name] = y if X_val is not None: X_val[self._label_column_name] = y_val null_indices = X['image'] == '' # TODO: Consider some kind of weighting of the two options so there isn't a harsh cutoff at 50 # FIXME: What if all rows in a class are null? Will probably crash. if null_indices.sum() > 50: self._dummy_pred_proba = self._compute_dummy_pred_proba( y[null_indices]) # FIXME: Do this one for better results else: # Not enough null to get a confident estimate of null label average, instead use all data average self._dummy_pred_proba = self._compute_dummy_pred_proba(y) if null_indices.sum() > 0: X = X[~null_indices] if X_val is not None: null_indices_val = X_val['image'] == '' if null_indices_val.sum() > 0: X_val = X_val[~null_indices_val] verbosity_image = max(0, verbosity - 1) # TODO: ImagePredictor doesn't use problem_type in any way at present. # It also doesn't error or warn if problem_type is not one it expects. self.model = ImagePredictor( problem_type=self.problem_type, path=self.path, # eval_metric=self.eval_metric, # TODO: multiclass/binary vision problem works only with accuracy, regression with rmse verbosity=verbosity_image) logger.log(15, f'\tHyperparameters: {params}') # FIXME: ImagePredictor crashes if given float time_limit if time_limit is not None: time_limit = int(time_limit) self.model.fit(train_data=X, tuning_data=X_val, time_limit=time_limit, hyperparameters=params, random_state=0)
def _get_default_resources(self): num_cpus = get_cpu_count() try_import_autogluon_vision() from autogluon.vision import ImagePredictor num_gpus = ImagePredictor._get_num_gpus_available() return num_cpus, num_gpus
def _get_default_searchspace(self): try_import_autogluon_vision() from autogluon.vision.configs import presets_configs searchspace = presets_configs.preset_image_predictor[ 'good_quality_fast_inference']['hyperparameters'] return searchspace