in models/temporal/neural.py [0:0]
def construct_diffeqnet(input_dim, hidden_dims, output_dim, time_dependent=False, actfn="softplus", zero_init=False, gated=False):
linear_fn = diffeq_layers.IgnoreLinear if time_dependent else diffeq_layers.ConcatLinear_v2
if gated:
linear_fn = GatedLinear
layers = []
if len(hidden_dims) > 0:
dims = [input_dim] + list(hidden_dims)
for d_in, d_out in zip(dims[:-1], dims[1:]):
layers.append(linear_fn(d_in, d_out))
layers.append(ActNorm(d_out))
if not gated:
layers.append(ACTFNS[actfn](d_out))
layers.append(linear_fn(hidden_dims[-1], output_dim))
else:
layers.append(linear_fn(input_dim, output_dim))
# Initialize to zero.
if zero_init:
for m in layers[-1].modules():
if isinstance(m, nn.Linear):
m.weight.data.fill_(0)
if m.bias is not None:
m.bias.data.fill_(0)
diffeqnet = diffeq_layers.SequentialDiffEq(*layers)
return diffeqnet