class_docstr: "A wrapper to make objective functions easy to combine.
  
  For example, suppose you want to optimize 20% for mixed4a:20 and 80% for
  mixed4a:21. Then you could use:
  
    objective = 0.2 * channel("mixed4a", 20) + 0.8 * channel("mixed4a", 21)
  
  Under the hood, we think of objectives as functions of the form:
  
    T => tensorflow scalar for loss
  
  where T is a function allowing you to index layers in the network -- that is,
  if there's a layer "mixed4a" then T("mixed4a") would give you its
  activations).
  
  This allows objectives to be declared outside the rendering function, but then
  actually constructed within its graph/session.
code: def __mul__(self, other):
      if isinstance(other, (int, float)):
          objective_func = lambda T: other * self(T)
      else:
          objective_func = lambda T: self(T) * other(T)
      return Objective(
          objective_func, name=self.name, description=self.description
      )
  
imports: from __future__ import absolute_import, division, print_function
  from decorator import decorator
  import numpy
  import tensorflow
  from lucid.optvis.objectives_util import _dot, _dot_cossim, _extract_act_pos, _make_arg_str, _T_force_NHWC, _T_handle_batch
label_desc: Use image node_id 6 for calling the Objective obj's underlying member method code with example usage: obj.__mul__(other) and returns: Objective