MCPcopy Create free account
hub / github.com/alinlab/SelfPatch / MetricLogger

Class MetricLogger

utils.py:293–380  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

291
292
293class MetricLogger(object):
294 def __init__(self, delimiter="\t"):
295 self.meters = defaultdict(SmoothedValue)
296 self.delimiter = delimiter
297
298 def update(self, **kwargs):
299 for k, v in kwargs.items():
300 if isinstance(v, torch.Tensor):
301 v = v.item()
302 assert isinstance(v, (float, int))
303 self.meters[k].update(v)
304
305 def __getattr__(self, attr):
306 if attr in self.meters:
307 return self.meters[attr]
308 if attr in self.__dict__:
309 return self.__dict__[attr]
310 raise AttributeError("'{}' object has no attribute '{}'".format(
311 type(self).__name__, attr))
312
313 def __str__(self):
314 loss_str = []
315 for name, meter in self.meters.items():
316 loss_str.append(
317 "{}: {}".format(name, str(meter))
318 )
319 return self.delimiter.join(loss_str)
320
321 def synchronize_between_processes(self):
322 for meter in self.meters.values():
323 meter.synchronize_between_processes()
324
325 def add_meter(self, name, meter):
326 self.meters[name] = meter
327
328 def log_every(self, iterable, print_freq, header=None):
329 i = 0
330 if not header:
331 header = ''
332 start_time = time.time()
333 end = time.time()
334 iter_time = SmoothedValue(fmt='{avg:.6f}')
335 data_time = SmoothedValue(fmt='{avg:.6f}')
336 space_fmt = ':' + str(len(str(len(iterable)))) + 'd'
337 if torch.cuda.is_available():
338 log_msg = self.delimiter.join([
339 header,
340 '[{0' + space_fmt + '}/{1}]',
341 'eta: {eta}',
342 '{meters}',
343 'time: {time}',
344 'data: {data}',
345 'max mem: {memory:.0f}'
346 ])
347 else:
348 log_msg = self.delimiter.join([
349 header,
350 '[{0' + space_fmt + '}/{1}]',

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected