Graph representation of a Netdef. More...
#include <graph.h>
Public Member Functions  
const std::vector< std::pair< string, int > >  GetSubgraphInput (const std::vector< int > &subgraph) 
Given a subgraph, gets all of the parents of the subgraph, as well as their associated blob names. More...  
const std::vector< std::pair< string, int > >  GetSubgraphOutput (const std::vector< int > &subgraph) 
Given a subgraph, gets all of the children of the subgraph, as well as their associated blob names. More...  
Graph (const NetDef &net_def)  
Graph generation. More...  
NetDef  GetNetDef () 
Generates a NetDef Representation for the current graph. More...  
void  DeactivateSubgraph (std::vector< int > subgraph) 
Deactivate a subgraph, and get rid of all edges into this subgraph.  
size_t  size () const 
void  push_node (const Node &new_node) 
void  resize_nodes (size_t new_size) 
const Node &  node (size_t idx) const 
Node &  node (size_t idx) 
bool  is_node_active (size_t idx) 
const std::set< string > &  external_input () const 
const std::set< string > &  external_output () const 

explicit 
Graph generation.
Given a netdef, returns a Graph.
Each node represents an operator. An edge exists between two nodes if the parent op writes to a blob, which is the input of the child blob, with no other op writing to the blob in between the execution order.
Time Complexity: O(E), where E is the number of blobs
NetDef caffe2::transform::Graph::GetNetDef  (  ) 
Generates a NetDef Representation for the current graph.
Nodes are visited in topological order, which is proper Opdef ordering. TODO(benz): There exists conflicts with repeated blob names, where topological sorting is not sufficient for correct netdef representation, unless blobs are renamed. For example, if after a transformation, We have operator ancestry: A –> B –> C, and also A –> D –> E, where B > C and D > E uses the same blob name, then A, B, D, E, C is a correct topological ordering, but D will write to the blob that C reads from, instead of B. Currently believe that there will always be ambiguity unless blobs are renamed. This is solved by performing SSA on all transformed blob names.
const std::vector< std::pair< string, int > > caffe2::transform::Graph::GetSubgraphInput  (  const std::vector< int > &  subgraph  ) 
const std::vector< std::pair< string, int > > caffe2::transform::Graph::GetSubgraphOutput  (  const std::vector< int > &  subgraph  ) 