nnopinf.operators.MatrixOperator#

class nnopinf.operators.MatrixOperator(n_outputs, acts_on, depends_on, n_hidden_layers, n_neurons_per_layer, activation=<built-in method tanh of type object>, siren_omega_0=30.0, siren_first_layer=False, fourier_features=False, fourier_variables=None, fourier_num_frequencies=2, fourier_base=2.0, fourier_scale=1.0, fourier_frequencies=None, name='MatrixOperator')[source]#

Bases: Module

\(f: (v,x) \mapsto A(v)x\)

Constructs an operator \(f: A(v)x\) for \(x \in \mathbb{R}^K, v \in \mathbb{R}^{N}\), and \(A \in \mathbb{R}^{M imes K}\) Note that the Matrix \(A\) does not need to be square

Parameters:
  • n_outputs (int) – Output dimension of the operator, i.e., M in the above description

  • acts_on (nnopinf.Variable) – The state the operators acts on, i.e., the \(x\) in \(A(v) x\)

  • depends_on (tuple of nnopinf.Variable) – The variables the operator depends on, i.e., the \(v\) in \(A(v) x\)

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

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

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

  • siren_omega_0 (float) – Frequency scale for SIREN activations.

  • siren_first_layer (bool) – If True, use a SIREN-style first layer even for non-sine activations.

  • fourier_features (bool) – If True, augment inputs with Fourier features.

  • fourier_variables (iterable of str, optional) – Variable names to augment with Fourier features. Defaults to all inputs.

  • fourier_num_frequencies (int) – Number of frequencies per variable when using Fourier features.

  • fourier_base (float) – Base for geometric progression of Fourier frequencies.

  • fourier_scale (float) – Scaling applied to Fourier frequencies.

  • fourier_frequencies (array-like, optional) – Explicit list of Fourier frequencies. Overrides fourier_num_frequencies.

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

Examples

>>> import nnopinf
>>> import nnopinf.operators
>>> x_input = nnopinf.Variable(size=3,name="x")
>>> mu_input = nnopinf.Variable(size=2,name="mu")
>>> MatrixMlp = nnopinf.operators.MatrixOperator(n_outputs=5,acts_on=x_input,depends_on=(x_input,mu_input,),n_hidden_layers=2,n_neurons_per_layer=2)
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.

Examples

>>> import nnopinf
>>> import nnopinf.operators
>>> import numpy as np
>>> x_input = nnopinf.Variable(size=3,name="x")
>>> mu_input = nnopinf.Variable(size=2,name="mu")
>>> MatrixMlp = nnopinf.operators.MatrixOperator(n_outputs = 5,acts_on=x_input,depends_on=(x_input,mu_input,),n_hidden_layers=2,n_neurons_per_layer=2)
>>> inputs = {}
>>> inputs['x'] = np.random.normal(3)
>>> inputs['mu'] = np.random.normal(2)
>>> Av,A = MatrixMlp.forward(inputs,True)