class_docstr: A class that logs shapes of inputs/outputs of layers,
  during the possibly-nested calls to them.
class_docstr_tok: ["A","class","that","logs","shapes","of","inputs\/outputs","of","layers",",","during","the","possibly-nested","calls","to","them","."]
code: def push_outputs(self, name, message):
      if len(self.stack):
          assert len(self.stack) == 1, self.stack
          assert self.stack[-1][0] == name, self.stack
          item = self.stack.pop()
          logger.info(
              self._indent()
              + "'{}': {} --> {}".format(name, item[1], message)
          )
      else:
          self.depth -= 1
          logger.info(
              self._indent() + "'{}' output: {}".format(name, message)
          )
  
file_path: tensorpack/tensorpack/models/registry.py
imports: import copy
  import re
  import collections
  from functools import wraps
  import six
  import tensorflow
  from ..compat import tfv1
  from ..tfutils.argscope import get_arg_scope
  from ..tfutils.model_utils import get_shape_str
  from ..utils import logger
label_desc: Use image node_id 4 for calling the LayerShapeLogger obj's underlying member method code with example usage: obj.push_outputs(name, message) without return types