import tensorflow as tf import pandas as pd from glob import glob, fnmatch from argparse import ArgumentParser parser = ArgumentParser(description="Extract metrics from TF logs.") parser.add_argument('--log', '-d', dest="pattern", default="./eval/event*", help="Glob pattern for TF event logs.") parser.add_argument('--output', '-o', dest="output", default="./metrics.csv", help="Name of output csv file.") parser.add_argument('metric', default=['*'], nargs='*', type=str, help="Metrics to extract"); args = parser.parse_args() def extract_metrics(path): runlog = pd.DataFrame(columns=['metric', 'value']) for e in tf.train.summary_iterator(path): for v in e.summary.value: if any([fnmatch.fnmatch(v.tag, pattern) for pattern in args.metric]): runlog = runlog.append({ 'metric': v.tag, 'value':v.simple_value }, ignore_index=True) return runlog metrics = pd.DataFrame() for path in glob(args.pattern): try: metrics = metrics.append(extract_metrics(path)) except: print(f'Event file corrupted: {path}, skipping...') print(metrics) metrics.to_csv(args.output)