|
- # Copyright (c) 2022 Zhipu.AI
-
- import glob
- import os
- import statistics
- import sys
-
- import json
-
- path_pattern = sys.argv[1]
- target_type = sys.argv[2]
- best_value, best_result, best_name = None, None, None
- mean_result = {}
- print(path_pattern)
- for dir_path in glob.glob(path_pattern, recursive=True):
- entry = os.path.basename(dir_path)
- valid_result = None
- test_found = os.path.exists(os.path.join(dir_path, 'test_results.json'))
- valid_path = os.path.join(dir_path, 'results.json')
- if os.path.exists(valid_path):
- print(entry)
- with open(valid_path, encoding='utf-8') as file:
- valid_result = json.load(file)
- else:
- print(f'{entry} no validation results')
- continue
- if not test_found:
- print(f'{entry} not tested yet')
- if target_type == 'max':
- metric = sys.argv[3]
- metric_value = valid_result[metric]
- if best_value is None or metric_value > best_value:
- best_value = metric_value
- best_result = valid_result
- best_name = entry
- elif target_type == 'mean' or target_type == 'median':
- if mean_result:
- for metric, value in valid_result.items():
- if metric not in ['type', 'epoch']:
- mean_result[metric].append(value)
- else:
- mean_result = {
- metric: [value]
- for metric, value in valid_result.items()
- if metric not in ['type', 'epoch']
- }
-
- if target_type == 'max':
- print(f'Best result found at {best_name}: {best_result}')
- elif target_type == 'mean':
- mean_result = {
- metric: sum(value) / len(value)
- for metric, value in mean_result.items()
- }
- print(f'Mean result {mean_result}')
- elif target_type == 'median':
- mean_result = {
- metric: statistics.median(value)
- for metric, value in mean_result.items()
- }
- print(f'Mean result {mean_result}')
|