Source code for pytorch_forecasting.models.mlp.submodules
"""
MLP implementation
"""
import torch
from torch import nn
[docs]class FullyConnectedModule(nn.Module):
def __init__(
self,
input_size: int,
output_size: int,
hidden_size: int,
n_hidden_layers: int,
activation_class: nn.ReLU,
dropout: float = None,
norm: bool = True,
):
super().__init__()
self.input_size = input_size
self.output_size = output_size
self.hidden_size = hidden_size
self.n_hidden_layers = n_hidden_layers
self.activation_class = activation_class
self.dropout = dropout
self.norm = norm
# input layer
module_list = [nn.Linear(input_size, hidden_size), activation_class()]
if dropout is not None:
module_list.append(nn.Dropout(dropout))
if norm:
module_list.append(nn.LayerNorm(hidden_size))
# hidden layers
for _ in range(n_hidden_layers):
module_list.extend([nn.Linear(hidden_size, hidden_size), activation_class()])
if dropout is not None:
module_list.append(nn.Dropout(dropout))
if norm:
module_list.append(nn.LayerNorm(hidden_size))
# output layer
module_list.append(nn.Linear(hidden_size, output_size))
self.sequential = nn.Sequential(*module_list)
[docs] def forward(self, x: torch.Tensor) -> torch.Tensor:
# x of shape: batch_size x n_timesteps_in
# output of shape batch_size x n_timesteps_out
return self.sequential(x)