class_docstr: A standalone feature extraction wrapper that maps dict -> list or single tensor
  NOTE:
    * one can use feature_extractor directly if dictionary output is desired
    * unlike FeatureGraphNet, this is intended to be used standalone and not with model feature_info
    metadata for builtin feature extraction mode
    * create_feature_extractor can be used directly if dictionary output is acceptable
  
  Args:
      model: model to extract features from
      return_nodes: node names to return features from (dict or list)
      squeeze_out: if only one output, and output in list format, flatten to single tensor
code: def __init__(
      self,
      model,
      return_nodes: Union[Dict[str, str], List[str]],
      squeeze_out: bool = True,
  ):
      super().__init__()
      self.squeeze_out = squeeze_out
      self.graph_module = create_feature_extractor(model, return_nodes)
  
imports: from typing import Callable, List, Dict, Union, Type
  import torch
  from torch import nn
  from ._features import _get_feature_info, _get_return_layers
  from timm.layers import Conv2dSame, ScaledStdConv2dSame, CondConv2d, StdConv2dSame
  from timm.layers.non_local_attn import BilinearAttnTransform
  from timm.layers.pool2d_same import MaxPool2dSame, AvgPool2dSame
  from timm.layers.norm_act import BatchNormAct2d, SyncBatchNormAct, FrozenBatchNormAct2d, GroupNormAct, GroupNorm1Act, LayerNormAct, LayerNormAct2d
label_desc: Use image node_id 1 to create a new GraphExtractNet object from inherited base classes: nn with example: obj = GraphExtractNet(model, return_nodes, squeeze_out)