class_docstr: Abstract Op for Batch Normalization.
  
  Parameters
  ----------
  axes : a tuple of ints
      The axes along which the input should be normalized.
  x : tensor
      The input to be normalized along `axes`.
  scale : tensor
      `scale` should have the same number of dimensions as `x`.
      All dimensions listed in `axes` should have length 1.
  bias : tensor
      `bias` should have the same number of dimensions as `x`.
      All dimensions listed in `axes` should have length 1.
  epsilon
      Epsilon value used in the batch normalization formula. Minimum allowed
      value is 1e-5 (imposed by cuDNN).
  running_average_factor : float
      Factor for updating the values or `running_mean` and `running_var`.
      If the factor is close to one, the running averages will update quickly,
      if the factor is close to zero it will update slowly.
  running_mean : tensor or None
      Previous value of the running mean. If this is given, the new value
      ``running_mean * (1 - running_average_factor) + batch mean * running_average_factor``
      will be returned as one of the outputs of this function.
      `running_mean` and `running_var` should either both be given or
      both be None.
  running_var : tensor or None
      Previous value of the running variance. If this is given, the new value
      ``running_var * (1 - running_average_factor) + (m / (m - 1)) * batch var * running_average_factor``
      will be returned as one of the outputs of this function,
      where `m` is the product of lengths of the averaged-over dimensions.
      `running_mean` and `running_var` should either both be given or
      both be None.
class_docstr_tok: ["Abstract","Op","for","Batch","Normalization",".","Parameters","--","--","--","--","--","axes",":","a","tuple","of","ints","The","axes","along","which","the","input","should","be","normalized",".","x",":","tensor","The","input","to","be","normalized","along","`","axes","`",".","scale",":","tensor","`","scale","`","should","have","the","same","number","of","dimensions","as","`","x","`",".","All","dimensions","listed","in","`","axes","`","should","have","length","1.","bias",":","tensor","`","bias","`","should","have","the","same","number","of","dimensions","as","`","x","`",".","All","dimensions","listed","in","`","axes","`","should","have","length","1.","epsilon","Epsilon","value","used","in","the","batch","normalization","formula",".","Minimum","allowed","value","is","1e-5","(","imposed","by","cuDNN",")",".","running_average_factor",":","float","Factor","for","updating","the","values","or","`","running_mean","`","and","`","running_var","`",".","If","the","factor","is","close","to","one",",","the","running","averages","will","update","quickly",",","if","the","factor","is","close","to","zero","it","will","update","slowly",".","running_mean",":","tensor","or","None","Previous","value","of","the","running","mean",".","If","this","is","given",",","the","new","value","``","running_mean","*","(","1","-","running_average_factor",")","+","batch","mean","*","running_average_factor","``","will","be","returned","as","one","of","the","outputs","of","this","function",".","`","running_mean","`","and","`","running_var","`","should","either","both","be","given","or","both","be","None",".","running_var",":","tensor","or","None","Previous","value","of","the","running","variance",".","If","this","is","given",",","the","new","value","``","running_var","*","(","1","-","running_average_factor",")","+","(","m","\/","(","m","-","1",")",")","*","batch","var","*","running_average_factor","``","will","be","returned","as","one","of","the","outputs","of","this","function",",","where","`","m","`","is","the","product","of","lengths","of","the","averaged-over","dimensions",".","`","running_mean","`","and","`","running_var","`","should","either","both","be","given","or","both","be","None","."]
code: def connection_pattern(self, node):
      # Specificy that epsilon and running_average_factor are not connected to outputs.
      patterns = [
          [True, True, True],  # x
          [True, True, True],  # scale
          [True, True, True],  # bias
          [False, False, False],  # epsilon
          [False, False, False],
      ]  # running_average_factor
      # Optional running_mean and running_var are only
      # connected to their new values.
      for i in range(5, len(node.inputs)):
          patterns[0].append(True)
          for pattern in patterns[1:]:
              pattern.append(False)
          patterns.append([False] * (3 + i - 5) + [True])
      return patterns
  
imports: from __future__ import absolute_import, print_function, division
  import numpy
  import theano
  from theano import Apply, Op
  from theano.gof import local_optimizer
  from theano.gof.opt import copy_stack_trace
  from theano.tensor import as_tensor_variable, TensorType
  from theano.tensor import basic
  from theano.tensor.opt import register_specialize_device
  from theano.scalar import Composite, as_common_dtype
  from theano.scalar import add, sub, true_div, mul
label_desc: Use image node_id 5 for calling the AbstractBatchNormTrain obj's underlying member method code with example usage: obj.connection_pattern(node) and returns: patterns