def __init__(self,
               scope='default_scope',
               spec=None,
               global_step=None,
               layer=None):
    """Initializer.

    Args:
      scope: TF scope used for creating new TF variables.
      spec: compression hyper parameters default value given by
        self.get_default_hparams().
      global_step: tf variable that has the global step.
      layer: Layer to compress.
    """
    super(CompressionOp, self).__init__(scope, spec, global_step)
    # Compression specification
    self._spec = spec

    # Sanity check for compression hparams
    self._validate_spec()
    self._global_step = global_step

    # public member variables to track the compressor, the variables and
    # other tf nodes corresponding to this OP.
    self.matrix_compressor = None
    self.a_matrix_tfvar = None
    self.b_matrix_tfvar = None
    self.c_matrix_tfvar = None
    self.alpha = None
    self.layer = layer
    self.last_alpha_update_step = None
    self.uncompressed_size = 0
    self.compressed_size = 0