'Backward propagate pooling layer.
Arguments:
layer (PoolLayer): The pool layer object. Different backends have
different pool layers.
I (Tensor): Input tensor.
E (Tensor): Error tensor.
delta (Tensor): Gradient tensor (delta)
denom (Tensor): denominator tensor computed during bprop
ascale (float): scaling parameter (alpha) to multiply the pooled sum (1.25e-5 in AK)
bpower (float): exponential parameter (beta) to raise denominator by (0.75 in AK)'

def bprop_lrn(self, layer, I, O, E, delta, denom, alpha=1.0, beta=0.0, ascale=1.0, bpower=1.0, repeat=1):

    assert (layer.sizeI == I.size)
    assert (layer.sizeO == E.size)
    assert (layer.sizeI == delta.size)
    op = layer.op
    (J, T, R, S) = layer.JTRS
    (C, D, H, W, N) = layer.dimI
    (K, M, P, Q, N) = layer.dimO
    (pad_c, pad_d, pad_h, pad_w) = layer.padding
    (str_c, str_d, str_h, str_w) = layer.strides
    WH = (W * H)
    DWH = ((D * W) * H)
    kernel_args = layer.bprop_kernel
    shared = layer.bprop_lut_size
    self._execute_lrn(layer, I, O, E, delta, denom, alpha, beta, ascale, bpower, kernel_args, shared, repeat)
