You are correct that functional form allows specifying weights. However, the two sets of weights would need to be registered as module parameters to be trained. Currently your self.fc1, self.mean and self.std have nothing to do with the forward function. So even that they are included in named_parameters, they are not really useful. Also I’m not sure why mean and std are linear layers. Their names seem to imply that they should be computed statistics.
To achieve two sets of weights, I think it would be simpler to register two layers and use a flag to control which set to use, e.g. something like
class DoubleWeightLinear(nn.Module):
  def __init__(self, n_in, n_out):
    super().__init__()
    self.l1 = nn.Linear(n_in, n_out)
    self.l2 = nn.Linear(n_in, n_out)

  def forward(self, x, use_first):
    if use_first:
      return self.l1(x)
    else:
      return self.l2(x)