docs: def _build_scale_offset(self, dtype):
      """Sets up optional scale and offset factors."""
  
      # tf.nn.fused_batch_norm accepts float16 batch data, but not scale/offset.
      if self._fused and dtype == tf.float16:
        dtype = tf.float32
  
      # The fused batch norm operation needs the beta, gamma variables,
      # so in this case we build them and set the trainable option according
      # to the values of _offset and _scale.
      self._beta = None
      if self._offset or self._fused:
        if self.BETA not in self._initializers:
          self._initializers[self.BETA] = create_beta_initializer()
        self._beta = tf.get_variable(
            self.BETA,
            dtype=dtype,
            shape=self._mean_shape,
            initializer=self._initializers[self.BETA],
            partitioner=self._partitioners.get(self.BETA, None),
            regularizer=self._regularizers.get(self.BETA, None),
            trainable=self._offset)
  
      self._gamma = None
      if self._scale or self._fused:
        if self.GAMMA not in self._initializers:
          self._initializers[self.GAMMA] = create_gamma_initializer()
        self._gamma = tf.get_variable(
            self.GAMMA,
            dtype=dtype,
            shape=self._mean_shape,
            initializer=self._initializers[self.GAMMA],
            partitioner=self._partitioners.get(self.GAMMA, None),
            regularizer=self._regularizers.get(self.GAMMA, None),
            trainable=self._scale)