MLP
MLP is the standard fully connected PhiJAX architecture. Its factory supports input normalization, coordinate
features, dropout, independent output networks, and alternative dense-layer parameterizations.
Transformation order
The architecture applies optional operations in this order:
input normalization
-> periodic coordinate features
-> random Fourier features
-> hidden dense layers, activations, and dropout
-> output layer and optional output activation
Built-in architectures use the public ActivationName and InitializationName aliases. They also accept custom
Activation and Initializer callables.
| Option | Built-in names |
|---|---|
activation |
"relu", "leakyrelu", "gelu", "tanh", "sigmoid", "silu" |
initialization |
"kaiming_normal", "xavier_uniform", "trunc_normal" or None |
one_mlp_per_output=True creates an independent scalar network per output. weight_norm and
weight_factorization are mutually exclusive. Stochastic dropout requires deterministic=False and an explicit
dropout_key.
Factory example
from functools import partial
from phijax.models import build_mlp
model_factory = partial(
build_mlp,
input_dim=2,
output_dim=1,
hidden=(128, 128, 128, 128),
activation="tanh",
input_norm=True,
)
See Layers for periodic features, random Fourier features, and factorized dense layers.
API reference
MLP
[source]
MLP(
input_dim: int,
output_dim: int,
hidden: Sequence[int] | None = (128,),
activation: ActivationName | Activation | None = "silu",
activation_kwargs: Mapping[str, Any] | None = None,
output_activation: ActivationName
| Activation
| None = None,
output_activation_kwargs: Mapping[str, Any]
| None = None,
output_names: Sequence[str] | None = None,
dropout: float = 0.0,
initialization: InitializationName
| Initializer
| None = "xavier_uniform",
initialization_kwargs: Mapping[str, Any] | None = None,
one_mlp_per_output: bool = False,
weight_norm: bool = False,
weight_factorization: bool = False,
weight_factorization_kwargs: Mapping[str, Any]
| None = None,
periodic_features: bool = False,
periodic_features_kwargs: Mapping[str, Any]
| None = None,
fourier_features: bool = False,
fourier_features_kwargs: Mapping[str, Any]
| None = None,
input_norm: bool = False,
input_norm_eps: float = 1e-08,
compute_dtype: Any = jnp.float32,
parameter_dtype: Any = jnp.float32,
output_dtype: Any = jnp.float32,
*,
rngs: Rngs,
)
Bases: Module
Implement a dynamic multilayer perceptron with functional JAX state.
Attributes:
| Name | Type | Description |
|---|---|---|
periodic_embedding |
Optional fixed periodic coordinate mapping. |
|
embedding |
Optional random Fourier feature mapping. |
|
networks |
One shared network or one scalar-output network per output. |
Initialize a configurable MLP.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
input_dim
|
int
|
Width of the input vector. |
required |
output_dim
|
int
|
Width of the output vector. |
required |
hidden
|
Sequence[int] | None
|
Width of each hidden layer. |
(128,)
|
activation
|
ActivationName | Activation | None
|
Hidden activation name, callable, or |
'silu'
|
activation_kwargs
|
Mapping[str, Any] | None
|
Keyword arguments bound to each hidden activation. |
None
|
output_activation
|
ActivationName | Activation | None
|
Optional output activation name or callable. |
None
|
output_activation_kwargs
|
Mapping[str, Any] | None
|
Keyword arguments bound to the output activation. |
None
|
output_names
|
Sequence[str] | None
|
Optional unique names for scalar outputs. |
None
|
dropout
|
float
|
Hidden-activation dropout rate. Stochastic calls require an explicit key. |
0.0
|
initialization
|
InitializationName | Initializer | None
|
Dense-kernel initializer name, callable, or |
'xavier_uniform'
|
initialization_kwargs
|
Mapping[str, Any] | None
|
Keyword arguments forwarded to the initializer factory. |
None
|
one_mlp_per_output
|
bool
|
Whether to construct an independent scalar network for each output. |
False
|
weight_norm
|
bool
|
Whether to wrap dense layers with NNX weight normalization. |
False
|
weight_factorization
|
bool
|
Whether to use random weight-factorized dense layers. |
False
|
weight_factorization_kwargs
|
Mapping[str, Any] | None
|
Options for :class: |
None
|
periodic_features
|
bool
|
Whether to replace selected coordinates with fixed cosine and sine features. |
False
|
periodic_features_kwargs
|
Mapping[str, Any] | None
|
Options for :class: |
None
|
fourier_features
|
bool
|
Whether to embed inputs with random Fourier features. |
False
|
fourier_features_kwargs
|
Mapping[str, Any] | None
|
Options for :class: |
None
|
input_norm
|
bool
|
Whether to apply explicit per-input mean and standard deviation arrays. |
False
|
input_norm_eps
|
float
|
Minimum standard deviation used during normalization. |
1e-08
|
compute_dtype
|
Any
|
Data type used for model arithmetic while parameters remain |
float32
|
parameter_dtype
|
Any
|
Data type used to initialize trainable parameters. |
float32
|
output_dtype
|
Any
|
Data type returned by the network. |
float32
|
rngs
|
Rngs
|
NNX random streams used for parameter initialization. |
required |
Raises:
| Type | Description |
|---|---|
TypeError
|
If |
ValueError
|
If dimensions, names, dropout, normalization, or layer options are invalid. |
slice_output
[source]
Return an index tuple selecting one named scalar output.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Output name registered in |
required |
Returns:
| Type | Description |
|---|---|
tuple[EllipsisType, slice]
|
An index of the form |
Raises:
| Type | Description |
|---|---|
ValueError
|
If output names were not configured. |
KeyError
|
If |
__call__
[source]
__call__(
inputs: Array,
input_mean: Array | None = None,
input_std: Array | None = None,
*,
deterministic: bool = True,
dropout_key: Array | None = None,
) -> jax.Array
Evaluate the MLP without mutating model state.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
inputs
|
Array
|
Input array with final width |
required |
input_mean
|
Array | None
|
Optional per-input normalization mean. |
None
|
input_std
|
Array | None
|
Optional per-input normalization standard deviation. |
None
|
deterministic
|
bool
|
Whether to disable configured dropout. |
True
|
dropout_key
|
Array | None
|
Explicit PRNG key required for stochastic dropout. |
None
|
Returns:
| Type | Description |
|---|---|
Array
|
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If input width or normalization arrays are invalid, or stochastic dropout lacks a key. |
build_mlp
[source]
build_mlp(
key: Array,
input_dim: int,
output_dim: int,
input_mean: ArrayLike | None = None,
input_std: ArrayLike | None = None,
*,
precision: PrecisionName
| PrecisionPolicy
| None = None,
**model_kwargs: Any,
) -> InitializedModel
Build a normalized MLP through the generic initialized-model contract.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
Array
|
JAX PRNG key for deterministic parameter initialization. |
required |
input_dim
|
int
|
Width of the input vector. |
required |
output_dim
|
int
|
Width of the predicted output vector. |
required |
input_mean
|
ArrayLike | None
|
Optional array-like per-coordinate input normalization mean. |
None
|
input_std
|
ArrayLike | None
|
Optional array-like per-coordinate input normalization standard deviation. |
None
|
precision
|
PrecisionName | PrecisionPolicy | None
|
Optional model precision policy. |
None
|
**model_kwargs
|
Any
|
Architecture options forwarded to :class: |
{}
|
Returns:
| Type | Description |
|---|---|
InitializedModel
|
Pure model application, explicit NNX state, and model-summary callable. |