Create a linear regression network for performing SVRG optimization.
    Parameters
    ----------
    batch_size: int
        Size of data split
    update_freq: int
        Update Frequency for calculating full gradients

    Returns
    ----------
    di: mx.io.NDArrayIter
        Data iterator
    update_freq: SVRGModule
        An instance of SVRGModule for performing SVRG optimization

def create_network(batch_size, update_freq):
    """Create a linear regression network for performing SVRG optimization.
    Parameters
    ----------
    batch_size: int
        Size of data split
    update_freq: int
        Update Frequency for calculating full gradients

    Returns
    ----------
    di: mx.io.NDArrayIter
        Data iterator
    update_freq: SVRGModule
        An instance of SVRGModule for performing SVRG optimization
    """
    import logging
    head = '%(asctime)-15s %(message)s'
    logging.basicConfig(level=logging.INFO, format=head)

    train_data = np.random.randint(1, 5, [1000, 2])
    weights = np.array([1.0, 2.0])
    train_label = train_data.dot(weights)

    di = mx.io.NDArrayIter(train_data, train_label, batch_size=batch_size, shuffle=True, label_name='lin_reg_label')
    X = mx.sym.Variable('data')
    Y = mx.symbol.Variable('lin_reg_label')
    fully_connected_layer = mx.sym.FullyConnected(data=X, name='fc1', num_hidden=1)
    lro = mx.sym.LinearRegressionOutput(data=fully_connected_layer, label=Y, name="lro")

    mod = SVRGModule(
        symbol=lro,
        data_names=['data'],
        label_names=['lin_reg_label'], update_freq=update_freq, logger=logging
    )

    return di, mod