MultiLayerPerceptron#

class deeplay.components.mlp.MultiLayerPerceptron(*args, **kwargs)#

Bases: DeeplayModule

Multi-layer perceptron module.

Also commonly known as a fully-connected neural network, or a dense neural network.

Configurables#

  • in_features (int): Number of input features. If None, the input shape is inferred in the first forward pass. (Default: None)

  • hidden_features (list[int]): Number of hidden units in each layer.

  • out_features (int): Number of output features. (Default: 1)

  • blocks (template-like): Specification for the blocks of the MLP. (Default: “layer” >> “activation” >> “normalization” >> “dropout”)
    • layer (template-like): Specification for the layer of the block. (Default: nn.Linear)

    • activation (template-like): Specification for the activation of the block. (Default: nn.ReLU)

    • normalization (template-like): Specification for the normalization of the block. (Default: nn.Identity)

  • out_activation (template-like): Specification for the output activation of the MLP. (Default: nn.Identity)

Shorthands#

  • input: Equivalent to .blocks[0].

  • hidden: Equivalent to .blocks[:-1].

  • output: Equivalent to .blocks[-1].

  • layer: Equivalent to .blocks.layer.

  • activation: Equivalent to .blocks.activation.

  • normalization: Equivalent to .blocks.normalization.

  • dropout: Equivalent to .blocks.dropout.

Evaluation#

>>> for block in mlp.blocks:
>>>    x = block(x)
>>> return x

Examples#

>>> mlp = MultiLayerPerceptron(28 * 28, [128, 128], 10)
>>> mlp.hidden.normalization.configure(nn.BatchNorm1d)
>>> mlp.output.activation.configure(nn.Softmax)
>>> mlp.layer.configure(bias=False)
>>> mlp.build()

Return Values#

The forward method returns the processed tensor.

Attributes Summary

activation

Return the activations of the network.

dropout

Return the dropout of the network.

hidden

Return the hidden layers of the network.

input

Return the input layer of the network.

layer

Return the layers of the network.

normalization

Return the normalizations of the network.

output

Return the last layer of the network.

Methods Summary

configure(*args, **kwargs)

Configures the module with specified arguments.

forward(x)

Define the computation performed at every call.

Attributes Documentation

activation#

Return the activations of the network. Equivalent to .blocks.activation.

dropout#

Return the dropout of the network. Equivalent to .blocks.dropout.

hidden#

Return the hidden layers of the network. Equivalent to .blocks[:-1]

input#

Return the input layer of the network. Equivalent to .blocks[0].

layer#

Return the layers of the network. Equivalent to .blocks.layer.

normalization#

Return the normalizations of the network. Equivalent to .blocks.normalization.

output#

Return the last layer of the network. Equivalent to .blocks[-1].

Methods Documentation

configure(*args: Any, **kwargs: Any)#

Configures the module with specified arguments.

This method allows dynamic configuration of the module’s properties and behaviors. It can be used to set or modify the attributes and parameters of the module and, if applicable, its child modules. The method intelligently handles both direct attribute configuration and delegation to child modules’ configure methods.

Parameters#

*argsAny

Positional arguments specifying the configuration settings. When the first argument is a string matching a configurable attribute, the method expects either one or two arguments: the attribute name and, optionally, its value. If the attribute is itself a DeeplayModule, subsequent arguments are passed to its configure method.

**kwargsAny

Keyword arguments for configuration settings. If provided, these are used to update the module’s configuration directly.

Raises#

ValueError

Raised if a configuration key is not recognized as a valid configurable for the module or if the provided arguments do not match the expected pattern for configuration.

Example Usage#

To configure a single attribute: ` module.configure('attribute_name', attribute_value) # or module.configure(attribute_name=attribute_value) `

To configure multiple attributes using keyword arguments: ` module.configure(attribute1=value1, attribute2=value2) `

To configure a child module’s attribute: ` module.configure('child_module_attribute', child_attribute=child_attribute_value) # or module.child_module.configure(child_attribute=child_attribute_value) `

forward(x)#

Define the computation performed at every call.

Should be overridden by all subclasses.

Note

Although the recipe for forward pass needs to be defined within this function, one should call the Module instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.