Source code for pipeline.utils.modelutils.mlp

"""A module that defines utilities for building multi-layer perceptrons.
"""
from __future__ import annotations
import typing
import torch.nn as nn


[docs]def make_mlp( input_size: int, sizes: typing.List[int], hidden_activation: str | None = "ReLU", output_activation: str | None = "ReLU", layer_norm: bool = False, ) -> nn.Sequential: """Construct an MLP with specified fully-connected layers.""" layers = [] n_layers = len(sizes) sizes = [input_size] + sizes # Hidden layers for i in range(n_layers - 1): layers.append(nn.Linear(sizes[i], sizes[i + 1])) if layer_norm: layers.append(nn.LayerNorm(sizes[i + 1])) if hidden_activation is not None: layers.append(getattr(nn, hidden_activation)()) # Final layer layers.append(nn.Linear(sizes[-2], sizes[-1])) if output_activation is not None: if layer_norm: layers.append(nn.LayerNorm(sizes[-1])) layers.append(getattr(nn, output_activation)()) return nn.Sequential(*layers)