def LeNet_Model(s, model_name='LeNet'):
    """
    LeNet model definition (batch normalization version)

    Parameters
    ----------
    s : CAS
        Specifies the CAS connection object
    model_name : string, optional
        Specifies the name of CAS table to store the model

    Returns
    -------
    None
        A CAS table defining the model is created

    """
    s.deepLearn.buildModel(model=dict(name=model_name, replace=True), type=
        'CNN')
    s.deepLearn.addLayer(model=model_name, name='mnist', layer=dict(type=
        'input', nchannels=1, width=28, height=28, scale=0.00392156862745098))
    s.deepLearn.addLayer(model=model_name, name='conv1', layer=dict(type=
        'convolution', nFilters=20, width=5, height=5, stride=1, act=
        'identity', noBias=True, init='xavier'), srcLayers=['mnist'])
    s.deepLearn.addLayer(model=model_name, name='conv1_bn', layer=dict(type
        ='batchnorm', act='relu'), srcLayers=['conv1'])
    s.deepLearn.addLayer(model=model_name, name='pool1', layer=dict(type=
        'pooling', width=2, height=2, stride=2, pool='max'), srcLayers=[
        'conv1_bn'])
    s.deepLearn.addLayer(model=model_name, name='conv2', layer=dict(type=
        'convolution', nFilters=50, width=5, height=5, stride=1, act=
        'identity', noBias=True, init='xavier'), srcLayers=['pool1'])
    s.deepLearn.addLayer(model=model_name, name='conv2_bn', layer=dict(type
        ='batchnorm', act='relu'), srcLayers=['conv2'])
    s.deepLearn.addLayer(model=model_name, name='pool2', layer=dict(type=
        'pooling', width=2, height=2, stride=2, pool='max'), srcLayers=[
        'conv2_bn'])
    s.deepLearn.addLayer(model=model_name, name='ip1', layer=dict(type=
        'fullconnect', n=500, init='xavier', act='relu'), srcLayers=['pool2'])
    s.deepLearn.addLayer(model=model_name, name='ip2', layer=dict(type=
        'output', n=10, init='xavier', act='softmax'), srcLayers=['ip1'])
