    def __init__(self, output_dim, input_dim=None,
                 activation=None, weight_decay=None, ensemble_size=1):
        """Initializes a fully connected layer.

        Arguments:
            output_dim: (int) The dimensionality of the output of this layer.
            input_dim: (int/None) The dimensionality of the input of this layer.
            activation: (str/None) The activation function applied on the outputs.
                                    See FC._activations to see the list of allowed strings.
                                    None applies the identity function.
            weight_decay: (float) The rate of weight decay applied to the weights of this layer.
            ensemble_size: (int) The number of networks in the ensemble within which this layer will be used.
        """
        # Set layer parameters
        self.input_dim, self.output_dim = input_dim, output_dim
        self.activation = activation
        self.weight_decay = weight_decay
        self.ensemble_size = ensemble_size

        # Initialize internal state
        self.variables_constructed = False
        self.weights, self.biases = None, None
        self.decays = None
Initializes a fully connected layer.

Arguments:
output_dim: (int) The dimensionality of the output of this layer.
input_dim: (int/None) The dimensionality of the input of this layer.
activation: (str/None) The activation function applied on the outputs.
See FC._activations to see the list of allowed strings.
None applies the identity function.
weight_decay: (float) The rate of weight decay applied to the weights of this layer.
ensemble_size: (int) The number of networks in the ensemble within which this layer will be used.
mbpo/models/fc.py