Exemplo n.º 1
0
def detach_outputs(sgv, control_outputs=None):
    """Detach the output of a subgraph view.

  Args:
    sgv: the subgraph view to be detached. This argument is converted to a
      subgraph using the same rules as the function subgraph.make_view.
      Note that sgv is modified in place.
    control_outputs: a util.ControlOutputs instance or None. If not None the
      control outputs are also detached.
  Returns:
    A tuple `(sgv, output_placeholders)` where
      `sgv` is a new subgraph view of the detached subgraph;
      `output_placeholders` is a list of the created output placeholders.
  Raises:
    StandardError: if sgv cannot be converted to a SubGraphView using
      the same rules than the function subgraph.make_view.
  """
    sgv = subgraph.make_view(sgv)
    # only select outputs with consumers
    sgv_ = sgv.remap_outputs([
        output_id for output_id, output_t in enumerate(sgv.outputs)
        if output_t.consumers()
    ])
    # create consumer subgraph and remap
    consumers_sgv = subgraph.SubGraphView(sgv_.consumers())
    consumers_sgv = consumers_sgv.remap_inputs([
        input_id for input_id, input_t in enumerate(consumers_sgv.inputs)
        if input_t in sgv_.outputs
    ])

    with sgv_.graph.as_default():
        output_placeholders = [
            util.make_placeholder_from_tensor(input_t)
            for input_t in consumers_sgv.inputs
        ]

    reroute.swap_outputs(sgv_, output_placeholders)
    if control_outputs is not None:
        detach_control_outputs(sgv_, control_outputs)
    return sgv_, output_placeholders
Exemplo n.º 2
0
def detach_outputs(sgv, control_outputs=None):
  """Detach the outputa of a subgraph view.

  Args:
    sgv: the subgraph view to be detached. This argument is converted to a
      subgraph using the same rules as the function subgraph.make_view.
      Note that sgv is modified in place.
    control_outputs: a util.ControlOutputs instance or None. If not None the
      control outputs are also detached.
  Returns:
    A tuple `(sgv, output_placeholders)` where
      `sgv` is a new subgraph view of the detached subgraph;
      `output_placeholders` is a list of the created output placeholders.
  Raises:
    StandardError: if sgv cannot be converted to a SubGraphView using
      the same rules than the function subgraph.make_view.
  """
  sgv = subgraph.make_view(sgv)
  # only select outputs with consumers
  sgv_ = sgv.remap_outputs([output_id
                            for output_id, output_t in enumerate(sgv.outputs)
                            if output_t.consumers()])
  # create consumer subgraph and remap
  consumers_sgv = subgraph.SubGraphView(sgv_.consumers())
  consumers_sgv = consumers_sgv.remap_inputs(
      [input_id for input_id, input_t in enumerate(consumers_sgv.inputs)
       if input_t in sgv_.outputs])

  with sgv_.graph.as_default():
    output_placeholders = [
        util.make_placeholder_from_tensor(input_t)
        for input_t in consumers_sgv.inputs
    ]

  reroute.swap_outputs(sgv_, output_placeholders)
  if control_outputs is not None:
    detach_control_outputs(sgv_, control_outputs)
  return sgv_, output_placeholders