class_docstr: Concat gradients together to optimize transfer.
code: def unpack(self, grad_packs):
      with cached_name_scope("GradientPacker", top_level=False):
          concat_grads = tf.concat(
              grad_packs, 0, name="concatenated_packs"
          )
          # concat_grads = tf.cast(concat_grads, self._grad_dtype)
          flattened_grads = tf.split(concat_grads, self._sizes)
          grads = [
              tf.reshape(g, shape)
              for g, shape in zip(flattened_grads, self._shapes)
          ]
          return grads
  
imports: import operator
  from contextlib import contextmanager
  import tensorflow
  import threading
  from ..compat import tfv1
  from ..tfutils.common import get_tf_version_tuple
  from ..tfutils.scope_utils import cached_name_scope, under_name_scope
  from ..tfutils.varreplace import custom_getter_scope
  from ..utils import logger
  from ..utils.argtools import call_only_once
label_desc: Use image node_id 4 for calling the GradientPacker obj's underlying member method code with example usage: obj.unpack(grad_packs) and returns: grads