示例#1
0
    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)
示例#2
0
    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