Beispiel #1
0
    def __check__(self):

        Objective.__check__(self)
            
        # arrays
        self.edge = atleast_2d_col(self.edge)
        if not isinstance(self.scale,VyPy.data.scaling.ScalingFunction):
            self.scale = atleast_2d_col(self.scale)
Beispiel #2
0
    def __check__(self):

        # evaluator class
        if not isinstance(self.evaluator, Evaluator):
            self.evaluator = Evaluator(function=self.evaluator)
        
        # gradients and hessians
        if self.evaluator.gradient is None:
            self.gradient = None
        if self.evaluator.hessian is None:
            self.hessian = None
            
        # arrays
        self.edge = atleast_2d_col(self.edge)
        if not isinstance(self.scale,VyPy.data.scaling.ScalingFunction):
            self.scale = atleast_2d_col(self.scale)
Beispiel #3
0
    def __init__(self, XB, X, Y, DY=None):

        # make sure all are 2D arrays
        XB = atleast_2d_row(XB)
        X = atleast_2d_row(X)
        Y = atleast_2d_col(Y)

        # sizes
        ntx, nx = X.shape
        nty, ny = Y.shape
        assert ntx == nty, 'different training data X and targets Y'
        assert XB.shape[
            0] == nx, 'different training data X and bounds XB dimension'
        assert ny == 1, 'training targets Y must be a column vector'

        # handle optional gradients
        if DY is None:
            DY = np.empty([0, nx])
            ntdy, ndy = DY.shape
        else:
            DY = atleast_2d_row(DY)
            ntdy, ndy = DY.shape
            assert ntx == ntdy, 'different training data X and target gradients DY'

        # make sure data is of type float
        X = X.astype(float)
        Y = Y.astype(float)
        DY = DY.astype(float)
        XB = XB.astype(float)

        # store data
        self['X'] = X
        self['Y'] = Y
        self['DY'] = DY
        self['XB'] = XB
Beispiel #4
0
    def __call__(self, variables):

        step = self.step

        variables = deepcopy(variables)

        if not isinstance(variables, obunch):
            variables = obunch(variables)

        # arrayify variables
        values_init = variables.pack_array('vector')
        values_init = atleast_2d_row(values_init)
        nx = values_init.shape[1]

        # prepare step
        if not isinstance(step, (array_type, list, tuple)):
            step = [step] * nx
        step = atleast_2d_row(step)
        if not step.shape[0] == 1:
            step = step.T

        values_run = np.vstack(
            [values_init,
             np.tile(values_init, [nx, 1]) + np.diag(step[0])])
        variables_run = [
            deepcopy(variables).unpack_array(val) for val in values_run
        ]

        # run the function
        #for i in variables_run: print i
        results = self.function(variables_run)
        #for i in results: print i

        results_values = np.vstack(
            [atleast_2d_row(res.pack_array('vector')) for res in results])

        # pack results
        gradients_values = (results_values[1:, :] -
                            results_values[None, 0, :]) / step.T
        gradients_values = np.ravel(gradients_values)

        variables = variables.unpack_array(values_init[0] * 0.0)

        gradients = deepcopy(results[0])
        if not isinstance(gradients, obunch):
            gradients = obunch(gradients)

        for i, g in gradients.items():
            if isinstance(g, array_type):
                g = atleast_2d_col(g)
            gradients[i] = deepcopy(variables)
            for j, v in gradients[i].items():
                if isinstance(v, array_type):
                    v = atleast_2d_row(v)
                gradients[i][j] = g * v

        gradients.unpack_array(gradients_values)

        return gradients
 def __call__(self,variables):
     
     step = self.step
     
     variables = deepcopy(variables)
     
     if not isinstance(variables,obunch):
         variables = obunch(variables)
         
     # arrayify variables
     values_init = variables.pack_array('vector')
     values_init = atleast_2d_row(values_init)
     nx = values_init.shape[1]
     
     # prepare step
     if not isinstance(step,(array_type,list,tuple)):
         step = [step] * nx
     step = atleast_2d_row(step)
     if not step.shape[0] == 1:
         step = step.T
     
     values_run = np.vstack([ values_init , 
                              np.tile(values_init,[nx,1]) + np.diag(step[0]) ])
     variables_run = [ deepcopy(variables).unpack_array(val) for val in values_run ]
         
     # run the function
     #for i in variables_run: print i
     results = self.function(variables_run)
     #for i in results: print i
     
     results_values = np.vstack([ atleast_2d_row( res.pack_array('vector') ) for res in results ])
     
     # pack results
     gradients_values = ( results_values[1:,:] - results_values[None,0,:] ) / step.T
     gradients_values = np.ravel( gradients_values )
     
     variables = variables.unpack_array( values_init[0] * 0.0 )
     
     gradients = deepcopy(results[0])
     if not isinstance(gradients,obunch):
         gradients = obunch(gradients)
         
     for i,g in gradients.items():
         if isinstance(g,array_type):
             g = atleast_2d_col(g)
         gradients[i] = deepcopy(variables)
         for j,v in gradients[i].items():
             if isinstance(v,array_type):
                 v = atleast_2d_row(v)
             gradients[i][j] = g * v
     
     gradients.unpack_array(gradients_values)
     
     return gradients
     
 def __call__(self,variables):
     
     step = self.step
     
     variables = deepcopy(variables)
     
     if not isinstance(variables,obunch):
         variables = obunch(variables)
         
     # arrayify variables
     values_init = variables.pack_array('vector')
     values_init = atleast_2d_row(values_init)
     nx = values_init.shape[1]
     
     # prepare step
     if not isinstance(step,(array_type,list,tuple)):
         step = [step] * nx
     step = atleast_2d_col(step)
     if not step.shape[1] == 1:
         step = step.T
     
     values_run = np.hstack([ values_init , 
                              np.tile(values_init,[nx,1]) + np.diag(step) ])
         
     # run the function
     results = self.function(values_run)
     
     # pack results
     gradients_values = ( results[1:,:] - results[None,0,:] ) / step
     gradients_values = np.ravel(gradients_values)
     
     variables.unpack_array( values_init * 0.0 )
     
     gradients = deepcopy(results[0])
     for k in gradients.keys():
         gradients[k] = deepcopy(variables)
     
     gradients.unpack_array(gradients_values)
     
     return gradients