tools/parse_log.py (41 lines of code) (raw):

#!/usr/bin/env python """ parse mxnet output log into a markdown table """ import argparse import sys import re parser = argparse.ArgumentParser(description='Parse mxnet output log') parser.add_argument('logfile', nargs=1, type=str, help = 'the log file for parsing') parser.add_argument('--format', type=str, default='markdown', choices = ['markdown', 'none'], help = 'the format of the parsed outout') args = parser.parse_args() with open(args.logfile[0]) as f: lines = f.readlines() res = [re.compile('.*Epoch\[(\d+)\] Train.*=([.\d]+)'), re.compile('.*Epoch\[(\d+)\] Valid.*=([.\d]+)'), re.compile('.*Epoch\[(\d+)\] Time.*=([.\d]+)')] data = {} for l in lines: i = 0 for r in res: m = r.match(l) if m is not None: break i += 1 if m is None: continue assert len(m.groups()) == 2 epoch = int(m.groups()[0]) val = float(m.groups()[1]) if epoch not in data: data[epoch] = [0] * len(res) * 2 data[epoch][i*2] += val data[epoch][i*2+1] += 1 if args.format == 'markdown': print "| epoch | train-accuracy | valid-accuracy | time |" print "| --- | --- | --- | --- |" for k, v in data.items(): print "| %2d | %f | %f | %.1f |" % (k+1, v[0]/v[1], v[2]/v[3], v[4]/v[5]) elif args.format == 'none': print "epoch\ttrain-accuracy\tvalid-accuracy\ttime" for k, v in data.items(): print "%2d\t%f\t%f\t%.1f" % (k+1, v[0]/v[1], v[2]/v[3], v[4]/v[5])