code: def proc_fc(self, idx, name, param):
      # TODO caffe has an 'transpose' option for fc/W
      assert len(param) == 2
      prev_layer_name = self.net.bottom_names[name][0]
      prev_layer_output = self.net.blobs[prev_layer_name].data
      if prev_layer_output.ndim == 4:
          logger.info("FC layer {} takes spatial data.".format(name))
          W = param[0].data
          # original: outx(CxHxW)
          W = W.reshape((-1,) + prev_layer_output.shape[1:]).transpose(
              2, 3, 1, 0
          )
          # become: (HxWxC)xout
      else:
          W = param[0].data.transpose()
      return {name + "/W": W, name + "/b": param[1].data}
  
file_path: tensorpack/tensorpack/utils/loadcaffe.py
imports: import numpy
  import os
  import sys
  from .None import logger
  from .concurrency import subproc_call
  from .fs import download, get_dataset_path
  from .utils import change_env
label_desc: Use image node_id 4 for calling the CaffeLayerProcessor obj's underlying member method code with example usage: obj.proc_fc(idx, name, param) and returns: dict