Fully Connected Network#

class physicsnemo.models.mlp.fully_connected.FullyConnected(*args, **kwargs)[source]#

Bases: Module

A densely-connected MLP architecture.

This model constructs a multi-layer perceptron with configurable depth, width, activation functions, and optional skip connections. It uses FCLayer for each hidden layer.

Parameters:
  • in_features (int, optional, default=512) – Size of input features \(D_{in}\).

  • layer_size (int, optional, default=512) – Size of every hidden layer \(D_{hidden}\).

  • out_features (int, optional, default=512) – Size of output features \(D_{out}\).

  • num_layers (int, optional, default=6) – Number of hidden layers.

  • activation_fn (Union[str, List[str]], optional, default="silu") – Activation function to use. Can be a single string or a list of strings (one per layer). Supported values include "silu", "relu", "gelu".

  • skip_connections (bool, optional, default=False) – Add skip connections every 2 hidden layers.

  • adaptive_activations (bool, optional, default=False) – Use an adaptive activation function with learnable scaling parameter.

  • weight_norm (bool, optional, default=False) – Use weight normalization on fully connected layers.

  • weight_fact (bool, optional, default=False) – Use weight factorization on fully connected layers.

Forward:

x (torch.Tensor) – Input tensor of shape \((B, D_{in})\) where \(B\) is the batch size.

Outputs:

torch.Tensor – Output tensor of shape \((B, D_{out})\).

Examples

>>> import torch
>>> import physicsnemo.models.mlp
>>> model = physicsnemo.models.mlp.FullyConnected(in_features=32, out_features=64)
>>> x = torch.randn(128, 32)
>>> output = model(x)
>>> output.shape
torch.Size([128, 64])