| from __future__ import absolute_import |
| from __future__ import division |
| from __future__ import print_function |
| from __future__ import unicode_literals |
| |
| import datetime |
| import time |
| import logging |
| |
| from collections import OrderedDict |
| |
| ''' |
| Utilities for logging experiment run stats, such as accuracy |
| and loss over time for different runs. Runtime arguments are stored |
| in the log. |
| ''' |
| |
| |
| class ModelTrainerLog(): |
| |
| def __init__(self, expname, runtime_args): |
| now = datetime.datetime.fromtimestamp(time.time()) |
| self.experiment_id = now.strftime('%Y%m%d_%H%M%S') |
| self.filename = "%s_%s.log" % (expname, self.experiment_id) |
| self.logstr("# %s" % str(runtime_args)) |
| self.headers = None |
| self.start_time = time.time() |
| self.last_time = self.start_time |
| self.last_input_count = 0 |
| |
| def logstr(self, str): |
| with open(self.filename, "a") as f: |
| f.write(str + "\n") |
| f.close() |
| logging.getLogger("experiment_logger").info(str) |
| |
| def log(self, input_count, batch_count, additional_values): |
| logdict = OrderedDict() |
| delta_t = time.time() - self.last_time |
| delta_count = input_count - self.last_input_count |
| self.last_time = time.time() |
| self.last_input_count = input_count |
| logdict['time'] = time.time() - self.start_time |
| logdict['input_counter'] = input_count |
| logdict['batch_count'] = batch_count |
| if delta_t > 0: |
| logdict['inputs_per_sec'] = delta_count / delta_t |
| else: |
| logdict['inputs_per_sec'] = 0.0 |
| |
| for k in sorted(additional_values.keys()): |
| logdict[k] = additional_values[k] |
| |
| # Write the headers if they are not written yet |
| if self.headers is None: |
| self.headers = logdict.keys()[:] |
| self.logstr(",".join(self.headers)) |
| |
| self.logstr(",".join([str(v) for v in logdict.values()])) |