'Initializes NN block.
Args:
depth: The depth of the output.
bias: An initializer for the bias, or a Bias class object. If None, there
will be no bias term for this NN block. See BiasAdd block.
act: Optional activation function. If None, no activation is applied.
initializer: The initialization method for the matrix weights.
linear_block_factory: A function used to create a linear block.
name: The name of this block.'

def __init__(self, depth, bias=Bias(0), act=None, initializer=block_util.RsqrtInitializer(), linear_block_factory=(lambda d, i: Linear(d, initializer=i)), name=None):

    super(NN, self).__init__(name)
    with self._BlockScope():
        self._linear_block_factory = linear_block_factory
        self._depth = depth
        self._initializer = initializer
        self._matrices = None
        self._bias = (BiasAdd(bias) if bias else PassThrough())
        self._act = (act if act else PassThrough())
