Spaces:
Running
Running
| import numpy as np | |
| class AverageMeter(object): | |
| """Computes and stores the average and current value""" | |
| def __init__(self): | |
| self.reset() | |
| def reset(self): | |
| self.val = 0 | |
| self.avg = 0 | |
| self.sum = 0 | |
| self.count = 0 | |
| def update(self, val, n=1): | |
| self.val = val | |
| self.sum += val * n | |
| self.count += n | |
| self.avg = self.sum / self.count | |
| def correct_preds(probs, labels, tol=-1): | |
| """ | |
| Gets correct events in full-length sequence using tolerance based on number of frames from address to impact. | |
| Used during validation only. | |
| :param probs: (sequence_length, 9) | |
| :param labels: (sequence_length,) | |
| :return: array indicating correct events in predicted sequence (8,) | |
| """ | |
| events = np.where(labels < 8)[0] | |
| preds = np.zeros(len(events)) | |
| if tol == -1: | |
| tol = int(max(np.round((events[5] - events[0])/30), 1)) | |
| for i in range(len(events)): | |
| preds[i] = np.argsort(probs[:, i])[-1] | |
| deltas = np.abs(events-preds) | |
| correct = (deltas <= tol).astype(np.uint8) | |
| return events, preds, deltas, tol, correct | |
| def freeze_layers(num_freeze, net): | |
| # print("Freezing {:2d} layers".format(num_freeze)) | |
| i = 1 | |
| for child in net.children(): | |
| if i ==1: | |
| j = 1 | |
| for child_child in child.children(): | |
| if j <= num_freeze: | |
| for param in child_child.parameters(): | |
| param.requires_grad = False | |
| j += 1 | |
| i += 1 |