MCPcopy Create free account
hub / github.com/Kitware/COAT / MetricLogger

Class MetricLogger

utils/utils.py:88–191  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

86
87
88class MetricLogger(object):
89 def __init__(self, delimiter="\t"):
90 self.meters = defaultdict(SmoothedValue)
91 self.delimiter = delimiter
92
93 def update(self, **kwargs):
94 for k, v in kwargs.items():
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(type(self).__name__, attr))
106
107 def __str__(self):
108 loss_str = []
109 for name, meter in self.meters.items():
110 loss_str.append("{}: {}".format(name, str(meter)))
111 return self.delimiter.join(loss_str)
112
113 def synchronize_between_processes(self):
114 for meter in self.meters.values():
115 meter.synchronize_between_processes()
116
117 def add_meter(self, name, meter):
118 self.meters[name] = meter
119
120 def log_every(self, iterable, print_freq, header=None):
121 i = 0
122 if not header:
123 header = ""
124 start_time = time.time()
125 end = time.time()
126 iter_time = SmoothedValue(fmt="{avg:.4f}")
127 data_time = SmoothedValue(fmt="{avg:.4f}")
128 space_fmt = ":" + str(len(str(len(iterable)))) + "d"
129 if torch.cuda.is_available():
130 log_msg = self.delimiter.join(
131 [
132 header,
133 "[{0" + space_fmt + "}/{1}]",
134 "eta: {eta}",
135 "{meters}",
136 "time: {time}",
137 "data: {data}",
138 "max mem: {memory:.0f}",
139 ]
140 )
141 else:
142 log_msg = self.delimiter.join(
143 [
144 header,
145 "[{0" + space_fmt + "}/{1}]",

Callers 1

train_one_epochFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected