Source code for tsl.nn.layers.base.dense
from torch import nn
from tsl.nn import utils
[docs]class Dense(nn.Module):
r"""A simple fully-connected layer implementing
.. math::
\mathbf{x}^{\prime} = \sigma\left(\boldsymbol{\Theta}\mathbf{x} +
\mathbf{b}\right)
where :math:`\mathbf{x} \in \mathbb{R}^{d_{in}}, \mathbf{x}^{\prime} \in
\mathbb{R}^{d_{out}}` are the input and output features, respectively,
:math:`\boldsymbol{\Theta} \in \mathbb{R}^{d_{out} \times d_{in}} \mathbf{b}
\in \mathbb{R}^{d_{out}}` are trainable parameters, and :math:`\sigma` is
an activation function.
Args:
input_size (int): Number of input features.
output_size (int): Number of output features.
activation (str, optional): Activation function to be used.
(default: :obj:`'relu'`)
dropout (float, optional): The dropout rate.
(default: :obj:`0`)
bias (bool, optional): If :obj:`True`, then the bias vector is used.
(default: :obj:`True`)
"""
def __init__(self,
input_size: int,
output_size: int,
activation: str = 'relu',
dropout: float = 0.,
bias: bool = True):
super(Dense, self).__init__()
self.affinity = nn.Linear(input_size, output_size, bias=bias)
self.activation = utils.get_layer_activation(activation)()
self.dropout = nn.Dropout(dropout) if dropout > 0. else nn.Identity()
def reset_parameters(self) -> None:
""""""
self.affinity.reset_parameters()
def forward(self, x):
""""""
out = self.activation(self.affinity(x))
return self.dropout(out)