def do_large_radius_eval(self, r, **kwargs): """ Does evaluation of lipschitz constant of a super-large radius """ assert 'domain' not in kwargs dimension = self._get_dimension(**kwargs) if not isinstance(r, list): cube = Hyperbox.build_linf_ball(np.zeros(dimension), r) return self(domain=cube, **kwargs).compute() output = [] for subr in r: cube = Hyperbox.build_linf_ball(np.zeros(dimension), subr) output.append(self(domain=cube, **kwargs).compute()) return ResultList(output)
def __init__(self, network, input_domain, backprop_domain): self.network = network self.input_domain = input_domain self.c_vector = backprop_domain # HACKETY HACK if utils.arraylike(backprop_domain): backprop_domain = Hyperbox.from_vector(backprop_domain) elif backprop_domain in [ 'l1Ball1', 'crossLipschitz', 'targetCrossLipschitz', 'trueCrossLipschitz', 'trueTargetCrossLipschitz' ]: output_dim = network.layer_sizes[-1] if backprop_domain == 'l1Ball1': radius = 1.0 else: radius = 2.0 backprop_domain = Hyperbox.build_linf_ball(np.zeros(output_dim), radius) self.backprop_domain = backprop_domain self.forward_boxes = {} self.forward_switches = {} self.backward_boxes = {} self.output_range = None self.gradient_range = None self.forward_computed = False self.backward_computed = False