class_docstr: Group normalization layer.
  
  Source: "Group Normalization" (Yuxin Wu & Kaiming He, 2018)
  https://arxiv.org/abs/1803.08494
  
  Group Normalization divides the channels into groups and computes
  within each group the mean and variance for normalization.
  Empirically, its accuracy is more stable than batch norm in a wide
  range of small batch sizes, if learning rate is adjusted linearly
  with batch sizes.
  
  Relation to Layer Normalization:
  If the number of groups is set to 1, then this operation becomes identical
  to Layer Normalization.
  
  Relation to Instance Normalization:
  If the number of groups is set to the
  input dimension (number of groups is equal
  to number of channels), then this operation becomes
  identical to Instance Normalization.
  
  Args:
      groups: Integer, the number of groups for Group Normalization.
          Can be in the range [1, N] where N is the input dimension.
          The input dimension must be divisible by the number of groups.
          Defaults to 32.
      axis: Integer, the axis that should be normalized.
      epsilon: Small float added to variance to avoid dividing by zero.
      center: If True, add offset of `beta` to normalized tensor.
          If False, `beta` is ignored.
      scale: If True, multiply by `gamma`.
          If False, `gamma` is not used.
      beta_initializer: Initializer for the beta weight.
      gamma_initializer: Initializer for the gamma weight.
      beta_regularizer: Optional regularizer for the beta weight.
      gamma_regularizer: Optional regularizer for the gamma weight.
      beta_constraint: Optional constraint for the beta weight.
      gamma_constraint: Optional constraint for the gamma weight.
  
  Input shape:
      Arbitrary. Use the keyword argument `input_shape`
      (tuple of integers, does not include the samples axis)
      when using this layer as the first layer in a model.
  
  Output shape:
      Same shape as input.
class_docstr_tok: ["Group","normalization","layer",".","Source",":","``","Group","Normalization","''","(","Yuxin","Wu","&","Kaiming","He",",","2018",")","https",":","\/\/arxiv.org\/abs\/1803.08494","Group","Normalization","divides","the","channels","into","groups","and","computes","within","each","group","the","mean","and","variance","for","normalization",".","Empirically",",","its","accuracy","is","more","stable","than","batch","norm","in","a","wide","range","of","small","batch","sizes",",","if","learning","rate","is","adjusted","linearly","with","batch","sizes",".","Relation","to","Layer","Normalization",":","If","the","number","of","groups","is","set","to","1",",","then","this","operation","becomes","identical","to","Layer","Normalization",".","Relation","to","Instance","Normalization",":","If","the","number","of","groups","is","set","to","the","input","dimension","(","number","of","groups","is","equal","to","number","of","channels",")",",","then","this","operation","becomes","identical","to","Instance","Normalization",".","Args",":","groups",":","Integer",",","the","number","of","groups","for","Group","Normalization",".","Can","be","in","the","range","[","1",",","N","]","where","N","is","the","input","dimension",".","The","input","dimension","must","be","divisible","by","the","number","of","groups",".","Defaults","to","32.","axis",":","Integer",",","the","axis","that","should","be","normalized",".","epsilon",":","Small","float","added","to","variance","to","avoid","dividing","by","zero",".","center",":","If","True",",","add","offset","of","`","beta","`","to","normalized","tensor",".","If","False",",","`","beta","`","is","ignored",".","scale",":","If","True",",","multiply","by","`","gamma","`",".","If","False",",","`","gamma","`","is","not","used",".","beta_initializer",":","Initializer","for","the","beta","weight",".","gamma_initializer",":","Initializer","for","the","gamma","weight",".","beta_regularizer",":","Optional","regularizer","for","the","beta","weight",".","gamma_regularizer",":","Optional","regularizer","for","the","gamma","weight",".","beta_constraint",":","Optional","constraint","for","the","beta","weight",".","gamma_constraint",":","Optional","constraint","for","the","gamma","weight",".","Input","shape",":","Arbitrary",".","Use","the","keyword","argument","`","input_shape","`","(","tuple","of","integers",",","does","not","include","the","samples","axis",")","when","using","this","layer","as","the","first","layer","in","a","model",".","Output","shape",":","Same","shape","as","input","."]
code: def _create_broadcast_shape(self, input_shape):
      broadcast_shape = [1] * len(input_shape)
      is_instance_norm = (input_shape[self.axis] // self.groups) == 1
      if not is_instance_norm:
          broadcast_shape[self.axis] = (
              input_shape[self.axis] // self.groups
          )
          broadcast_shape.insert(self.axis, self.groups)
      else:
          broadcast_shape[self.axis] = self.groups
      return broadcast_shape
  
imports: import logging
  import tensorflow
  from typeguard import typechecked
  from tensorflow_addons.utils import types
label_desc: Use image node_id 15 for calling the GroupNormalization obj's underlying member method code with example usage: obj._create_broadcast_shape(input_shape) and returns: broadcast_shape