def add_node(G: NNGraph, node: Node, anode: Node = None) -> str: G.add_node(node) if not anode: return (node.name, node.name) G.add_node(anode) G.add_edge(NNEdge(node, anode)) return (node.name, anode.name)
def two_conv_graph(): G = NNGraph(name='two_conv_graph') ti = G.add_input(Dim.unnamed([10, 10, 2])) c1filt = Conv2DFilterDim(3, 3, 2, in_c=2) c1filt.impose_order(['out_c', 'h', 'w', 'in_c']) n1 = Conv2DParameters("node1", filt=c1filt, stride=StrideDim(1, 1), padding=PadDim(0), in_dims_hint=SparseList([['h', 'w', 'c']]), out_dims_hint=SparseList([['h', 'w', 'c']])) G.add_node(n1) w1 = [[0.25, 0.25], [0.25, 0.25], [0.25, 0.25]] w1 = [w1, w1, w1] w2 = [[0.75, 0.75], [0.75, 0.75], [0.75, 0.75]] w2 = [w2, w2, w2] n1.weights = np.array([w1, w2]) c2filt = Conv2DFilterDim(3, 3, 2, in_c=2) c2filt.impose_order(['out_c', 'h', 'w', 'in_c']) n2 = Conv2DParameters("node2", filt=c2filt, stride=StrideDim(1, 1), padding=PadDim(0), in_dims_hint=SparseList([['h', 'w', 'c']]), out_dims_hint=SparseList([['h', 'w', 'c']])) G.add_node(n2) w3 = [[0.75, 0.25], [0.75, 0.25], [0.75, 0.25]] w3 = [w3, w3, w3] n2.weights = np.array([w3, w3]) to = G.add_output() G.add_edge(NNEdge(ti, n1)) G.add_edge(NNEdge(n1, n2)) G.add_edge(NNEdge(n2, to)) G.add_dimensions() yield G
def fix_split_in_edges(G: NNGraph): for split in [node for node in G.nodes() if isinstance(node, SplitParameters)]: in_edge = G.in_edges(split.name)[0] if in_edge.to_idx == 0: continue G.remove_edge(in_edge) G.add_edge(NNEdge(in_edge.from_node, in_edge.to_node, from_idx=in_edge.from_idx))
def create_graph(filename, opts): cfg = read_cfg(filename) out_graph = NNGraph(model=cfg, filename=filename, name=opts.get('name'), value_cache=opts.get('value_cache')) create_subgraph(out_graph, cfg) leaf_nodes = list([n for n in out_graph.nodes()\ if out_graph.out_degree(n) == 0 and out_graph.in_degree(n) > 0]) for node in leaf_nodes: out_graph.add_edge(node, out_graph.add_output(), order=0) return out_graph
def actfusion_graph(): G = NNGraph(name='actfusion_graph') ti1 = G.add_input(Dim.unnamed([10, 10, 2])).name ti2 = G.add_input(Dim.unnamed([10, 10, 2])).name c1filt = Conv2DFilterDim(3, 3, 2, in_c=2) c1filt.impose_order(['out_c', 'h', 'w', 'in_c']) n1 = Conv2DParameters("node1", filt=c1filt, stride=StrideDim(1, 1), padding=PadDim(0), in_dims_hint=SparseList([['h', 'w', 'c']]), out_dims_hint=SparseList([['h', 'w', 'c']])) G.add_node(n1) w1 = [[0.25, 0.25], [0.25, 0.25], [0.25, 0.25]] w1 = [w1, w1, w1] w2 = [[0.75, 0.75], [0.75, 0.75], [0.75, 0.75]] w2 = [w2, w2, w2] n1.weights = np.array([w1, w2]) n1a = ReluActivationParameters("node1a") G.add_node(n1a) c2filt = Conv2DFilterDim(3, 3, 2, in_c=2) c2filt.impose_order(['out_c', 'h', 'w', 'in_c']) n2 = Conv2DParameters("node2", filt=c2filt, stride=StrideDim(1, 1), padding=PadDim(0), in_dims_hint=SparseList([['h', 'w', 'c']]), out_dims_hint=SparseList([['h', 'w', 'c']])) G.add_node(n2) w3 = [[0.75, 0.25], [0.75, 0.25], [0.75, 0.25]] w3 = [w3, w3, w3] n2.weights = np.array([w3, w3]) n3 = MatrixAddParameters("node3") G.add_node(n3) n4 = ReluActivationParameters("node4") G.add_node(n4) to = G.add_output() G.add_edge(NNEdge(ti1, n1)) G.add_edge(NNEdge(n1, n1a)) G.add_edge(NNEdge(ti2, n2)) G.add_edge(NNEdge(n1a, n3, to_idx=0)) G.add_edge(NNEdge(n2, n3, to_idx=1)) G.add_edge(NNEdge(n3, n4)) G.add_edge(NNEdge(n4, to)) G.add_dimensions() yield G