MCPcopy Create free account
hub / github.com/LTH14/mar / MetricLogger

Class MetricLogger

util/misc.py:82–163  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

80
81
82class MetricLogger(object):
83 def __init__(self, delimiter="\t"):
84 self.meters = defaultdict(SmoothedValue)
85 self.delimiter = delimiter
86
87 def update(self, **kwargs):
88 for k, v in kwargs.items():
89 if v is None:
90 continue
91 if isinstance(v, torch.Tensor):
92 v = v.item()
93 assert isinstance(v, (float, int))
94 self.meters[k].update(v)
95
96 def __getattr__(self, attr):
97 if attr in self.meters:
98 return self.meters[attr]
99 if attr in self.__dict__:
100 return self.__dict__[attr]
101 raise AttributeError("'{}' object has no attribute '{}'".format(
102 type(self).__name__, attr))
103
104 def __str__(self):
105 loss_str = []
106 for name, meter in self.meters.items():
107 loss_str.append(
108 "{}: {}".format(name, str(meter))
109 )
110 return self.delimiter.join(loss_str)
111
112 def synchronize_between_processes(self):
113 for meter in self.meters.values():
114 meter.synchronize_between_processes()
115
116 def add_meter(self, name, meter):
117 self.meters[name] = meter
118
119 def log_every(self, iterable, print_freq, header=None):
120 i = 0
121 if not header:
122 header = ''
123 start_time = time.time()
124 end = time.time()
125 iter_time = SmoothedValue(fmt='{avg:.4f}')
126 data_time = SmoothedValue(fmt='{avg:.4f}')
127 space_fmt = ':' + str(len(str(len(iterable)))) + 'd'
128 log_msg = [
129 header,
130 '[{0' + space_fmt + '}/{1}]',
131 'eta: {eta}',
132 '{meters}',
133 'time: {time}',
134 'data: {data}'
135 ]
136 if torch.cuda.is_available():
137 log_msg.append('max mem: {memory:.0f}')
138 log_msg = self.delimiter.join(log_msg)
139 MB = 1024.0 * 1024.0

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected