in mico/utils/net_utils.py [0:0]
def __init__(self, dim_input, dim_hidden, dim_output, num_layers,
activation='relu', dropout_rate=0, layer_norm=False,
residual_connection=False):
"""This model wraps a (residual) neural network in a easy-access way.
"""
super().__init__()
assert num_layers >= 0 # 0 = Linear
if num_layers > 0:
assert dim_hidden > 0
if residual_connection:
assert dim_hidden == dim_input
self.residual_connection = residual_connection
self.stack = nn.ModuleList()
for layer_idx in range(num_layers):
layer = []
if layer_norm:
layer.append(nn.LayerNorm(dim_input if layer_idx == 0 else dim_hidden))
layer.append(nn.Linear(dim_input if layer_idx == 0 else dim_hidden,
dim_hidden))
layer.append({'tanh': nn.Tanh(), 'relu': nn.ReLU()}[activation])
if dropout_rate > 0:
layer.append(nn.Dropout(dropout_rate))
self.stack.append(nn.Sequential(*layer))
self.out = nn.Linear(dim_input if num_layers < 1 else dim_hidden,
dim_output)