| 1827 | } // namespace |
| 1828 | |
| 1829 | void ExtendGraph(Graph* dest, std::unordered_set<const Node*> excluded, |
| 1830 | int32 duplicate_num) { |
| 1831 | // Copy the nodes "Node in src" -> "Node in *dest" |
| 1832 | map_node_list duplicated_nodes; |
| 1833 | map_node margin_nodes; |
| 1834 | for (Node* n : dest->op_nodes()) { |
| 1835 | if (excluded.find(n) != excluded.end()) { |
| 1836 | continue; |
| 1837 | } |
| 1838 | if (n->IsVariable() || n->IsConstant() || n->IsPlaceholder()) { |
| 1839 | margin_nodes.emplace(n, n); |
| 1840 | } else { |
| 1841 | duplicated_nodes.emplace(n, DuplicateNode(n, dest, duplicate_num)); |
| 1842 | } |
| 1843 | } |
| 1844 | |
| 1845 | // Copy the edges |
| 1846 | auto edges = DuplicateEdges(dest, duplicated_nodes, margin_nodes); |
| 1847 | for (auto it : edges) { |
| 1848 | dest->AddEdge(it.src, it.src_output, it.dst, it.dst_input); |
| 1849 | } |
| 1850 | |
| 1851 | // Add aggregate nodes for Apply*** |
| 1852 | for (Node* n : dest->op_nodes()) { |
| 1853 | if (n->IsApplyAdagradOps() || n->IsApplyFtrlOps()) { |
| 1854 | AggregateForApply(dest, n, duplicated_nodes, 3); |
| 1855 | } |
| 1856 | // concat -------------------------------> |
| 1857 | // concat(indices) --> unique(indices) --> unsorted_segment_sum |
| 1858 | if (n->IsSparseApplyAdagradOps() || n->IsSparseApplyFtrlOps()) { |
| 1859 | AggregateForSparseApply(dest, n, duplicated_nodes, 3, 4); |
| 1860 | } |
| 1861 | |
| 1862 | if (n->IsApplyAdamOps()) { |
| 1863 | AggregateForApply(dest, n, duplicated_nodes, 9); |
| 1864 | } |
| 1865 | |
| 1866 | if (n->IsApplySparseAdamOps()) { |
| 1867 | AggregateForSparseApply(dest, n, duplicated_nodes, 9, 10); |
| 1868 | } |
| 1869 | } |
| 1870 | } |
| 1871 | |
| 1872 | } // namespace tensorflow |
no test coverage detected