title: Tensorflow Batchnormalization - TypeError: axis must be int or list, type given: <class 'tensorflow.python.framework.ops.Tensor'>
body: <p>Following is my code to train an U-Net. It is mostly normal Keras code with my own loss functions and metrics, which is not important for the error. To avoid overfitting I tried to add a BatchNormalization layer after every convolution layer, however, I keep getting a very strange error.</p>
  
  <pre><code>inputs = tf.keras.layers.Input((self.height, self.width, self.channel))
  c1 = tf.keras.layers.Conv2D(16, (3, 3), padding='same')(inputs)
  c1 = tf.keras.layers.BatchNormalization(c1)
  c1 = tf.keras.layers.LeakyReLU(self.alpha)(c1)
  c1 = tf.keras.layers.Dropout(self.dropout_rate)(c1)
  c1 = tf.keras.layers.Conv2D(16, (3, 3), padding='same')(c1)
  c1 = tf.keras.layers.LeakyReLU(self.alpha)(c1)
  c1 = tf.keras.layers.Dropout(self.dropout_rate)(c1)
  p1 = tf.keras.layers.MaxPooling2D((2, 2))(c1)
  
  ....
  
  u9 = tf.keras.layers.Conv2DTranspose(16, (2, 2), strides=(2, 2), padding='same')(c8)
  u9 = tf.keras.layers.concatenate([u9, c1], axis=3)
  c9 = tf.keras.layers.Conv2D(16, (3, 3), padding='same')(u9)
  c9 = tf.keras.layers.LeakyReLU(self.alpha)(c9)
  c9 = tf.keras.layers.Dropout(self.dropout_rate)(c9)
  c9 = tf.keras.layers.Conv2D(16, (3, 3), padding='same')(c9)
  c9 = tf.keras.layers.LeakyReLU(self.alpha)(c9)
  c9 = tf.keras.layers.Dropout(self.dropout_rate)(c9)
  
  outputs = tf.keras.layers.Conv2D(self.num_classes, (1, 1), activation='softmax')(c9)
  
  self.model = tf.keras.Model(inputs=[inputs], outputs=[outputs])
  
  self.model.compile(optimizer=tf.keras.optimizers.Adam(lr=self.learning_rate),
                     loss=cce_iou_coef,
                     metrics=[iou_coef, dice_coef])
  </code></pre>
  
  <p>When ever I try to add the BatchNormalization layer I get the following error. I can not find the problem, what am I doing wrong?</p>
  
  <pre><code>---------------------------------------------------------------------------
  TypeError                                 Traceback (most recent call last)
  &lt;ipython-input-4-5c6c9c85bbcc&gt; in &lt;module&gt;
  ----&gt; 1 unet_dev = UNetDev()
        2 unet_dev.summary()
  
  ~/Desktop/notebook/bachelor-thesis/code/bachelorthesis/unet_dev.py in __init__(self, weight_url, width, height, channel, learning_rate, num_classes, alpha, dropout_rate)
       29             inputs = tf.keras.layers.Input((self.height, self.width, self.channel))
       30             c1 = tf.keras.layers.Conv2D(16, (3, 3), padding='same')(inputs)
  ---&gt; 31             c1 = tf.keras.layers.BatchNormalization(c1)
       32             c1 = tf.keras.layers.LeakyReLU(self.alpha)(c1)
       33             c1 = tf.keras.layers.Dropout(self.dropout_rate)(c1)
  
  ~/anaconda3/envs/code/lib/python3.7/site-packages/tensorflow_core/python/keras/layers/normalization.py in __init__(self, axis, momentum, epsilon, center, scale, beta_initializer, gamma_initializer, moving_mean_initializer, moving_variance_initializer, beta_regularizer, gamma_regularizer, beta_constraint, gamma_constraint, renorm, renorm_clipping, renorm_momentum, fused, trainable, virtual_batch_size, adjustment, name, **kwargs)
      167     else:
      168       raise TypeError('axis must be int or list, type given: %s'
  --&gt; 169                       % type(axis))
      170     self.momentum = momentum
      171     self.epsilon = epsilon
  
  TypeError: axis must be int or list, type given: &lt;class 'tensorflow.python.framework.ops.Tensor'&gt;
  </code></pre>