MCPcopy Create free account
hub / github.com/coperception/star / MetricLogger

Class MetricLogger

star/utils/misc.py:86–167  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected