import numpy as np def aggregate_loss_dict(agg_loss_dict): mean_vals = {} for output in agg_loss_dict: for key in output: mean_vals[key] = mean_vals.setdefault(key, []) + [output[key]] for key in mean_vals: if len(mean_vals[key]) > 0: mean_vals[key] = sum(mean_vals[key]) / len(mean_vals[key]) else: print(f'{key} has no value') mean_vals[key] = 0 return mean_vals def compute_cosine_weights(x): """ Computes weights to be used in the id loss function with minimum value of 0.5 and maximum value of 1. """ values = np.abs(x.cpu().detach().numpy()) assert np.min(values) >= 0. and np.max(values) <= 1., "Input values should be between 0. and 1!" weights = 0.25 * (np.cos(np.pi * values)) + 0.75 return weights