Merge pull request !810 from YuhanShi/ExplainJob_v1.1tags/v1.1.0
| @@ -27,6 +27,8 @@ _IMAGE_DATA_TAGS = { | |||
| 'explanation': PluginNameEnum.EXPLANATION.value | |||
| } | |||
| _NUM_DIGIT = 7 | |||
| class EventParser: | |||
| """Parser for event data.""" | |||
| @@ -57,7 +59,7 @@ class EventParser: | |||
| explainer_score_dict[explainer].append({ | |||
| 'metric': metric, | |||
| 'score': metric_score}) | |||
| 'score': round(metric_score, _NUM_DIGIT)}) | |||
| new_label_score_dict = EventParser._score_event_to_dict(label_score_event, metric) | |||
| for label, label_scores in new_label_score_dict.items(): | |||
| label_score_dict[explainer][label] = label_score_dict[explainer].get(label, []) + label_scores | |||
| @@ -81,8 +83,7 @@ class EventParser: | |||
| else: | |||
| self._parse_sample_info(sample, sample_id, tag) | |||
| except UnknownError as ex: | |||
| logger.warning("Parse %s data failed within image related data," | |||
| " detail: %r", tag, str(ex)) | |||
| logger.warning("Parse %s data failed within image related data, detail: %r", tag, str(ex)) | |||
| continue | |||
| if EventParser._is_ready_for_display(self._sample_pool[sample_id]): | |||
| @@ -133,7 +134,7 @@ class EventParser: | |||
| for label_id, label_score in enumerate(label_score_event): | |||
| new_label_score_dict[label_id].append({ | |||
| 'metric': metric, | |||
| 'score': label_score, | |||
| 'score': round(label_score, _NUM_DIGIT), | |||
| }) | |||
| return new_label_score_dict | |||
| @@ -26,6 +26,8 @@ from mindinsight.explainer.manager.event_parse import EventParser | |||
| from mindinsight.datavisual.data_access.file_handler import FileHandler | |||
| from mindinsight.datavisual.common.exceptions import TrainJobNotExistError | |||
| _NUM_DIGIT = 7 | |||
| class ExplainJob: | |||
| """ExplainJob which manage the record in the summary file.""" | |||
| @@ -255,7 +257,7 @@ class ExplainJob: | |||
| ground_truth_probs + predicted_probs): | |||
| inference_info[label] = { | |||
| 'label': self._labels_info[label]['label'], | |||
| 'confidence': prob, | |||
| 'confidence': round(prob, _NUM_DIGIT), | |||
| 'saliency_maps': []} | |||
| if EventParser.is_attr_ready(sample_data, 'explanation'): | |||
| @@ -281,6 +283,7 @@ class ExplainJob: | |||
| Return: | |||
| string, image data in base64 byte | |||
| """ | |||
| return self._image_dict.get(image_id, None) | |||
| @@ -60,18 +60,19 @@ class ExplainManager: | |||
| if not self._reload_interval: | |||
| break | |||
| time.sleep(self._reload_interval) | |||
| except UnknownError: | |||
| except UnknownError as ex: | |||
| logger.exception(ex) | |||
| logger.error('Unknown Error raise when loading summary files, status: %r, and loader pool size is %r.' | |||
| 'Detail: %s', self._status, len(self._loader_pool), str(ex)) | |||
| self._status = _ExplainManagerStatus.INVALID.value | |||
| def _load_data(self): | |||
| """Loading the summary in the given base directory.""" | |||
| logger.info( | |||
| 'Start to load data, reload interval: %r.', self._reload_interval) | |||
| logger.info('Start to load data, reload interval: %r.', self._reload_interval) | |||
| with self._status_mutex: | |||
| if self._status == _ExplainManagerStatus.LOADING.value: | |||
| logger.info('Current status is %s, will ignore to load data.', | |||
| self._status) | |||
| logger.info('Current status is %s, will ignore to load data.', self._status) | |||
| return | |||
| self._status = _ExplainManagerStatus.LOADING.value | |||
| @@ -87,8 +88,7 @@ class ExplainManager: | |||
| else: | |||
| self._status = _ExplainManagerStatus.DONE.value | |||
| logger.info('Load event data end, status: %r, ' | |||
| 'and loader pool size is %r', | |||
| logger.info('Load event data end, status: %r, and loader pool size is %r', | |||
| self._status, len(self._loader_pool)) | |||
| def _update_loader_latest_update_time(self, loader_id, latest_update_time=None): | |||
| @@ -206,8 +206,8 @@ class ExplainManager: | |||
| return | |||
| loader.load() | |||
| except MindInsightException as e: | |||
| logger.warning('Data loader %r load data failed. Delete data_loader. Detail: %s', loader_id, e) | |||
| except MindInsightException as ex: | |||
| logger.warning('Data loader %r load data failed. Delete data_loader. Detail: %s', loader_id, ex) | |||
| with self._loader_pool_mutex: | |||
| self._delete_loader(loader_id) | |||
| @@ -302,8 +302,7 @@ class ExplainManager: | |||
| return None | |||
| return loader | |||
| def start_load_data(self, | |||
| reload_interval=_MAX_INTERVAL): | |||
| def start_load_data(self, reload_interval=_MAX_INTERVAL): | |||
| """ | |||
| Start threads for loading data. | |||