Exemplo n.º 1
0
    def batch_predict(
        self,
        dataset: Dataset,
        dataset_name: str = None,
    ):
        with dataset.initialize_batcher(self._batch_size,
                                        should_shuffle=False,
                                        horovod=self._horovod) as batcher:

            progress_bar = None
            if self.is_coordinator():
                progress_bar = tqdm(
                    desc="Prediction" if dataset_name is None else
                    f"Prediction {dataset_name: <5.5}",
                    total=batcher.steps_per_epoch,
                    file=sys.stdout,
                    disable=is_progressbar_disabled(),
                )

            predictions = defaultdict(list)
            while not batcher.last_batch():
                batch = batcher.next_batch()
                preds = self._predict(self.model, batch)
                self._accumulate_preds(preds, predictions)

                if self.is_coordinator():
                    progress_bar.update(1)

            if self.is_coordinator():
                progress_bar.close()

        # consolidate predictions from each batch to a single tensor
        self._concat_preds(predictions)

        return from_numpy_dataset(predictions)
Exemplo n.º 2
0
    def batch_evaluation(self, dataset, collect_predictions=False, dataset_name=None):
        with dataset.initialize_batcher(self._batch_size, should_shuffle=False, horovod=self._horovod) as batcher:

            progress_bar = None
            if self.is_coordinator():
                progress_bar = tqdm(
                    desc="Evaluation" if dataset_name is None else f"Evaluation {dataset_name: <5.5}",
                    total=batcher.steps_per_epoch,
                    file=sys.stdout,
                    disable=is_progressbar_disabled(),
                )

            predictions = defaultdict(list)
            while not batcher.last_batch():
                batch = batcher.next_batch()
                logger.debug(
                    f"evaluation for {dataset_name}: obtained next batch "
                    f"memory used: {psutil.Process(os.getpid()).memory_info()[0] / 1e6:0.2f}MB"
                )
                inputs = {
                    i_feat.feature_name: torch.from_numpy(batch[i_feat.proc_column]).to(self.device)
                    for i_feat in self.model.input_features.values()
                }
                targets = {
                    o_feat.feature_name: torch.from_numpy(batch[o_feat.proc_column]).to(self.device)
                    for o_feat in self.model.output_features.values()
                }

                preds = self.model.evaluation_step(inputs, targets)

                # accumulate predictions from batch for each output feature
                if collect_predictions:
                    for of_name, of_preds in preds.items():
                        for pred_name, pred_values in of_preds.items():
                            if pred_name not in EXCLUDE_PRED_SET:
                                key = f"{of_name}_{pred_name}"
                                predictions[key].append(pred_values)

                if self.is_coordinator():
                    progress_bar.update(1)
                    logger.debug(
                        f"evaluation for {dataset_name}: completed batch {progress_bar.n} "
                        f"memory used: {psutil.Process(os.getpid()).memory_info()[0] / 1e6:0.2f}MB"
                    )

            if self.is_coordinator():
                progress_bar.close()

        # consolidate predictions from each batch to a single tensor
        if collect_predictions:
            for key, pred_value_list in predictions.items():
                predictions[key] = torch.cat(pred_value_list, dim=0).clone().detach().cpu().numpy()

        metrics = self.model.get_metrics()
        metrics = self.merge_workers_metrics(metrics)
        self.model.reset_metrics()

        return metrics, from_numpy_dataset(predictions)
Exemplo n.º 3
0
    def batch_evaluation(self,
                         model,
                         dataset,
                         collect_predictions=False,
                         dataset_name=None):
        with dataset.initialize_batcher(self._batch_size,
                                        should_shuffle=False,
                                        horovod=self._horovod) as batcher:

            progress_bar = None
            if self.is_coordinator():
                progress_bar = tqdm(
                    desc='Evaluation' if dataset_name is None else
                    'Evaluation {0: <5.5}'.format(dataset_name),
                    total=batcher.steps_per_epoch,
                    file=sys.stdout,
                    disable=is_progressbar_disabled())

            predictions = defaultdict(list)
            while not batcher.last_batch():
                batch = batcher.next_batch()

                inputs = {
                    i_feat.feature_name: batch[i_feat.proc_column]
                    for i_feat in model.input_features.values()
                }
                targets = {
                    o_feat.feature_name: batch[o_feat.proc_column]
                    for o_feat in model.output_features.values()
                }

                preds = model.evaluation_step(inputs, targets)

                # accumulate predictions from batch for each output feature
                if collect_predictions:
                    for of_name, of_preds in preds.items():
                        for pred_name, pred_values in of_preds.items():
                            if pred_name not in EXCLUE_PRED_SET:
                                key = f'{of_name}_{pred_name}'
                                predictions[key].append(pred_values)

                if self.is_coordinator():
                    progress_bar.update(1)

            if self.is_coordinator():
                progress_bar.close()

        # consolidate predictions from each batch to a single tensor
        if collect_predictions:
            for key, pred_value_list in predictions.items():
                predictions[key] = tf.concat(pred_value_list, axis=0).numpy()

        metrics = model.get_metrics()
        metrics = self.merge_workers_metrics(metrics)
        model.reset_metrics()

        return metrics, from_numpy_dataset(predictions)
Exemplo n.º 4
0
    def predict_single(self, batch):
        prev_model_training_mode = self.model.training  # store previous model training mode
        self.model.eval()  # set model to eval mode

        with torch.no_grad():
            predictions = defaultdict(list)
            preds = self._predict(self.model, batch)
            self._accumulate_preds(preds, predictions)
            self._concat_preds(predictions)

        # reset model to its original training mode
        self.model.train(prev_model_training_mode)
        return from_numpy_dataset(predictions)
Exemplo n.º 5
0
 def predict_single(self, batch):
     predictions = defaultdict(list)
     preds = self._predict(self.model, batch)
     self._accumulate_preds(preds, predictions)
     self._concat_preds(predictions)
     return from_numpy_dataset(predictions)