nnopinf.operators.PsdLagrangianOperator#

class nnopinf.operators.PsdLagrangianOperator(acts_on, depends_on, n_hidden_layers, n_neurons_per_layer, activation=<built-in method tanh of type object>, positive=True, name='PsdLagrangianOperator')[source]#

Bases: Module

\(f: x \mapsto \nabla_x \mathcal{L}(x)\) where \(\mathcal{L}(x) = x^T A(x) x\) and \(A(x)\) is an SPD operator.

Constructs a Lagrangian operator whose internal scalar network is formed by an SPD operator acting on the state and then left-multiplied by the state.

Parameters:
  • acts_on (nnopinf.Variable) – The state the operator acts on, i.e., the \(x\).

  • depends_on (tuple of nnopinf.Variable) – The variables the operator depends on.

  • n_hidden_layers (int) – Number of hidden layers in the SPD network.

  • n_neurons_per_layer (int) – Number of neurons in each hidden layer.

  • activation (PyTorch activation function (e.g., torch.nn.functional.relu)) – Activation function used at each hidden layer.

  • positive (bool) – If operator is SPD or NPD.

  • name (string) – Operator name. Used when saving to file.

forward(inputs, return_jacobian=False)[source]#

Forward pass of operator

Parameters:
  • inputs (dict(str, np.array)) – Dictionary of input data in the form of arrays referenced by the variable name, i.e., inputs[‘x’] = np.ones(3)

  • return_jacobian (bool, optional) – If True, return the (approximate) Jacobian in addition to the output.

set_scalings(input_scalings_dict, output_scaling)[source]#

Store input and output scaling factors for the PSD Lagrangian operator.

Parameters:
  • input_scalings_dict (dict) – Mapping from variable name to the corresponding feature-wise input scaling vector.

  • output_scaling (tensor-like) – Feature-wise scaling vector for the operator output.