aboutsummaryrefslogtreecommitdiff
path: root/21.02/structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml
diff options
context:
space:
mode:
Diffstat (limited to '21.02/structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml')
-rw-r--r--21.02/structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml3908
1 files changed, 3908 insertions, 0 deletions
diff --git a/21.02/structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml b/21.02/structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml
new file mode 100644
index 0000000000..d5a029d2f1
--- /dev/null
+++ b/21.02/structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml
@@ -0,0 +1,3908 @@
+<!-- Copyright (c) 2020 ARM Limited. -->
+<!-- -->
+<!-- SPDX-License-Identifier: MIT -->
+<!-- -->
+<!-- HTML header for doxygen 1.8.13-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="robots" content="NOINDEX, NOFOLLOW" />
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>ArmNN: ITfParser::TfParserImpl Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/x-mathjax-config">
+ MathJax.Hub.Config({
+ extensions: ["tex2jax.js"],
+ jax: ["input/TeX","output/HTML-CSS"],
+});
+</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
+ <td style="padding-left: 0.5em;">
+ <div id="projectname">
+ &#160;<span id="projectnumber">21.02</span>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
+<a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl-members.xhtml">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">ITfParser::TfParserImpl Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="_tf_parser_8hpp_source.xhtml">TfParser.hpp</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a82733f14dce0abd22e6d5a79a0a6b936"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a82733f14dce0abd22e6d5a79a0a6b936">OperationParsingFunction</a> = <a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>(TfParserImpl::*)(const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a82733f14dce0abd22e6d5a79a0a6b936"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ac915fb2df2772be3179e97b1e8287a2d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac915fb2df2772be3179e97b1e8287a2d">CreateNetworkFromTextFile</a> (const char *graphFile, const std::map&lt; std::string, <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &gt; &amp;inputShapes, const std::vector&lt; std::string &gt; &amp;requestedOutputs)</td></tr>
+<tr class="memdesc:ac915fb2df2772be3179e97b1e8287a2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates the network from a protobuf text file on the disk. <a href="#ac915fb2df2772be3179e97b1e8287a2d">More...</a><br /></td></tr>
+<tr class="separator:ac915fb2df2772be3179e97b1e8287a2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c99f1b3140d1767d320d3e7d2e90949"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8c99f1b3140d1767d320d3e7d2e90949">CreateNetworkFromBinaryFile</a> (const char *graphFile, const std::map&lt; std::string, <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &gt; &amp;inputShapes, const std::vector&lt; std::string &gt; &amp;requestedOutputs)</td></tr>
+<tr class="memdesc:a8c99f1b3140d1767d320d3e7d2e90949"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates the network from a protobuf binary file on the disk. <a href="#a8c99f1b3140d1767d320d3e7d2e90949">More...</a><br /></td></tr>
+<tr class="separator:a8c99f1b3140d1767d320d3e7d2e90949"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7e393f41f2330006fdf00f2840c6dd28"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a7e393f41f2330006fdf00f2840c6dd28">CreateNetworkFromString</a> (const char *protoText, const std::map&lt; std::string, <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &gt; &amp;inputShapes, const std::vector&lt; std::string &gt; &amp;requestedOutputs)</td></tr>
+<tr class="memdesc:a7e393f41f2330006fdf00f2840c6dd28"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates the network directly from protobuf text in a string. Useful for debugging/testing. <a href="#a7e393f41f2330006fdf00f2840c6dd28">More...</a><br /></td></tr>
+<tr class="separator:a7e393f41f2330006fdf00f2840c6dd28"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8b053a6c449d0814cc831c916c126668"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8b053a6c449d0814cc831c916c126668">GetNetworkInputBindingInfo</a> (const std::string &amp;name) const</td></tr>
+<tr class="memdesc:a8b053a6c449d0814cc831c916c126668"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieves binding info (layer id and tensor info) for the network input identified by the given layer name. <a href="#a8b053a6c449d0814cc831c916c126668">More...</a><br /></td></tr>
+<tr class="separator:a8b053a6c449d0814cc831c916c126668"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b1fdcb1985af12dd1848a9ffa5d3271"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a4b1fdcb1985af12dd1848a9ffa5d3271">GetNetworkOutputBindingInfo</a> (const std::string &amp;name) const</td></tr>
+<tr class="memdesc:a4b1fdcb1985af12dd1848a9ffa5d3271"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieves binding info (layer id and tensor info) for the network output identified by the given layer name. <a href="#a4b1fdcb1985af12dd1848a9ffa5d3271">More...</a><br /></td></tr>
+<tr class="separator:a4b1fdcb1985af12dd1848a9ffa5d3271"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7789bc092c96403f549edf62955ac1c3"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a7789bc092c96403f549edf62955ac1c3">TfParserImpl</a> ()</td></tr>
+<tr class="separator:a7789bc092c96403f549edf62955ac1c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5d4693a557320db8fff5caa153da7b7"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#af5d4693a557320db8fff5caa153da7b7">~TfParserImpl</a> ()=default</td></tr>
+<tr class="separator:af5d4693a557320db8fff5caa153da7b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a04d68a2b7fb41ae2448f1ae91b50379f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a04d68a2b7fb41ae2448f1ae91b50379f">TfParserImpl</a> (const <a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml">TfParserImpl</a> &amp;)=delete</td></tr>
+<tr class="separator:a04d68a2b7fb41ae2448f1ae91b50379f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3afeb2f06c78a6bced55cb1bb6617e41"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml">TfParserImpl</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a3afeb2f06c78a6bced55cb1bb6617e41">operator=</a> (const <a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml">TfParserImpl</a> &amp;)=delete</td></tr>
+<tr class="separator:a3afeb2f06c78a6bced55cb1bb6617e41"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a931e43b8100b02a3c1f2f5f30ba9a943"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a931e43b8100b02a3c1f2f5f30ba9a943">CreateNetworkFromGraphDef</a> (const tensorflow::GraphDef &amp;graphDef, const std::map&lt; std::string, <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &gt; &amp;inputShapes, const std::vector&lt; std::string &gt; &amp;requestedOutputs)</td></tr>
+<tr class="memdesc:a931e43b8100b02a3c1f2f5f30ba9a943"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parses a GraphDef loaded into memory from one of the other CreateNetwork*. <a href="#a931e43b8100b02a3c1f2f5f30ba9a943">More...</a><br /></td></tr>
+<tr class="separator:a931e43b8100b02a3c1f2f5f30ba9a943"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a51591500d0839a1f602d8cd20bb9d3ce"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a51591500d0839a1f602d8cd20bb9d3ce">LoadGraphDef</a> (const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="memdesc:a51591500d0839a1f602d8cd20bb9d3ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets up variables and then performs BFS to parse all nodes. <a href="#a51591500d0839a1f602d8cd20bb9d3ce">More...</a><br /></td></tr>
+<tr class="separator:a51591500d0839a1f602d8cd20bb9d3ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a22a4253bd5cb5510d0086a0f067760ec"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a22a4253bd5cb5510d0086a0f067760ec">LoadNodeDef</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="memdesc:a22a4253bd5cb5510d0086a0f067760ec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parses a given node, assuming nodes before it in the graph have been done. <a href="#a22a4253bd5cb5510d0086a0f067760ec">More...</a><br /></td></tr>
+<tr class="separator:a22a4253bd5cb5510d0086a0f067760ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbdfb887feb642038726a828bd748ff3"><td class="memItemLeft" align="right" valign="top">const tensorflow::NodeDef *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#acbdfb887feb642038726a828bd748ff3">ResolveIdentityNode</a> (const tensorflow::NodeDef *nodeDef)</td></tr>
+<tr class="memdesc:acbdfb887feb642038726a828bd748ff3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handling identity layers as the input for Conv2D layer. <a href="#acbdfb887feb642038726a828bd748ff3">More...</a><br /></td></tr>
+<tr class="separator:acbdfb887feb642038726a828bd748ff3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e7a394f59e8d223a79e3db798803c1c"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="namespacearmnn_tf_parser.xhtml#a4c8735480b01dbd0f75c63377fe054e9">OutputOfConstNodeDef</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">GetTfInputNodes</a> (const tensorflow::NodeDef &amp;nodeDef) const</td></tr>
+<tr class="memdesc:a9e7a394f59e8d223a79e3db798803c1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds the nodes connected as inputs of the given node in the graph. <a href="#a9e7a394f59e8d223a79e3db798803c1c">More...</a><br /></td></tr>
+<tr class="separator:a9e7a394f59e8d223a79e3db798803c1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae295ca8b7d19bb5e6db3f93bd4561ee0"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">OutputOfParsedTfOperation</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a> (const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</td></tr>
+<tr class="memdesc:ae295ca8b7d19bb5e6db3f93bd4561ee0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph, and throws an exception if the number of inputs does not match the expected one. <a href="#ae295ca8b7d19bb5e6db3f93bd4561ee0">More...</a><br /></td></tr>
+<tr class="separator:ae295ca8b7d19bb5e6db3f93bd4561ee0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae7258b6f1d2aeff43fe25b2f3d662703"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae7258b6f1d2aeff43fe25b2f3d662703">ParseConst</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:ae7258b6f1d2aeff43fe25b2f3d662703"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02394780a6b2d4c255e4526621e90adb"><td class="memTemplParams" colspan="2">template&lt;typename Type &gt; </td></tr>
+<tr class="memitem:a02394780a6b2d4c255e4526621e90adb"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a02394780a6b2d4c255e4526621e90adb">HasParsedConstTensor</a> (const std::string &amp;nodeName) const</td></tr>
+<tr class="memdesc:a02394780a6b2d4c255e4526621e90adb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if there is a pre-parsed const tensor available with the given name and Type. <a href="#a02394780a6b2d4c255e4526621e90adb">More...</a><br /></td></tr>
+<tr class="separator:a02394780a6b2d4c255e4526621e90adb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad22826bcee9099bbeb74eeb99c36f998"><td class="memTemplParams" colspan="2">template&lt;typename Type &gt; </td></tr>
+<tr class="memitem:ad22826bcee9099bbeb74eeb99c36f998"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ad22826bcee9099bbeb74eeb99c36f998">HasParsedConstTensor</a> (<a class="el" href="classarmnn_tf_parser_1_1_i_tf_parser.xhtml#a81cd010ead68e4d96e6cb28255143f49">ParsedTfOperation</a> *parsedTfOpPtr) const</td></tr>
+<tr class="separator:ad22826bcee9099bbeb74eeb99c36f998"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a82bb92947dc9e0f04d4242910d6cbc65"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a82bb92947dc9e0f04d4242910d6cbc65">GetConstInputIndex</a> (const std::vector&lt; <a class="el" href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">OutputOfParsedTfOperation</a> &gt; &amp;inputs)</td></tr>
+<tr class="separator:a82bb92947dc9e0f04d4242910d6cbc65"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77cc856aea1ab0acd3a4bd7709fb18a3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a77cc856aea1ab0acd3a4bd7709fb18a3">ParseAdd</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a77cc856aea1ab0acd3a4bd7709fb18a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acd911785f874efd8628779cfcc37593b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#acd911785f874efd8628779cfcc37593b">ParseAddN</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:acd911785f874efd8628779cfcc37593b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a052b1116b8e9002b58610a375793ae1b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a052b1116b8e9002b58610a375793ae1b">ParseBiasAdd</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a052b1116b8e9002b58610a375793ae1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5caa51a7c4b4444cdcc33832fabc512d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a5caa51a7c4b4444cdcc33832fabc512d">ParseConv2D</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a5caa51a7c4b4444cdcc33832fabc512d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a87e85155fcde2f7e6e7cc0353e31867f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a87e85155fcde2f7e6e7cc0353e31867f">ParseDepthwiseConv2D</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a87e85155fcde2f7e6e7cc0353e31867f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a165298763e91bc4322753dbe8cbe9df7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a165298763e91bc4322753dbe8cbe9df7">ParseExpandDims</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a165298763e91bc4322753dbe8cbe9df7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a838bec330f4c2495c3e86088502e35e8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a838bec330f4c2495c3e86088502e35e8">ParseFusedBatchNorm</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a838bec330f4c2495c3e86088502e35e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a93ff9eb48ac9fb398fdce42871c2990e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a93ff9eb48ac9fb398fdce42871c2990e">ParseConcat</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a93ff9eb48ac9fb398fdce42871c2990e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afd47848ab22a0d11cb330f25d7ba3235"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#afd47848ab22a0d11cb330f25d7ba3235">ParseIdentity</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:afd47848ab22a0d11cb330f25d7ba3235"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2cf6fe0b66ca31d917279ae5d0be39b5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2cf6fe0b66ca31d917279ae5d0be39b5">ParseLrn</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a2cf6fe0b66ca31d917279ae5d0be39b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af71fa342538ad7280ff4f9b132bdb71a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#af71fa342538ad7280ff4f9b132bdb71a">ParseMatMul</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:af71fa342538ad7280ff4f9b132bdb71a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a74351720e73ac419536a6a527b4b46fa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a74351720e73ac419536a6a527b4b46fa">ParseMean</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a74351720e73ac419536a6a527b4b46fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f4ea9601ffef3d1549614e959d967d4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a5f4ea9601ffef3d1549614e959d967d4">ParseMul</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a5f4ea9601ffef3d1549614e959d967d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a46587dd82842638c50848021c57b6fad"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a46587dd82842638c50848021c57b6fad">ParsePlaceholder</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a46587dd82842638c50848021c57b6fad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab1bcf36c86bd2c3f9d8dbd8793642f43"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ab1bcf36c86bd2c3f9d8dbd8793642f43">ParseRealDiv</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:ab1bcf36c86bd2c3f9d8dbd8793642f43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a64aff7efca99114ef64a6b30953d93ee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a64aff7efca99114ef64a6b30953d93ee">ParseRelu</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a64aff7efca99114ef64a6b30953d93ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a68cb028cdc437c8daad2e2c9406da4f9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a68cb028cdc437c8daad2e2c9406da4f9">ParseRelu6</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a68cb028cdc437c8daad2e2c9406da4f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7278a1a8d099cde1417ca4f7e3c2ef9c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a7278a1a8d099cde1417ca4f7e3c2ef9c">ParseReshape</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a7278a1a8d099cde1417ca4f7e3c2ef9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acce71942f3e1ccf87e85f3b4819e2691"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#acce71942f3e1ccf87e85f3b4819e2691">ParseResizeBilinear</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:acce71942f3e1ccf87e85f3b4819e2691"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7cac9d2ac092398b0efe64ec8e006511"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a7cac9d2ac092398b0efe64ec8e006511">ParseRsqrt</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a7cac9d2ac092398b0efe64ec8e006511"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b1a337a431d198f68de42bde32ce2f1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a1b1a337a431d198f68de42bde32ce2f1">ParseShape</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a1b1a337a431d198f68de42bde32ce2f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad0f8f08a9af6b35b3218969adec2a3c3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ad0f8f08a9af6b35b3218969adec2a3c3">ParseSqueeze</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:ad0f8f08a9af6b35b3218969adec2a3c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee93c8f83169730c175da7601fca5de6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#aee93c8f83169730c175da7601fca5de6">ParseSigmoid</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:aee93c8f83169730c175da7601fca5de6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a60be7de45006fefe5ace8729014b0fb7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a60be7de45006fefe5ace8729014b0fb7">ParseSoftmax</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a60be7de45006fefe5ace8729014b0fb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb49b9213d49e8f2c49dd98506f164b2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#abb49b9213d49e8f2c49dd98506f164b2">ParseSoftplus</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:abb49b9213d49e8f2c49dd98506f164b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d67929430d96c47e5652d84da82c1fb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a5d67929430d96c47e5652d84da82c1fb">ParseSplit</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a5d67929430d96c47e5652d84da82c1fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a16ffc6437ceb17b6ad370192a5100944"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a16ffc6437ceb17b6ad370192a5100944">ParseStridedSlice</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a16ffc6437ceb17b6ad370192a5100944"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44a628660248f91dad0ba4f625014bcc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a44a628660248f91dad0ba4f625014bcc">ParseTanh</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a44a628660248f91dad0ba4f625014bcc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4cb0ff36b50bf417cfde094f34ec8e04"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a4cb0ff36b50bf417cfde094f34ec8e04">ParseMaxPool</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a4cb0ff36b50bf417cfde094f34ec8e04"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8a7168f2bbef09692d1983b3059046ac"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8a7168f2bbef09692d1983b3059046ac">ParseAvgPool</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a8a7168f2bbef09692d1983b3059046ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31983c2de0331de6b32bf08c0d04cb0c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a31983c2de0331de6b32bf08c0d04cb0c">ParsePooling2d</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef, <a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718">armnn::PoolingAlgorithm</a> pooltype)</td></tr>
+<tr class="separator:a31983c2de0331de6b32bf08c0d04cb0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf7e8c7e2e95c9ac09b1197c04b992a3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#acf7e8c7e2e95c9ac09b1197c04b992a3">ParseEqual</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:acf7e8c7e2e95c9ac09b1197c04b992a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acb94c45784c439b75dcf858655a6d330"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#acb94c45784c439b75dcf858655a6d330">ParseMaximum</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:acb94c45784c439b75dcf858655a6d330"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b86d12475da84cedb4632a47bb68b1e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a5b86d12475da84cedb4632a47bb68b1e">ParseMinimum</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a5b86d12475da84cedb4632a47bb68b1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ffcd919d2466d7aa5d2325ee77c322d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9ffcd919d2466d7aa5d2325ee77c322d">ParseGather</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a9ffcd919d2466d7aa5d2325ee77c322d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3e11b85d3302eb25275a1389647d0f41"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a3e11b85d3302eb25275a1389647d0f41">ParseGreater</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a3e11b85d3302eb25275a1389647d0f41"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a41fc15eebc9b7bb3404d1a2634639c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2a41fc15eebc9b7bb3404d1a2634639c">ParsePad</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a2a41fc15eebc9b7bb3404d1a2634639c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f8a3151672d48b7b929cfd9acd5add1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a6f8a3151672d48b7b929cfd9acd5add1">ParseSub</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a6f8a3151672d48b7b929cfd9acd5add1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7fe3fd8cda30d697f99359a6e295677b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a7fe3fd8cda30d697f99359a6e295677b">ParseStack</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a7fe3fd8cda30d697f99359a6e295677b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a38b8abe6086a61e8831391b8717453cf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a38b8abe6086a61e8831391b8717453cf">ParseTranspose</a> (const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</td></tr>
+<tr class="separator:a38b8abe6086a61e8831391b8717453cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a03e49169bbbcfea8be81ff4139d1f75f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a03e49169bbbcfea8be81ff4139d1f75f">AddActivationLayer</a> (const tensorflow::NodeDef &amp;nodeDef, <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">armnn::ActivationDescriptor</a> &amp;desc)</td></tr>
+<tr class="separator:a03e49169bbbcfea8be81ff4139d1f75f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a19ef0406d9678e177106095779f0546e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a19ef0406d9678e177106095779f0546e">AddAdditionLayer</a> (const tensorflow::NodeDef &amp;nodeDef, bool isBiasAdd=<a class="el" href="_ref_layer_tests_8cpp.xhtml#a2289f9e7fac0ce47801448e873b04303">false</a>)</td></tr>
+<tr class="separator:a19ef0406d9678e177106095779f0546e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a138dbe1b5b87970a073445ab7fc512f5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a138dbe1b5b87970a073445ab7fc512f5">AddRealDivLayer</a> (const tensorflow::NodeDef &amp;nodeDef)</td></tr>
+<tr class="separator:a138dbe1b5b87970a073445ab7fc512f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae3a610533ecb2a9a87fb47785f7fb712"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae3a610533ecb2a9a87fb47785f7fb712">AddMaximumLayer</a> (const tensorflow::NodeDef &amp;nodeDef)</td></tr>
+<tr class="separator:ae3a610533ecb2a9a87fb47785f7fb712"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c166c3e83ea49c47b06e754988183e8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2c166c3e83ea49c47b06e754988183e8">AddMultiplicationLayer</a> (const tensorflow::NodeDef &amp;nodeDef)</td></tr>
+<tr class="separator:a2c166c3e83ea49c47b06e754988183e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a64bdfd07d439803d0ec4c8b9b5c3e442"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a64bdfd07d439803d0ec4c8b9b5c3e442">AddFullyConnectedLayer</a> (const tensorflow::NodeDef &amp;matMulNodeDef, const tensorflow::NodeDef *addNodeDef, const char *armnnLayerName)</td></tr>
+<tr class="separator:a64bdfd07d439803d0ec4c8b9b5c3e442"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3296cce0af78204d897a746643987f07"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a3296cce0af78204d897a746643987f07">IsSupportedLeakyReluPattern</a> (const tensorflow::NodeDef &amp;mulNodeDef, size_t alphaLayerIndex, const <a class="el" href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">OutputOfParsedTfOperation</a> &amp;otherOp, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> **outputOfLeakyRelu, <a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">armnn::ActivationDescriptor</a> &amp;desc)</td></tr>
+<tr class="separator:a3296cce0af78204d897a746643987f07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0562881f75a2083315f1a1660686812b"><td class="memItemLeft" align="right" valign="top">std::pair&lt; <a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a0562881f75a2083315f1a1660686812b">ProcessElementwiseInputSlots</a> (const tensorflow::NodeDef &amp;nodeDef, const std::string &amp;layerName)</td></tr>
+<tr class="separator:a0562881f75a2083315f1a1660686812b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ceb262ac0351dcf1aa9f7e1dc298489"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a4ceb262ac0351dcf1aa9f7e1dc298489">ProcessComparisonLayer</a> (<a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *input0Slot, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *input1Slot, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *const layer, const tensorflow::NodeDef &amp;nodeDef)</td></tr>
+<tr class="separator:a4ceb262ac0351dcf1aa9f7e1dc298489"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d5cf4cdeeb79d5e4fed01981d734b50"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a0d5cf4cdeeb79d5e4fed01981d734b50">ProcessElementwiseLayer</a> (<a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *input0Slot, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *input1Slot, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *const layer, const tensorflow::NodeDef &amp;nodeDef)</td></tr>
+<tr class="separator:a0d5cf4cdeeb79d5e4fed01981d734b50"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee1bc04a8977a1a8755243ed9e54f8e2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#aee1bc04a8977a1a8755243ed9e54f8e2">CreateAdditionLayer</a> (const tensorflow::NodeDef &amp;nodeDef, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *input0Slot, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *input1Slot, const std::string &amp;layerName)</td></tr>
+<tr class="separator:aee1bc04a8977a1a8755243ed9e54f8e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a46aa829ec45268469dacead34f4f2e02"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a46aa829ec45268469dacead34f4f2e02">CreateAdditionLayer</a> (const tensorflow::NodeDef &amp;nodeDef, const <a class="el" href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">OutputOfParsedTfOperation</a> &amp;opOne, const <a class="el" href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">OutputOfParsedTfOperation</a> &amp;opTwo, unsigned int numberOfAddition)</td></tr>
+<tr class="separator:a46aa829ec45268469dacead34f4f2e02"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae65a0d536c7e4e26151b9e2574c64c4e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae65a0d536c7e4e26151b9e2574c64c4e">CreateAdditionLayer</a> (const tensorflow::NodeDef &amp;nodeDef, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *layerOne, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *layerTwo, unsigned int numberOfAddition, unsigned long numberOfLayersToConnect, bool isOdd)</td></tr>
+<tr class="separator:ae65a0d536c7e4e26151b9e2574c64c4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a614a576a18e510e4e7898259ce693ee7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a614a576a18e510e4e7898259ce693ee7">CreateAdditionLayer</a> (const tensorflow::NodeDef &amp;nodeDef, const <a class="el" href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">OutputOfParsedTfOperation</a> &amp;op, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *layer)</td></tr>
+<tr class="separator:a614a576a18e510e4e7898259ce693ee7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2a1112c66d08e3760ecccf39c7854a90"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2a1112c66d08e3760ecccf39c7854a90">TrackInputBinding</a> (<a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *layer, <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a> id, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;tensorInfo)</td></tr>
+<tr class="separator:a2a1112c66d08e3760ecccf39c7854a90"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0c98e07875a82c71c65bbb53eb347561"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a0c98e07875a82c71c65bbb53eb347561">TrackOutputBinding</a> (<a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *layer, <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a> id, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;tensorInfo)</td></tr>
+<tr class="separator:a0c98e07875a82c71c65bbb53eb347561"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae89a123aad1c66a76c398b7af216aae4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae89a123aad1c66a76c398b7af216aae4">Cleanup</a> ()</td></tr>
+<tr class="separator:ae89a123aad1c66a76c398b7af216aae4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:aa09a8bb02eed50715082d8b7fccd2f8d"><td class="memItemLeft" align="right" valign="top">static const std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#aa09a8bb02eed50715082d8b7fccd2f8d">GetVersion</a> ()</td></tr>
+<tr class="memdesc:aa09a8bb02eed50715082d8b7fccd2f8d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve version in X.Y.Z form. <a href="#aa09a8bb02eed50715082d8b7fccd2f8d">More...</a><br /></td></tr>
+<tr class="separator:aa09a8bb02eed50715082d8b7fccd2f8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac41a09541f963e43c9a9300e8c28eb06"><td class="memItemLeft" align="right" valign="top">static std::pair&lt; <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a>, <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac41a09541f963e43c9a9300e8c28eb06">GetBindingInfo</a> (const std::string &amp;layerName, const char *bindingPointDesc, const std::unordered_map&lt; std::string, <a class="el" href="namespacearmnn_tf_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> &gt; &amp;nameToBindingInfo)</td></tr>
+<tr class="separator:ac41a09541f963e43c9a9300e8c28eb06"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5f5e6255b21fdf458d3733bbdcdc4af5"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a5f5e6255b21fdf458d3733bbdcdc4af5">TrackBindingPoint</a> (<a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *layer, <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a> id, const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;tensorInfo, const char *bindingPointDesc, std::unordered_map&lt; std::string, <a class="el" href="namespacearmnn_tf_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> &gt; &amp;nameToBindingInfo)</td></tr>
+<tr class="separator:a5f5e6255b21fdf458d3733bbdcdc4af5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a2db3ae8d422f17d455e0ba0cb6291d2a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a></td></tr>
+<tr class="memdesc:a2db3ae8d422f17d455e0ba0cb6291d2a"><td class="mdescLeft">&#160;</td><td class="mdescRight">The network we're building. Gets cleared after it is passed to the user. <a href="#a2db3ae8d422f17d455e0ba0cb6291d2a">More...</a><br /></td></tr>
+<tr class="separator:a2db3ae8d422f17d455e0ba0cb6291d2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a76ea67f3f7d1d5835c5a92b65dc0854c"><td class="memItemLeft" align="right" valign="top">std::map&lt; std::string, <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a76ea67f3f7d1d5835c5a92b65dc0854c">m_InputShapes</a></td></tr>
+<tr class="separator:a76ea67f3f7d1d5835c5a92b65dc0854c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a86cb41745deebd9b0ccf157d97d4d9ca"><td class="memItemLeft" align="right" valign="top">std::vector&lt; std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a86cb41745deebd9b0ccf157d97d4d9ca">m_RequestedOutputs</a></td></tr>
+<tr class="separator:a86cb41745deebd9b0ccf157d97d4d9ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac2c326b2757eadec924e4b7f56a9379c"><td class="memItemLeft" align="right" valign="top">std::unordered_map&lt; std::string, const tensorflow::NodeDef * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">m_NodesByName</a></td></tr>
+<tr class="memdesc:ac2c326b2757eadec924e4b7f56a9379c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Map of nodes extracted from the GraphDef to speed up parsing. <a href="#ac2c326b2757eadec924e4b7f56a9379c">More...</a><br /></td></tr>
+<tr class="separator:ac2c326b2757eadec924e4b7f56a9379c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8dd5c5f271f0f5bd68612e7927d94e58"><td class="memItemLeft" align="right" valign="top">std::unordered_map&lt; std::string, <a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8dd5c5f271f0f5bd68612e7927d94e58">m_ParsedTfOperations</a></td></tr>
+<tr class="separator:a8dd5c5f271f0f5bd68612e7927d94e58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac62e2558c14e01605f2b4e1e21cdd1e8"><td class="memItemLeft" align="right" valign="top">std::unordered_map&lt; std::string, <a class="el" href="namespacearmnn_tf_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac62e2558c14e01605f2b4e1e21cdd1e8">m_NetworkInputsBindingInfo</a></td></tr>
+<tr class="memdesc:ac62e2558c14e01605f2b4e1e21cdd1e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps input layer names to their corresponding ids and tensor info. <a href="#ac62e2558c14e01605f2b4e1e21cdd1e8">More...</a><br /></td></tr>
+<tr class="separator:ac62e2558c14e01605f2b4e1e21cdd1e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a62d6d6cba9ed0d3ad63fffb40aec86b5"><td class="memItemLeft" align="right" valign="top">std::unordered_map&lt; std::string, <a class="el" href="namespacearmnn_tf_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a62d6d6cba9ed0d3ad63fffb40aec86b5">m_NetworkOutputsBindingInfo</a></td></tr>
+<tr class="memdesc:a62d6d6cba9ed0d3ad63fffb40aec86b5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maps output layer names to their corresponding ids and tensor info. <a href="#a62d6d6cba9ed0d3ad63fffb40aec86b5">More...</a><br /></td></tr>
+<tr class="separator:a62d6d6cba9ed0d3ad63fffb40aec86b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a4b6b3a1fd0ce13ce7d6e3b4342f852c9"><td class="memItemLeft" align="right" valign="top">static const std::map&lt; std::string, <a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a82733f14dce0abd22e6d5a79a0a6b936">OperationParsingFunction</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a4b6b3a1fd0ce13ce7d6e3b4342f852c9">ms_OperationNameToParsingFunctions</a></td></tr>
+<tr class="memdesc:a4b6b3a1fd0ce13ce7d6e3b4342f852c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Map of TensorFlow operation names to parsing member functions. <a href="#a4b6b3a1fd0ce13ce7d6e3b4342f852c9">More...</a><br /></td></tr>
+<tr class="separator:a4b6b3a1fd0ce13ce7d6e3b4342f852c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9414a632d2c86615287df33c0828f903"><td class="memItemLeft" align="right" valign="top">static const std::list&lt; std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9414a632d2c86615287df33c0828f903">m_ControlInputs</a></td></tr>
+<tr class="separator:a9414a632d2c86615287df33c0828f903"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8hpp_source.xhtml#l00064">64</a> of file <a class="el" href="_tf_parser_8hpp_source.xhtml">TfParser.hpp</a>.</p>
+</div><h2 class="groupheader">Member Typedef Documentation</h2>
+<a id="a82733f14dce0abd22e6d5a79a0a6b936"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a82733f14dce0abd22e6d5a79a0a6b936">&#9670;&nbsp;</a></span>OperationParsingFunction</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">using <a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a82733f14dce0abd22e6d5a79a0a6b936">OperationParsingFunction</a> = <a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>(TfParserImpl::*)(const tensorflow::NodeDef&amp; nodeDef, const tensorflow::GraphDef&amp; graphDef)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8hpp_source.xhtml#l00254">254</a> of file <a class="el" href="_tf_parser_8hpp_source.xhtml">TfParser.hpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a7789bc092c96403f549edf62955ac1c3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7789bc092c96403f549edf62955ac1c3">&#9670;&nbsp;</a></span>TfParserImpl() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml">TfParserImpl</a> </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l00540">540</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; : <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>(<span class="keyword">nullptr</span>, <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160;{</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="af5d4693a557320db8fff5caa153da7b7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af5d4693a557320db8fff5caa153da7b7">&#9670;&nbsp;</a></span>~TfParserImpl()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">~<a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml">TfParserImpl</a> </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">default</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a04d68a2b7fb41ae2448f1ae91b50379f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a04d68a2b7fb41ae2448f1ae91b50379f">&#9670;&nbsp;</a></span>TfParserImpl() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml">TfParserImpl</a> </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml">TfParserImpl</a> &amp;&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">delete</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a03e49169bbbcfea8be81ff4139d1f75f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a03e49169bbbcfea8be81ff4139d1f75f">&#9670;&nbsp;</a></span>AddActivationLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> AddActivationLayer </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">armnn::ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>desc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02984">2984</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l02753">ITfParser::TfParserImpl::ParseRelu()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02763">ITfParser::TfParserImpl::ParseRelu6()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02776">ITfParser::TfParserImpl::ParseSigmoid()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02912">ITfParser::TfParserImpl::ParseSoftplus()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l02971">ITfParser::TfParserImpl::ParseTanh()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160;{</div><div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 1);</div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160;</div><div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddActivationLayer(activationDesc, nodeDef.name().c_str());</div><div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>&#160;</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; prevLayerOutputSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>&#160; prevLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(prevLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a19ef0406d9678e177106095779f0546e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a19ef0406d9678e177106095779f0546e">&#9670;&nbsp;</a></span>AddAdditionLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> AddAdditionLayer </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>isBiasAdd</em> = <code><a class="el" href="_ref_layer_tests_8cpp.xhtml#a2289f9e7fac0ce47801448e873b04303">false</a></code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03118">3118</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l00356">CHECK_DATA_FORMAT</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00189">TensorInfo::SetShape()</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l00826">ITfParser::TfParserImpl::ParseAdd()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00747">ITfParser::TfParserImpl::ParseAddN()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l00857">ITfParser::TfParserImpl::ParseBiasAdd()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03119"></a><span class="lineno"> 3119</span>&#160;{</div><div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>&#160;</div><div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input0Slot = &amp;inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input1Slot = &amp;inputs[1].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[1].m_Index);</div><div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>&#160;</div><div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; input0Info = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; input1Info = input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>&#160;</div><div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>&#160; <span class="keywordflow">if</span> (isBiasAdd)</div><div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>&#160; {</div><div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>&#160; <span class="comment">// BiasAdd takes bias as a 1D tensor. We need to add a reshape layer to create a 4D tensor</span></div><div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>&#160; <span class="comment">// with the same data in the correct dimension for broadcast in addition.</span></div><div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>&#160; <span class="keywordflow">if</span>(input1Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() != 1)</div><div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>&#160; {</div><div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160; fmt::format(<span class="stringliteral">&quot;Unsupported bias for BiasAdd. It should be a 1D vector. &quot;</span></div><div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>&#160; <span class="stringliteral">&quot;Got {} dimensions for input {}. Node {} {}&quot;</span>,</div><div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160; input1Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(),</div><div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160; inputs[1].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160; nodeDef.name(),</div><div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160; }</div><div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160;</div><div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>&#160; <span class="keyword">const</span> std::string dataFormat = ReadMandatoryNodeStringAttribute(nodeDef, <span class="stringliteral">&quot;data_format&quot;</span>);</div><div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>&#160;</div><div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>&#160; <a class="code" href="_tf_parser_8cpp.xhtml#a3fb047570644cae325aa88d3cd7bb96e">CHECK_DATA_FORMAT</a>(nodeDef, dataFormat, <span class="stringliteral">&quot;BiasAdd&quot;</span>);</div><div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>&#160; input1Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input0Slot, input1Slot, dataFormat == <span class="stringliteral">&quot;NHWC&quot;</span>, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>&#160; }</div><div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>&#160; {</div><div class="line"><a name="l03150"></a><span class="lineno"> 3150</span>&#160; <span class="keywordflow">if</span> (input0Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 1)</div><div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>&#160; {</div><div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> isNHWC = <span class="keyword">true</span>;</div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160; input0Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input1Slot, input0Slot, isNHWC, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>&#160; }</div><div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>&#160;</div><div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>&#160; <span class="keywordflow">if</span> (input1Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 1)</div><div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>&#160; {</div><div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> isNHWC = <span class="keyword">true</span>;</div><div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160; input1Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input0Slot, input1Slot, isNHWC, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>&#160; }</div><div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>&#160; }</div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160;</div><div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddAdditionLayer(nodeDef.name().c_str());</div><div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>&#160;</div><div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>&#160; input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>&#160; input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(1));</div><div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>&#160;</div><div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160; <span class="keywordflow">if</span> (input0Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == input1Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>())</div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160; {</div><div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; input0Shape = input0Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; input1Shape = input1Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>&#160;</div><div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>&#160; std::vector&lt;unsigned int&gt; outputShape;</div><div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>&#160; outputShape.reserve(input0Shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</div><div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo(input0Info);</div><div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>&#160;</div><div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; input0Shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); i++)</div><div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>&#160; {</div><div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>&#160; outputShape.push_back(std::max(input0Shape[i], input1Shape[i]));</div><div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>&#160; }</div><div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>&#160;</div><div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>&#160; outputInfo.SetShape(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(input0Shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(), outputShape.data()));</div><div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>&#160;</div><div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l03185"></a><span class="lineno"> 3185</span>&#160; }</div><div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (input0Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 1 &amp;&amp; isBiasAdd == <span class="keyword">false</span>)</div><div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>&#160; {</div><div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>&#160; }</div><div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>&#160; {</div><div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>&#160; }</div><div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>&#160;</div><div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="_tf_parser_8cpp_xhtml_a3fb047570644cae325aa88d3cd7bb96e"><div class="ttname"><a href="_tf_parser_8cpp.xhtml#a3fb047570644cae325aa88d3cd7bb96e">CHECK_DATA_FORMAT</a></div><div class="ttdeci">#define CHECK_DATA_FORMAT(NODE_DEF, FORMAT, NODE_TYPE)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00356">TfParser.cpp:356</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorShape::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdoc">Function that returns the tensor rank. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00174">Tensor.cpp:174</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a4fc55afb4885278ad1510b2c4307af76"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">armnn::optimizations::AddBroadcastReshapeLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddBroadcastReshapeLayerImpl &gt; AddBroadcastReshapeLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_broadcast_reshape_layer_8hpp_source.xhtml#l00082">AddBroadcastReshapeLayer.hpp:82</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a64bdfd07d439803d0ec4c8b9b5c3e442"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a64bdfd07d439803d0ec4c8b9b5c3e442">&#9670;&nbsp;</a></span>AddFullyConnectedLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> * AddFullyConnectedLayer </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>matMulNodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::NodeDef *&#160;</td>
+ <td class="paramname"><em>addNodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>armnnLayerName</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03315">3315</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00284">BaseTensor&lt; MemoryType &gt;::GetShape()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00402">FullyConnectedDescriptor::m_BiasEnabled</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, and <a class="el" href="_i_tf_parser_8hpp_source.xhtml#l00061">ITfParser::ParsedTfOperation</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l00826">ITfParser::TfParserImpl::ParseAdd()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>&#160;{</div><div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>&#160; <span class="comment">// Finds bias const (if applicable).</span></div><div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>&#160; ParsedConstTfOperation&lt;float&gt;* biasNode = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>&#160; <span class="keywordflow">if</span> (addNodeDef != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>&#160; {</div><div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; addInputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(*addNodeDef, 2);</div><div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>&#160; <span class="comment">// Finds our inputs.</span></div><div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>&#160; <span class="keywordflow">if</span> (HasParsedConstTensor&lt;float&gt;(addInputs[0].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>&#160; {</div><div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>&#160; biasNode = PolymorphicDowncast&lt;ParsedConstTfOperation&lt;float&gt;*&gt;(addInputs[0].m_IndexedValue);</div><div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>&#160; }</div><div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (HasParsedConstTensor&lt;float&gt;(addInputs[1].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>&#160; {</div><div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>&#160; biasNode = PolymorphicDowncast&lt;ParsedConstTfOperation&lt;float&gt;*&gt;(addInputs[1].m_IndexedValue);</div><div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>&#160; }</div><div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>&#160; {</div><div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports fully connected layers with constant bias. &quot;</span></div><div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>&#160; <span class="stringliteral">&quot;Inputs {} and {}. AddNode {}. MatMulNode {} {}&quot;</span>,</div><div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>&#160; addInputs[0].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>&#160; addInputs[1].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>&#160; addNodeDef-&gt;name(),</div><div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>&#160; matMulNodeDef.name(),</div><div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>&#160; }</div><div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>&#160; }</div><div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>&#160;</div><div class="line"><a name="l03345"></a><span class="lineno"> 3345</span>&#160; <span class="comment">// Finds matmul inputs.</span></div><div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>&#160; ParsedConstTfOperation&lt;float&gt;* weightNode = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>&#160; <a class="code" href="classarmnn_tf_parser_1_1_i_tf_parser.xhtml#a81cd010ead68e4d96e6cb28255143f49">ParsedTfOperation</a>* inputNode = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputIdx = 0;</div><div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; mulInputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(matMulNodeDef, 2);</div><div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>&#160; <span class="keywordflow">if</span> (HasParsedConstTensor&lt;float&gt;(mulInputs[0].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>&#160; {</div><div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>&#160; weightNode = PolymorphicDowncast&lt;ParsedConstTfOperation&lt;float&gt;*&gt;(mulInputs[0].m_IndexedValue);</div><div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>&#160; inputNode = mulInputs[1].m_IndexedValue;</div><div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>&#160; inputIdx = mulInputs[1].m_Index;</div><div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>&#160; }</div><div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (HasParsedConstTensor&lt;float&gt;(mulInputs[1].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l03357"></a><span class="lineno"> 3357</span>&#160; {</div><div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>&#160; weightNode = PolymorphicDowncast&lt;ParsedConstTfOperation&lt;float&gt;*&gt;(mulInputs[1].m_IndexedValue);</div><div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>&#160; inputNode = mulInputs[0].m_IndexedValue;</div><div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>&#160; inputIdx = mulInputs[0].m_Index;</div><div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>&#160; }</div><div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>&#160; {</div><div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03365"></a><span class="lineno"> 3365</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports fully connected layers with constant weights. &quot;</span></div><div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>&#160; <span class="stringliteral">&quot;Inputs {} and {}. MatMulNode {} {}&quot;</span>,</div><div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>&#160; mulInputs[0].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>&#160; mulInputs[1].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>&#160; matMulNodeDef.name(),</div><div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>&#160; }</div><div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>&#160;</div><div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>&#160; std::vector&lt;float&gt; weightTensorData;</div><div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>&#160; <span class="comment">// Handles weight.</span></div><div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>&#160; <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> weights = weightNode-&gt;GetConstTensor(weightTensorData);</div><div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>&#160;</div><div class="line"><a name="l03377"></a><span class="lineno"> 3377</span>&#160; <a class="code" href="structarmnn_1_1_fully_connected_descriptor.xhtml">FullyConnectedDescriptor</a> desc;</div><div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>&#160; desc.<a class="code" href="structarmnn_1_1_fully_connected_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = addNodeDef != <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>&#160;</div><div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>&#160; <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ConstTensor&gt;</a> optionalBiases;</div><div class="line"><a name="l03382"></a><span class="lineno"> 3382</span>&#160; std::vector&lt;float&gt; biasTensorData;</div><div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>&#160; <span class="comment">// Makes the layer.</span></div><div class="line"><a name="l03384"></a><span class="lineno"> 3384</span>&#160; <span class="keywordflow">if</span> (addNodeDef != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>&#160; {</div><div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>&#160; <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> biases = biasNode-&gt;GetConstTensor(biasTensorData);</div><div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>&#160;</div><div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>&#160; <span class="keywordflow">if</span> (weights.<a class="code" href="classarmnn_1_1_base_tensor.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[1] != biases.<a class="code" href="classarmnn_1_1_base_tensor.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0])</div><div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>&#160; {</div><div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>&#160; fmt::format(<span class="stringliteral">&quot;Shape of matmul weights and bias do not match. &quot;</span></div><div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>&#160; <span class="stringliteral">&quot;AddNode {}. MatMulNode {} {}&quot;</span>,</div><div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>&#160; addNodeDef-&gt;name(),</div><div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>&#160; matMulNodeDef.name(),</div><div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>&#160; }</div><div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>&#160;</div><div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>&#160; optionalBiases = <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ConstTensor&gt;</a>(biases);</div><div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>&#160; }</div><div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>&#160; layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddFullyConnectedLayer(desc, weights, optionalBiases, armnnLayerName);</div><div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>&#160;</div><div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>&#160;</div><div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>&#160; inputNode-&gt;ResolveArmnnOutputSlot(inputIdx).Connect(layer-&gt;GetInputSlot(0));</div><div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> batches = inputNode-&gt;ResolveArmnnOutputSlot(inputIdx).GetTensorInfo().GetShape()[0];</div><div class="line"><a name="l03406"></a><span class="lineno"> 3406</span>&#160;</div><div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>&#160; <span class="comment">// Handles output.</span></div><div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo({ batches, weights.<a class="code" href="classarmnn_1_1_base_tensor.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[1] }, DataType::Float32);</div><div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>&#160; layer-&gt;GetOutputSlot(0).SetTensorInfo(outputInfo);</div><div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>&#160; <span class="keywordflow">return</span> layer;</div><div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_optional_xhtml"><div class="ttname"><a href="classarmnn_1_1_optional.xhtml">armnn::Optional</a></div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00270">Optional.hpp:270</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="classarmnn_1_1_base_tensor_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_base_tensor.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::BaseTensor::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00284">Tensor.hpp:284</a></div></div>
+<div class="ttc" id="classarmnn_tf_parser_1_1_i_tf_parser_xhtml_a81cd010ead68e4d96e6cb28255143f49"><div class="ttname"><a href="classarmnn_tf_parser_1_1_i_tf_parser.xhtml#a81cd010ead68e4d96e6cb28255143f49">armnnTfParser::ITfParser::ParsedTfOperation</a></div><div class="ttdeci">friend class ParsedTfOperation</div><div class="ttdef"><b>Definition:</b> <a href="_i_tf_parser_8hpp_source.xhtml#l00061">ITfParser.hpp:61</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="structarmnn_1_1_fully_connected_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_fully_connected_descriptor.xhtml">armnn::FullyConnectedDescriptor</a></div><div class="ttdoc">A FullyConnectedDescriptor for the FullyConnectedLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00389">Descriptors.hpp:389</a></div></div>
+<div class="ttc" id="structarmnn_1_1_fully_connected_descriptor_xhtml_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_fully_connected_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">armnn::FullyConnectedDescriptor::m_BiasEnabled</a></div><div class="ttdeci">bool m_BiasEnabled</div><div class="ttdoc">Enable/disable bias. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00402">Descriptors.hpp:402</a></div></div>
+<div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00314">Tensor.hpp:314</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae3a610533ecb2a9a87fb47785f7fb712"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae3a610533ecb2a9a87fb47785f7fb712">&#9670;&nbsp;</a></span>AddMaximumLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> AddMaximumLayer </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03236">3236</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00189">TensorInfo::SetShape()</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l01759">ITfParser::TfParserImpl::ParseMaximum()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>&#160;{</div><div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>&#160;</div><div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input0Slot = &amp;inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input1Slot = &amp;inputs[1].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[1].m_Index);</div><div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>&#160;</div><div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> input0NumDims = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> input1NumDims = input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>&#160;</div><div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>&#160; <span class="keywordflow">if</span> (input0NumDims &lt; input1NumDims)</div><div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>&#160; {</div><div class="line"><a name="l03248"></a><span class="lineno"> 3248</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> isNHWC = <span class="keyword">true</span>;</div><div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>&#160; input0Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input1Slot, input0Slot, isNHWC, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>&#160; }</div><div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>&#160; <span class="keywordflow">if</span> (input1NumDims &lt; input0NumDims)</div><div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>&#160; {</div><div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> isNHWC = <span class="keyword">true</span>;</div><div class="line"><a name="l03254"></a><span class="lineno"> 3254</span>&#160; input1Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input0Slot, input1Slot, isNHWC, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l03255"></a><span class="lineno"> 3255</span>&#160; }</div><div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>&#160;</div><div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddMaximumLayer(nodeDef.name().c_str());</div><div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>&#160;</div><div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>&#160; input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>&#160; input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(1));</div><div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>&#160;</div><div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>&#160; std::vector&lt;unsigned int&gt; outputShape;</div><div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>&#160;</div><div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; input0Shape = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; input1Shape = input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>&#160;</div><div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; input0Shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); i++)</div><div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>&#160; {</div><div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>&#160; outputShape.push_back(std::max(input0Shape[i], input1Shape[i]));</div><div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>&#160; }</div><div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>&#160;</div><div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>&#160; outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(input0Shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(), outputShape.data()));</div><div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>&#160;</div><div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_abe8889e8150beef5fd204b2d87b49298"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">armnn::TensorInfo::SetShape</a></div><div class="ttdeci">void SetShape(const TensorShape &amp;newShape)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00189">Tensor.hpp:189</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorShape::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdoc">Function that returns the tensor rank. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00174">Tensor.cpp:174</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a4fc55afb4885278ad1510b2c4307af76"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">armnn::optimizations::AddBroadcastReshapeLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddBroadcastReshapeLayerImpl &gt; AddBroadcastReshapeLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_broadcast_reshape_layer_8hpp_source.xhtml#l00082">AddBroadcastReshapeLayer.hpp:82</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2c166c3e83ea49c47b06e754988183e8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2c166c3e83ea49c47b06e754988183e8">&#9670;&nbsp;</a></span>AddMultiplicationLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> * AddMultiplicationLayer </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03279">3279</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>&#160;{</div><div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>&#160;</div><div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddMultiplicationLayer(nodeDef.name().c_str());</div><div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input0Slot = &amp;inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input1Slot = &amp;inputs[1].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[1].m_Index);</div><div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>&#160;</div><div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> input0NumDims = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> input1NumDims = input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>&#160;</div><div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>&#160; <span class="keywordflow">if</span> (input0NumDims &lt; input1NumDims)</div><div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>&#160; {</div><div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> isNHWC = <span class="keyword">true</span>;</div><div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>&#160; input0Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input1Slot, input0Slot, isNHWC, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>&#160; }</div><div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>&#160; <span class="keywordflow">if</span> (input1NumDims &lt; input0NumDims)</div><div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>&#160; {</div><div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> isNHWC = <span class="keyword">true</span>;</div><div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>&#160; input1Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input0Slot, input1Slot, isNHWC, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l03299"></a><span class="lineno"> 3299</span>&#160; }</div><div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>&#160;</div><div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>&#160; input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>&#160; input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(1));</div><div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>&#160;</div><div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>&#160; <span class="keywordflow">if</span> (input0NumDims &lt; input1NumDims)</div><div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>&#160; {</div><div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l03307"></a><span class="lineno"> 3307</span>&#160; }</div><div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>&#160; {</div><div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>&#160; }</div><div class="line"><a name="l03312"></a><span class="lineno"> 3312</span>&#160; <span class="keywordflow">return</span> layer;</div><div class="line"><a name="l03313"></a><span class="lineno"> 3313</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a4fc55afb4885278ad1510b2c4307af76"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">armnn::optimizations::AddBroadcastReshapeLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddBroadcastReshapeLayerImpl &gt; AddBroadcastReshapeLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_broadcast_reshape_layer_8hpp_source.xhtml#l00082">AddBroadcastReshapeLayer.hpp:82</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a138dbe1b5b87970a073445ab7fc512f5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a138dbe1b5b87970a073445ab7fc512f5">&#9670;&nbsp;</a></span>AddRealDivLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> AddRealDivLayer </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03198">3198</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l02746">ITfParser::TfParserImpl::ParseRealDiv()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>&#160;{</div><div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>&#160;</div><div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddDivisionLayer(nodeDef.name().c_str());</div><div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input0Slot = &amp;inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input1Slot = &amp;inputs[1].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[1].m_Index);</div><div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>&#160;</div><div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> input0NumDims = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> input1NumDims = input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>&#160;</div><div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>&#160;</div><div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>&#160; <span class="keywordflow">if</span> (input0NumDims &lt; input1NumDims)</div><div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>&#160; {</div><div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> isNHWC = <span class="keyword">true</span>;</div><div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>&#160; input0Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input1Slot, input0Slot, isNHWC, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>&#160; }</div><div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>&#160; <span class="keywordflow">if</span> (input1NumDims &lt; input0NumDims)</div><div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>&#160; {</div><div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> isNHWC = <span class="keyword">true</span>;</div><div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>&#160; input1Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input0Slot, input1Slot, isNHWC, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>&#160; }</div><div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>&#160;</div><div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>&#160; input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>&#160; input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(1));</div><div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>&#160;</div><div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>&#160; <span class="keywordflow">if</span> (input0NumDims &lt; input1NumDims)</div><div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>&#160; {</div><div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>&#160; }</div><div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>&#160; {</div><div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>&#160;</div><div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>&#160; }</div><div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a4fc55afb4885278ad1510b2c4307af76"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">armnn::optimizations::AddBroadcastReshapeLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddBroadcastReshapeLayerImpl &gt; AddBroadcastReshapeLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_broadcast_reshape_layer_8hpp_source.xhtml#l00082">AddBroadcastReshapeLayer.hpp:82</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae89a123aad1c66a76c398b7af216aae4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae89a123aad1c66a76c398b7af216aae4">&#9670;&nbsp;</a></span>Cleanup()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Cleanup </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03669">3669</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8hpp_source.xhtml#l00261">ITfParser::TfParserImpl::m_InputShapes</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00265">ITfParser::TfParserImpl::m_NodesByName</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00267">ITfParser::TfParserImpl::m_ParsedTfOperations</a>, and <a class="el" href="_tf_parser_8hpp_source.xhtml#l00262">ITfParser::TfParserImpl::m_RequestedOutputs</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03639">ITfParser::TfParserImpl::CreateNetworkFromGraphDef()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>&#160;{</div><div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>&#160; <span class="comment">// Cleanup, in case we reuse this parser.</span></div><div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a76ea67f3f7d1d5835c5a92b65dc0854c">m_InputShapes</a>.clear();</div><div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a86cb41745deebd9b0ccf157d97d4d9ca">m_RequestedOutputs</a>.clear();</div><div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">m_NodesByName</a>.clear();</div><div class="line"><a name="l03675"></a><span class="lineno"> 3675</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8dd5c5f271f0f5bd68612e7927d94e58">m_ParsedTfOperations</a>.clear();</div><div class="line"><a name="l03676"></a><span class="lineno"> 3676</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a76ea67f3f7d1d5835c5a92b65dc0854c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a76ea67f3f7d1d5835c5a92b65dc0854c">armnnTfParser::ITfParser::TfParserImpl::m_InputShapes</a></div><div class="ttdeci">std::map&lt; std::string, armnn::TensorShape &gt; m_InputShapes</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00261">TfParser.hpp:261</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a8dd5c5f271f0f5bd68612e7927d94e58"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8dd5c5f271f0f5bd68612e7927d94e58">armnnTfParser::ITfParser::TfParserImpl::m_ParsedTfOperations</a></div><div class="ttdeci">std::unordered_map&lt; std::string, ParsedTfOperationPtr &gt; m_ParsedTfOperations</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00267">TfParser.hpp:267</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a86cb41745deebd9b0ccf157d97d4d9ca"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a86cb41745deebd9b0ccf157d97d4d9ca">armnnTfParser::ITfParser::TfParserImpl::m_RequestedOutputs</a></div><div class="ttdeci">std::vector&lt; std::string &gt; m_RequestedOutputs</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00262">TfParser.hpp:262</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ac2c326b2757eadec924e4b7f56a9379c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">armnnTfParser::ITfParser::TfParserImpl::m_NodesByName</a></div><div class="ttdeci">std::unordered_map&lt; std::string, const tensorflow::NodeDef * &gt; m_NodesByName</div><div class="ttdoc">Map of nodes extracted from the GraphDef to speed up parsing. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00265">TfParser.hpp:265</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aee1bc04a8977a1a8755243ed9e54f8e2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aee1bc04a8977a1a8755243ed9e54f8e2">&#9670;&nbsp;</a></span>CreateAdditionLayer() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> * CreateAdditionLayer </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *&#160;</td>
+ <td class="paramname"><em>input0Slot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *&#160;</td>
+ <td class="paramname"><em>input1Slot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>layerName</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l00650">650</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00189">TensorInfo::SetShape()</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l00705">ITfParser::TfParserImpl::CreateAdditionLayer()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l00747">ITfParser::TfParserImpl::ParseAddN()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;{</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; input0Info = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; input1Info = input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> input0Dim = input0Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> input1Dim = input1Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">if</span> (input0Dim != input1Dim)</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; {</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <span class="comment">// broadcasting where input0 and input1 have different number of dimensions</span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="comment">// is only supported for 1D and 4D tensors pair</span></div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keywordflow">if</span> (input0Dim == 1 &amp;&amp; input1Dim == 4)</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; input0Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input1Slot, input0Slot, <span class="keyword">true</span>, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (input0Dim == 4 &amp;&amp; input1Dim == 1)</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; {</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; input1Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input0Slot, input1Slot, <span class="keyword">true</span>, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; {</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; fmt::format(<span class="stringliteral">&quot;Unsupported broadcast configuration for {} operation {} {}&quot;</span>,</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; layerName,</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; nodeDef.name(),</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; }</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; }</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddAdditionLayer(layerName.c_str());</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(1));</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="comment">// Ensure the output tensor has the correct dimensions even if a broadcast has been done</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; std::vector&lt;unsigned int&gt; outputShape;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; input0Shape = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; input1Shape = input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; input0Shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); i++)</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; outputShape.push_back(std::max(input0Shape[i], input1Shape[i]));</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(input0Shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(), outputShape.data()));</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keywordflow">return</span> layer;</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_abe8889e8150beef5fd204b2d87b49298"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">armnn::TensorInfo::SetShape</a></div><div class="ttdeci">void SetShape(const TensorShape &amp;newShape)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00189">Tensor.hpp:189</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorShape::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdoc">Function that returns the tensor rank. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00174">Tensor.cpp:174</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a4fc55afb4885278ad1510b2c4307af76"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">armnn::optimizations::AddBroadcastReshapeLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddBroadcastReshapeLayerImpl &gt; AddBroadcastReshapeLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_broadcast_reshape_layer_8hpp_source.xhtml#l00082">AddBroadcastReshapeLayer.hpp:82</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a46aa829ec45268469dacead34f4f2e02"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a46aa829ec45268469dacead34f4f2e02">&#9670;&nbsp;</a></span>CreateAdditionLayer() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> * CreateAdditionLayer </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">OutputOfParsedTfOperation</a> &amp;&#160;</td>
+ <td class="paramname"><em>opOne</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">OutputOfParsedTfOperation</a> &amp;&#160;</td>
+ <td class="paramname"><em>opTwo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>numberOfAddition</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l00724">724</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l00650">ITfParser::TfParserImpl::CreateAdditionLayer()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00049">WithOutputTensorIndex&lt; T &gt;::m_Index</a>, and <a class="el" href="_tf_parser_8hpp_source.xhtml#l00048">WithOutputTensorIndex&lt; T &gt;::m_IndexedValue</a>.</p>
+<div class="fragment"><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;{</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input0Slot = &amp;opOne.m_IndexedValue-&gt;ResolveArmnnOutputSlot(opOne.m_Index);</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input1Slot = &amp;opTwo.m_IndexedValue-&gt;ResolveArmnnOutputSlot(opTwo.m_Index);</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; std::string layerName(nodeDef.name());</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; layerName.append(<span class="stringliteral">&quot;_addN_&quot;</span>).append(std::to_string(numberOfAddition));</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#aee1bc04a8977a1a8755243ed9e54f8e2">CreateAdditionLayer</a>(nodeDef, input0Slot, input1Slot, layerName);</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_aee1bc04a8977a1a8755243ed9e54f8e2"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#aee1bc04a8977a1a8755243ed9e54f8e2">armnnTfParser::ITfParser::TfParserImpl::CreateAdditionLayer</a></div><div class="ttdeci">armnn::IConnectableLayer * CreateAdditionLayer(const tensorflow::NodeDef &amp;nodeDef, armnn::IOutputSlot *input0Slot, armnn::IOutputSlot *input1Slot, const std::string &amp;layerName)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00650">TfParser.cpp:650</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae65a0d536c7e4e26151b9e2574c64c4e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae65a0d536c7e4e26151b9e2574c64c4e">&#9670;&nbsp;</a></span>CreateAdditionLayer() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> * CreateAdditionLayer </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *&#160;</td>
+ <td class="paramname"><em>layerOne</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *&#160;</td>
+ <td class="paramname"><em>layerTwo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>numberOfAddition</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>numberOfLayersToConnect</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>isOdd</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l00705">705</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l00650">ITfParser::TfParserImpl::CreateAdditionLayer()</a>, and <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;{</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input0Slot = &amp;layerOne-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0);</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input1Slot = &amp;layerTwo-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; std::string layerName(nodeDef.name());</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keywordflow">if</span> (isOdd || numberOfLayersToConnect != 2)</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; {</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="comment">// we are not connecting the final layer</span></div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; layerName.append(<span class="stringliteral">&quot;_addN_&quot;</span>).append(std::to_string(numberOfAddition));</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; }</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#aee1bc04a8977a1a8755243ed9e54f8e2">CreateAdditionLayer</a>(nodeDef, input0Slot, input1Slot, layerName);</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_aee1bc04a8977a1a8755243ed9e54f8e2"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#aee1bc04a8977a1a8755243ed9e54f8e2">armnnTfParser::ITfParser::TfParserImpl::CreateAdditionLayer</a></div><div class="ttdeci">armnn::IConnectableLayer * CreateAdditionLayer(const tensorflow::NodeDef &amp;nodeDef, armnn::IOutputSlot *input0Slot, armnn::IOutputSlot *input1Slot, const std::string &amp;layerName)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00650">TfParser.cpp:650</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a614a576a18e510e4e7898259ce693ee7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a614a576a18e510e4e7898259ce693ee7">&#9670;&nbsp;</a></span>CreateAdditionLayer() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> * CreateAdditionLayer </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">OutputOfParsedTfOperation</a> &amp;&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *&#160;</td>
+ <td class="paramname"><em>layer</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l00737">737</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l00650">ITfParser::TfParserImpl::CreateAdditionLayer()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00049">WithOutputTensorIndex&lt; T &gt;::m_Index</a>, and <a class="el" href="_tf_parser_8hpp_source.xhtml#l00048">WithOutputTensorIndex&lt; T &gt;::m_IndexedValue</a>.</p>
+<div class="fragment"><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;{</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input0Slot = &amp;op.m_IndexedValue-&gt;ResolveArmnnOutputSlot(op.m_Index);</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input1Slot = &amp;layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0);</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#aee1bc04a8977a1a8755243ed9e54f8e2">CreateAdditionLayer</a>(nodeDef, input0Slot, input1Slot, nodeDef.name());</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_aee1bc04a8977a1a8755243ed9e54f8e2"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#aee1bc04a8977a1a8755243ed9e54f8e2">armnnTfParser::ITfParser::TfParserImpl::CreateAdditionLayer</a></div><div class="ttdeci">armnn::IConnectableLayer * CreateAdditionLayer(const tensorflow::NodeDef &amp;nodeDef, armnn::IOutputSlot *input0Slot, armnn::IOutputSlot *input1Slot, const std::string &amp;layerName)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00650">TfParser.cpp:650</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8c99f1b3140d1767d320d3e7d2e90949"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8c99f1b3140d1767d320d3e7d2e90949">&#9670;&nbsp;</a></span>CreateNetworkFromBinaryFile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> CreateNetworkFromBinaryFile </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>graphFile</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::map&lt; std::string, <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputShapes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; std::string &gt; &amp;&#160;</td>
+ <td class="paramname"><em>requestedOutputs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates the network from a protobuf binary file on the disk. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03605">3605</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03639">ITfParser::TfParserImpl::CreateNetworkFromGraphDef()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>&#160;{</div><div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>&#160; FILE* fd = fopen(graphFile, <span class="stringliteral">&quot;rb&quot;</span>);</div><div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>&#160;</div><div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>&#160; <span class="keywordflow">if</span> (fd == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>&#160; {</div><div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_file_not_found_exception.xhtml">FileNotFoundException</a>(</div><div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>&#160; fmt::format(<span class="stringliteral">&quot;Graph file {} failed to open {}&quot;</span>,</div><div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>&#160; graphFile,</div><div class="line"><a name="l03616"></a><span class="lineno"> 3616</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>&#160; }</div><div class="line"><a name="l03618"></a><span class="lineno"> 3618</span>&#160;</div><div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>&#160; <span class="comment">// Parses the file into a message.</span></div><div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>&#160; tensorflow::GraphDef graphDef;</div><div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>&#160;</div><div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>&#160; google::protobuf::io::FileInputStream inStream(fileno(fd));</div><div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>&#160; google::protobuf::io::CodedInputStream codedStream(&amp;inStream);</div><div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>&#160; codedStream.SetTotalBytesLimit(INT_MAX);</div><div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>&#160; <span class="keywordtype">bool</span> success = graphDef.ParseFromCodedStream(&amp;codedStream);</div><div class="line"><a name="l03626"></a><span class="lineno"> 3626</span>&#160; fclose(fd);</div><div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>&#160;</div><div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>&#160; <span class="keywordflow">if</span> (!success)</div><div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>&#160; {</div><div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>&#160; fmt::format(<span class="stringliteral">&quot;Failed to parse protobuf file {} {}&quot;</span>,</div><div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>&#160; graphFile,</div><div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>&#160; }</div><div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>&#160;</div><div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a931e43b8100b02a3c1f2f5f30ba9a943">CreateNetworkFromGraphDef</a>(graphDef, inputShapes, requestedOutputs);</div><div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_file_not_found_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_file_not_found_exception.xhtml">armnn::FileNotFoundException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00086">Exceptions.hpp:86</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a931e43b8100b02a3c1f2f5f30ba9a943"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a931e43b8100b02a3c1f2f5f30ba9a943">armnnTfParser::ITfParser::TfParserImpl::CreateNetworkFromGraphDef</a></div><div class="ttdeci">armnn::INetworkPtr CreateNetworkFromGraphDef(const tensorflow::GraphDef &amp;graphDef, const std::map&lt; std::string, armnn::TensorShape &gt; &amp;inputShapes, const std::vector&lt; std::string &gt; &amp;requestedOutputs)</div><div class="ttdoc">Parses a GraphDef loaded into memory from one of the other CreateNetwork*. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03639">TfParser.cpp:3639</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a931e43b8100b02a3c1f2f5f30ba9a943"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a931e43b8100b02a3c1f2f5f30ba9a943">&#9670;&nbsp;</a></span>CreateNetworkFromGraphDef()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> CreateNetworkFromGraphDef </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::map&lt; std::string, <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputShapes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; std::string &gt; &amp;&#160;</td>
+ <td class="paramname"><em>requestedOutputs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Parses a GraphDef loaded into memory from one of the other CreateNetwork*. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03639">3639</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03669">ITfParser::TfParserImpl::Cleanup()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03486">ITfParser::TfParserImpl::LoadGraphDef()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00261">ITfParser::TfParserImpl::m_InputShapes</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, and <a class="el" href="_tf_parser_8hpp_source.xhtml#l00262">ITfParser::TfParserImpl::m_RequestedOutputs</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03605">ITfParser::TfParserImpl::CreateNetworkFromBinaryFile()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03587">ITfParser::TfParserImpl::CreateNetworkFromString()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03556">ITfParser::TfParserImpl::CreateNetworkFromTextFile()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>&#160;{</div><div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a> = INetwork::Create();</div><div class="line"><a name="l03644"></a><span class="lineno"> 3644</span>&#160;</div><div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a76ea67f3f7d1d5835c5a92b65dc0854c">m_InputShapes</a> = inputShapes;</div><div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>&#160; <span class="keywordflow">if</span> (requestedOutputs.size() == 0)</div><div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>&#160; {</div><div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03649"></a><span class="lineno"> 3649</span>&#160; fmt::format(<span class="stringliteral">&quot;requestedOutputs must have at least one entry {}&quot;</span>,</div><div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>&#160; }</div><div class="line"><a name="l03652"></a><span class="lineno"> 3652</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a86cb41745deebd9b0ccf157d97d4d9ca">m_RequestedOutputs</a> = requestedOutputs;</div><div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>&#160;</div><div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>&#160; {</div><div class="line"><a name="l03656"></a><span class="lineno"> 3656</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a51591500d0839a1f602d8cd20bb9d3ce">LoadGraphDef</a>(graphDef);</div><div class="line"><a name="l03657"></a><span class="lineno"> 3657</span>&#160; }</div><div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>&#160; <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>&amp; e)</div><div class="line"><a name="l03659"></a><span class="lineno"> 3659</span>&#160; {</div><div class="line"><a name="l03660"></a><span class="lineno"> 3660</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae89a123aad1c66a76c398b7af216aae4">Cleanup</a>();</div><div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>&#160; <span class="keywordflow">throw</span> e;</div><div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>&#160; }</div><div class="line"><a name="l03663"></a><span class="lineno"> 3663</span>&#160;</div><div class="line"><a name="l03664"></a><span class="lineno"> 3664</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae89a123aad1c66a76c398b7af216aae4">Cleanup</a>();</div><div class="line"><a name="l03665"></a><span class="lineno"> 3665</span>&#160;</div><div class="line"><a name="l03666"></a><span class="lineno"> 3666</span>&#160; <span class="keywordflow">return</span> std::move(<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>);</div><div class="line"><a name="l03667"></a><span class="lineno"> 3667</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae89a123aad1c66a76c398b7af216aae4"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae89a123aad1c66a76c398b7af216aae4">armnnTfParser::ITfParser::TfParserImpl::Cleanup</a></div><div class="ttdeci">void Cleanup()</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03669">TfParser.cpp:3669</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a76ea67f3f7d1d5835c5a92b65dc0854c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a76ea67f3f7d1d5835c5a92b65dc0854c">armnnTfParser::ITfParser::TfParserImpl::m_InputShapes</a></div><div class="ttdeci">std::map&lt; std::string, armnn::TensorShape &gt; m_InputShapes</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00261">TfParser.hpp:261</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a51591500d0839a1f602d8cd20bb9d3ce"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a51591500d0839a1f602d8cd20bb9d3ce">armnnTfParser::ITfParser::TfParserImpl::LoadGraphDef</a></div><div class="ttdeci">void LoadGraphDef(const tensorflow::GraphDef &amp;graphDef)</div><div class="ttdoc">Sets up variables and then performs BFS to parse all nodes. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03486">TfParser.cpp:3486</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a86cb41745deebd9b0ccf157d97d4d9ca"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a86cb41745deebd9b0ccf157d97d4d9ca">armnnTfParser::ITfParser::TfParserImpl::m_RequestedOutputs</a></div><div class="ttdeci">std::vector&lt; std::string &gt; m_RequestedOutputs</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00262">TfParser.hpp:262</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a7e393f41f2330006fdf00f2840c6dd28"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7e393f41f2330006fdf00f2840c6dd28">&#9670;&nbsp;</a></span>CreateNetworkFromString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> CreateNetworkFromString </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>protoText</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::map&lt; std::string, <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputShapes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; std::string &gt; &amp;&#160;</td>
+ <td class="paramname"><em>requestedOutputs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates the network directly from protobuf text in a string. Useful for debugging/testing. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03587">3587</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03639">ITfParser::TfParserImpl::CreateNetworkFromGraphDef()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>&#160;{</div><div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>&#160; <span class="comment">// Parses the string into a message.</span></div><div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>&#160; tensorflow::GraphDef graphDef;</div><div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>&#160; <span class="keywordtype">bool</span> success = google::protobuf::TextFormat::ParseFromString(protoText, &amp;graphDef);</div><div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>&#160;</div><div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>&#160; <span class="keywordflow">if</span> (!success)</div><div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>&#160; {</div><div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>&#160; fmt::format(<span class="stringliteral">&quot;Failed to parse graph file {}&quot;</span>,</div><div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>&#160; }</div><div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>&#160;</div><div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a931e43b8100b02a3c1f2f5f30ba9a943">CreateNetworkFromGraphDef</a>(graphDef, inputShapes, requestedOutputs);</div><div class="line"><a name="l03603"></a><span class="lineno"> 3603</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a931e43b8100b02a3c1f2f5f30ba9a943"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a931e43b8100b02a3c1f2f5f30ba9a943">armnnTfParser::ITfParser::TfParserImpl::CreateNetworkFromGraphDef</a></div><div class="ttdeci">armnn::INetworkPtr CreateNetworkFromGraphDef(const tensorflow::GraphDef &amp;graphDef, const std::map&lt; std::string, armnn::TensorShape &gt; &amp;inputShapes, const std::vector&lt; std::string &gt; &amp;requestedOutputs)</div><div class="ttdoc">Parses a GraphDef loaded into memory from one of the other CreateNetwork*. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03639">TfParser.cpp:3639</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac915fb2df2772be3179e97b1e8287a2d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac915fb2df2772be3179e97b1e8287a2d">&#9670;&nbsp;</a></span>CreateNetworkFromTextFile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> CreateNetworkFromTextFile </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>graphFile</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::map&lt; std::string, <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputShapes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; std::string &gt; &amp;&#160;</td>
+ <td class="paramname"><em>requestedOutputs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates the network from a protobuf text file on the disk. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03556">3556</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03639">ITfParser::TfParserImpl::CreateNetworkFromGraphDef()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>&#160;{</div><div class="line"><a name="l03560"></a><span class="lineno"> 3560</span>&#160; FILE* fd = fopen(graphFile, <span class="stringliteral">&quot;r&quot;</span>);</div><div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>&#160;</div><div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>&#160; <span class="keywordflow">if</span> (fd == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l03563"></a><span class="lineno"> 3563</span>&#160; {</div><div class="line"><a name="l03564"></a><span class="lineno"> 3564</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_file_not_found_exception.xhtml">FileNotFoundException</a>(</div><div class="line"><a name="l03565"></a><span class="lineno"> 3565</span>&#160; fmt::format(<span class="stringliteral">&quot;Graph file {} failed to open {}&quot;</span>,</div><div class="line"><a name="l03566"></a><span class="lineno"> 3566</span>&#160; graphFile,</div><div class="line"><a name="l03567"></a><span class="lineno"> 3567</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03568"></a><span class="lineno"> 3568</span>&#160; }</div><div class="line"><a name="l03569"></a><span class="lineno"> 3569</span>&#160;</div><div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>&#160; <span class="comment">// Parses the file into a message.</span></div><div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>&#160; tensorflow::GraphDef graphDef;</div><div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>&#160; <span class="keyword">auto</span> input = <span class="keyword">new</span> google::protobuf::io::FileInputStream(fileno(fd));</div><div class="line"><a name="l03573"></a><span class="lineno"> 3573</span>&#160; <span class="keywordtype">bool</span> success = google::protobuf::TextFormat::Parse(input, &amp;graphDef);</div><div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>&#160; <span class="keyword">delete</span> input;</div><div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>&#160; fclose(fd);</div><div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>&#160;</div><div class="line"><a name="l03577"></a><span class="lineno"> 3577</span>&#160; <span class="keywordflow">if</span> (!success)</div><div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>&#160; {</div><div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>&#160; fmt::format(<span class="stringliteral">&quot;Failed to parse graph file {}&quot;</span>,</div><div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160; }</div><div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>&#160;</div><div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a931e43b8100b02a3c1f2f5f30ba9a943">CreateNetworkFromGraphDef</a>(graphDef, inputShapes, requestedOutputs);</div><div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_file_not_found_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_file_not_found_exception.xhtml">armnn::FileNotFoundException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00086">Exceptions.hpp:86</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a931e43b8100b02a3c1f2f5f30ba9a943"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a931e43b8100b02a3c1f2f5f30ba9a943">armnnTfParser::ITfParser::TfParserImpl::CreateNetworkFromGraphDef</a></div><div class="ttdeci">armnn::INetworkPtr CreateNetworkFromGraphDef(const tensorflow::GraphDef &amp;graphDef, const std::map&lt; std::string, armnn::TensorShape &gt; &amp;inputShapes, const std::vector&lt; std::string &gt; &amp;requestedOutputs)</div><div class="ttdoc">Parses a GraphDef loaded into memory from one of the other CreateNetwork*. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03639">TfParser.cpp:3639</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ac41a09541f963e43c9a9300e8c28eb06"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac41a09541f963e43c9a9300e8c28eb06">&#9670;&nbsp;</a></span>GetBindingInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::pair&lt; <a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>, <a class="el" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> &gt; GetBindingInfo </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>layerName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>bindingPointDesc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::unordered_map&lt; std::string, <a class="el" href="namespacearmnn_tf_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>nameToBindingInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03688">3688</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03678">ITfParser::TfParserImpl::GetNetworkInputBindingInfo()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03683">ITfParser::TfParserImpl::GetNetworkOutputBindingInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03691"></a><span class="lineno"> 3691</span>&#160;{</div><div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>&#160; <span class="keyword">auto</span> it = nameToBindingInfo.find(layerName);</div><div class="line"><a name="l03693"></a><span class="lineno"> 3693</span>&#160; <span class="keywordflow">if</span> (it == nameToBindingInfo.end())</div><div class="line"><a name="l03694"></a><span class="lineno"> 3694</span>&#160; {</div><div class="line"><a name="l03695"></a><span class="lineno"> 3695</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(</div><div class="line"><a name="l03696"></a><span class="lineno"> 3696</span>&#160; fmt::format(<span class="stringliteral">&quot;Unknown {} &#39;{}&#39; {}&quot;</span>,</div><div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>&#160; bindingPointDesc,</div><div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>&#160; layerName,</div><div class="line"><a name="l03699"></a><span class="lineno"> 3699</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03700"></a><span class="lineno"> 3700</span>&#160; }</div><div class="line"><a name="l03701"></a><span class="lineno"> 3701</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l03702"></a><span class="lineno"> 3702</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a82bb92947dc9e0f04d4242910d6cbc65"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a82bb92947dc9e0f04d4242910d6cbc65">&#9670;&nbsp;</a></span>GetConstInputIndex()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int GetConstInputIndex </td>
+ <td>(</td>
+ <td class="paramtype">const std::vector&lt; <a class="el" href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">OutputOfParsedTfOperation</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>inputs</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01198">1198</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l02266">ITfParser::TfParserImpl::ParseConcat()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02821">ITfParser::TfParserImpl::ParseSplit()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l02101">ITfParser::TfParserImpl::ParseTranspose()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;{</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; inputs.size(); i++)</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; {</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; <span class="keywordflow">if</span> (HasParsedConstTensor&lt;int32_t&gt;(inputs[i].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; {</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; <span class="keywordflow">return</span> i;</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; }</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; }</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports operators with constant axis. {}&quot;</span>,</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;}</div><div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae295ca8b7d19bb5e6db3f93bd4561ee0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae295ca8b7d19bb5e6db3f93bd4561ee0">&#9670;&nbsp;</a></span>GetInputParsedTfOperationsChecked()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt; <a class="el" href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">OutputOfParsedTfOperation</a> &gt; GetInputParsedTfOperationsChecked </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::size_t&#160;</td>
+ <td class="paramname"><em>expectedNumInputs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph, and throws an exception if the number of inputs does not match the expected one. </p>
+<p>This will automatically resolve any identity nodes. The result vector contains the parsed operation together with the output tensor index to make the connection unambiguous. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">615</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00578">ITfParser::TfParserImpl::GetTfInputNodes()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00267">ITfParser::TfParserImpl::m_ParsedTfOperations</a>, and <a class="el" href="_i_tf_parser_8hpp_source.xhtml#l00061">ITfParser::ParsedTfOperation</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l02984">ITfParser::TfParserImpl::AddActivationLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03118">ITfParser::TfParserImpl::AddAdditionLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03315">ITfParser::TfParserImpl::AddFullyConnectedLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03236">ITfParser::TfParserImpl::AddMaximumLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03279">ITfParser::TfParserImpl::AddMultiplicationLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03198">ITfParser::TfParserImpl::AddRealDivLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01709">ITfParser::TfParserImpl::IsSupportedLeakyReluPattern()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00826">ITfParser::TfParserImpl::ParseAdd()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00747">ITfParser::TfParserImpl::ParseAddN()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02266">ITfParser::TfParserImpl::ParseConcat()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01213">ITfParser::TfParserImpl::ParseConv2D()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01341">ITfParser::TfParserImpl::ParseDepthwiseConv2D()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01535">ITfParser::TfParserImpl::ParseExpandDims()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01618">ITfParser::TfParserImpl::ParseFusedBatchNorm()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01894">ITfParser::TfParserImpl::ParseGather()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00891">ITfParser::TfParserImpl::ParseIdentity()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02578">ITfParser::TfParserImpl::ParseLrn()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01759">ITfParser::TfParserImpl::ParseMaximum()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02634">ITfParser::TfParserImpl::ParseMean()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02195">ITfParser::TfParserImpl::ParsePad()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02718">ITfParser::TfParserImpl::ParsePlaceholder()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03009">ITfParser::TfParserImpl::ParsePooling2d()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02389">ITfParser::TfParserImpl::ParseReshape()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02426">ITfParser::TfParserImpl::ParseResizeBilinear()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02787">ITfParser::TfParserImpl::ParseRsqrt()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02348">ITfParser::TfParserImpl::ParseShape()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02804">ITfParser::TfParserImpl::ParseSoftmax()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02821">ITfParser::TfParserImpl::ParseSplit()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02557">ITfParser::TfParserImpl::ParseSqueeze()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02015">ITfParser::TfParserImpl::ParseStack()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02923">ITfParser::TfParserImpl::ParseStridedSlice()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01974">ITfParser::TfParserImpl::ParseSub()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02101">ITfParser::TfParserImpl::ParseTranspose()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l01807">ITfParser::TfParserImpl::ProcessElementwiseInputSlots()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;{</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="comment">// Fetches the tensorflow nodes connected as inputs and validate the size.</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; std::vector&lt;OutputOfConstNodeDef&gt; nodes = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">GetTfInputNodes</a>(nodeDef);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keyword">const</span> std::size_t numInputs = nodes.size();</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">if</span> (numInputs != expectedNumInputs)</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; {</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; fmt::format(<span class="stringliteral">&quot;Unexpected number of inputs for node {}. Expected {}, found {} {}&quot;</span>,</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; nodeDef.name(),</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; expectedNumInputs,</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; numInputs,</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="comment">// Fetches the corresponding ParsedTfOperation operations</span></div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; result;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; node : nodes)</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; {</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keyword">auto</span> it = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8dd5c5f271f0f5bd68612e7927d94e58">m_ParsedTfOperations</a>.find(node.m_IndexedValue-&gt;name());</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">if</span> (it == <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8dd5c5f271f0f5bd68612e7927d94e58">m_ParsedTfOperations</a>.end())</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; fmt::format(<span class="stringliteral">&quot;Node with name &#39;{}&#39; has not been parsed {}&quot;</span>,</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; node.m_IndexedValue-&gt;name(),</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; }</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <a class="code" href="classarmnn_tf_parser_1_1_i_tf_parser.xhtml#a81cd010ead68e4d96e6cb28255143f49">ParsedTfOperation</a>* parsedOp = it-&gt;second.get();</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="comment">// Transparently &#39;skip&#39; any Identity operations. This simplifies the logic inside the ParseXXX() functions.</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; parsedOp = parsedOp-&gt;ResolveIdentityOperations();</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; result.push_back(<a class="code" href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">OutputOfParsedTfOperation</a>(parsedOp,node.m_Index));</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; }</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160;}</div><div class="ttc" id="namespacearmnn_tf_parser_xhtml_ad85fe4a9bf2aff90c53bc2f50c8931e6"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">armnnTfParser::OutputOfParsedTfOperation</a></div><div class="ttdeci">WithOutputTensorIndex&lt; ParsedTfOperation * &gt; OutputOfParsedTfOperation</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00060">TfParser.hpp:60</a></div></div>
+<div class="ttc" id="classarmnn_tf_parser_1_1_i_tf_parser_xhtml_a81cd010ead68e4d96e6cb28255143f49"><div class="ttname"><a href="classarmnn_tf_parser_1_1_i_tf_parser.xhtml#a81cd010ead68e4d96e6cb28255143f49">armnnTfParser::ITfParser::ParsedTfOperation</a></div><div class="ttdeci">friend class ParsedTfOperation</div><div class="ttdef"><b>Definition:</b> <a href="_i_tf_parser_8hpp_source.xhtml#l00061">ITfParser.hpp:61</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a8dd5c5f271f0f5bd68612e7927d94e58"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8dd5c5f271f0f5bd68612e7927d94e58">armnnTfParser::ITfParser::TfParserImpl::m_ParsedTfOperations</a></div><div class="ttdeci">std::unordered_map&lt; std::string, ParsedTfOperationPtr &gt; m_ParsedTfOperations</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00267">TfParser.hpp:267</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a9e7a394f59e8d223a79e3db798803c1c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">armnnTfParser::ITfParser::TfParserImpl::GetTfInputNodes</a></div><div class="ttdeci">std::vector&lt; OutputOfConstNodeDef &gt; GetTfInputNodes(const tensorflow::NodeDef &amp;nodeDef) const</div><div class="ttdoc">Finds the nodes connected as inputs of the given node in the graph. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00578">TfParser.cpp:578</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8b053a6c449d0814cc831c916c126668"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8b053a6c449d0814cc831c916c126668">&#9670;&nbsp;</a></span>GetNetworkInputBindingInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> GetNetworkInputBindingInfo </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Retrieves binding info (layer id and tensor info) for the network input identified by the given layer name. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03678">3678</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l03688">ITfParser::TfParserImpl::GetBindingInfo()</a>, and <a class="el" href="_tf_parser_8hpp_source.xhtml#l00270">ITfParser::TfParserImpl::m_NetworkInputsBindingInfo</a>.</p>
+<div class="fragment"><div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>&#160;{</div><div class="line"><a name="l03680"></a><span class="lineno"> 3680</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac41a09541f963e43c9a9300e8c28eb06">GetBindingInfo</a>(name, <span class="stringliteral">&quot;input&quot;</span>, <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac62e2558c14e01605f2b4e1e21cdd1e8">m_NetworkInputsBindingInfo</a>);</div><div class="line"><a name="l03681"></a><span class="lineno"> 3681</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ac62e2558c14e01605f2b4e1e21cdd1e8"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac62e2558c14e01605f2b4e1e21cdd1e8">armnnTfParser::ITfParser::TfParserImpl::m_NetworkInputsBindingInfo</a></div><div class="ttdeci">std::unordered_map&lt; std::string, BindingPointInfo &gt; m_NetworkInputsBindingInfo</div><div class="ttdoc">Maps input layer names to their corresponding ids and tensor info. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00270">TfParser.hpp:270</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ac41a09541f963e43c9a9300e8c28eb06"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac41a09541f963e43c9a9300e8c28eb06">armnnTfParser::ITfParser::TfParserImpl::GetBindingInfo</a></div><div class="ttdeci">static std::pair&lt; armnn::LayerBindingId, armnn::TensorInfo &gt; GetBindingInfo(const std::string &amp;layerName, const char *bindingPointDesc, const std::unordered_map&lt; std::string, BindingPointInfo &gt; &amp;nameToBindingInfo)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03688">TfParser.cpp:3688</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4b1fdcb1985af12dd1848a9ffa5d3271"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4b1fdcb1985af12dd1848a9ffa5d3271">&#9670;&nbsp;</a></span>GetNetworkOutputBindingInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> GetNetworkOutputBindingInfo </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Retrieves binding info (layer id and tensor info) for the network output identified by the given layer name. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03683">3683</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l03688">ITfParser::TfParserImpl::GetBindingInfo()</a>, and <a class="el" href="_tf_parser_8hpp_source.xhtml#l00273">ITfParser::TfParserImpl::m_NetworkOutputsBindingInfo</a>.</p>
+<div class="fragment"><div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>&#160;{</div><div class="line"><a name="l03685"></a><span class="lineno"> 3685</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac41a09541f963e43c9a9300e8c28eb06">GetBindingInfo</a>(name, <span class="stringliteral">&quot;output&quot;</span>, <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a62d6d6cba9ed0d3ad63fffb40aec86b5">m_NetworkOutputsBindingInfo</a>);</div><div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ac41a09541f963e43c9a9300e8c28eb06"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac41a09541f963e43c9a9300e8c28eb06">armnnTfParser::ITfParser::TfParserImpl::GetBindingInfo</a></div><div class="ttdeci">static std::pair&lt; armnn::LayerBindingId, armnn::TensorInfo &gt; GetBindingInfo(const std::string &amp;layerName, const char *bindingPointDesc, const std::unordered_map&lt; std::string, BindingPointInfo &gt; &amp;nameToBindingInfo)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03688">TfParser.cpp:3688</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a62d6d6cba9ed0d3ad63fffb40aec86b5"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a62d6d6cba9ed0d3ad63fffb40aec86b5">armnnTfParser::ITfParser::TfParserImpl::m_NetworkOutputsBindingInfo</a></div><div class="ttdeci">std::unordered_map&lt; std::string, BindingPointInfo &gt; m_NetworkOutputsBindingInfo</div><div class="ttdoc">Maps output layer names to their corresponding ids and tensor info. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00273">TfParser.hpp:273</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a9e7a394f59e8d223a79e3db798803c1c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9e7a394f59e8d223a79e3db798803c1c">&#9670;&nbsp;</a></span>GetTfInputNodes()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt; <a class="el" href="namespacearmnn_tf_parser.xhtml#a4c8735480b01dbd0f75c63377fe054e9">OutputOfConstNodeDef</a> &gt; GetTfInputNodes </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Finds the nodes connected as inputs of the given node in the graph. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l00578">578</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00049">WithOutputTensorIndex&lt; T &gt;::m_Index</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00048">WithOutputTensorIndex&lt; T &gt;::m_IndexedValue</a>, and <a class="el" href="_tf_parser_8hpp_source.xhtml#l00265">ITfParser::TfParserImpl::m_NodesByName</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03486">ITfParser::TfParserImpl::LoadGraphDef()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02266">ITfParser::TfParserImpl::ParseConcat()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01535">ITfParser::TfParserImpl::ParseExpandDims()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02821">ITfParser::TfParserImpl::ParseSplit()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02015">ITfParser::TfParserImpl::ParseStack()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l02923">ITfParser::TfParserImpl::ParseStridedSlice()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;{</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; std::vector&lt;OutputOfConstNodeDef&gt; ret;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; <span class="keywordflow">if</span> (nodeDef.op() == <span class="stringliteral">&quot;Const&quot;</span>)</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; {</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="comment">// For some reason const node can have &quot;Control Inputs&quot;. We ignore them for now.</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; }</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; ret.reserve(armnn::numeric_cast&lt;size_t&gt;(nodeDef.input_size()));</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; nodeDef.input_size(); ++j)</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; {</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <a class="code" href="namespacearmnn_tf_parser.xhtml#abcf8e5fd95ba7e7bd8cd36fc24974223">OutputId</a> outputId = ParseOutputId(nodeDef.input(j));</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">if</span> (nodeDef.input(j)[0] == <span class="charliteral">&#39;^&#39;</span>) <span class="comment">// I couldn&#39;t find a better test for control inputs.</span></div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="comment">// We currently allow Control Input from TensorFlow graph but we ignore them from ArmNN graph.</span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keyword">auto</span> inputIt = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">m_NodesByName</a>.find(outputId.m_IndexedValue);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <span class="keywordflow">if</span> (inputIt == <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">m_NodesByName</a>.end())</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; fmt::format(<span class="stringliteral">&quot;Can&#39;t find node &#39;{}&#39;, which is listed as an input of &#39;{}&#39; {}&quot;</span>,</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; nodeDef.input(j),</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; nodeDef.name(),</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; }</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; ret.push_back(<a class="code" href="namespacearmnn_tf_parser.xhtml#a4c8735480b01dbd0f75c63377fe054e9">OutputOfConstNodeDef</a>(inputIt-&gt;second,outputId.m_Index));</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160;}</div><div class="ttc" id="namespacearmnn_tf_parser_xhtml_abcf8e5fd95ba7e7bd8cd36fc24974223"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#abcf8e5fd95ba7e7bd8cd36fc24974223">armnnTfParser::OutputId</a></div><div class="ttdeci">WithOutputTensorIndex&lt; std::string &gt; OutputId</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00062">TfParser.hpp:62</a></div></div>
+<div class="ttc" id="namespacearmnn_tf_parser_xhtml_a4c8735480b01dbd0f75c63377fe054e9"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#a4c8735480b01dbd0f75c63377fe054e9">armnnTfParser::OutputOfConstNodeDef</a></div><div class="ttdeci">WithOutputTensorIndex&lt; const tensorflow::NodeDef * &gt; OutputOfConstNodeDef</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00061">TfParser.hpp:61</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ac2c326b2757eadec924e4b7f56a9379c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">armnnTfParser::ITfParser::TfParserImpl::m_NodesByName</a></div><div class="ttdeci">std::unordered_map&lt; std::string, const tensorflow::NodeDef * &gt; m_NodesByName</div><div class="ttdoc">Map of nodes extracted from the GraphDef to speed up parsing. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00265">TfParser.hpp:265</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aa09a8bb02eed50715082d8b7fccd2f8d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa09a8bb02eed50715082d8b7fccd2f8d">&#9670;&nbsp;</a></span>GetVersion()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const std::string GetVersion </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Retrieve version in X.Y.Z form. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03740">3740</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="include_2armnn_tf_parser_2_version_8hpp_source.xhtml#l00025">TF_PARSER_VERSION</a>.</p>
+<div class="fragment"><div class="line"><a name="l03741"></a><span class="lineno"> 3741</span>&#160;{</div><div class="line"><a name="l03742"></a><span class="lineno"> 3742</span>&#160; <span class="keywordflow">return</span> <a class="code" href="include_2armnn_tf_parser_2_version_8hpp.xhtml#a3a58bd808c80a293adf0863c1bae3b5c">TF_PARSER_VERSION</a>;</div><div class="line"><a name="l03743"></a><span class="lineno"> 3743</span>&#160;}</div><div class="ttc" id="include_2armnn_tf_parser_2_version_8hpp_xhtml_a3a58bd808c80a293adf0863c1bae3b5c"><div class="ttname"><a href="include_2armnn_tf_parser_2_version_8hpp.xhtml#a3a58bd808c80a293adf0863c1bae3b5c">TF_PARSER_VERSION</a></div><div class="ttdeci">#define TF_PARSER_VERSION</div><div class="ttdoc">TF_PARSER_VERSION: &quot;X.Y.Z&quot; where: X = Major version number Y = Minor version number Z = Patch version...</div><div class="ttdef"><b>Definition:</b> <a href="include_2armnn_tf_parser_2_version_8hpp_source.xhtml#l00025">Version.hpp:25</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a02394780a6b2d4c255e4526621e90adb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a02394780a6b2d4c255e4526621e90adb">&#9670;&nbsp;</a></span>HasParsedConstTensor() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool HasParsedConstTensor </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>nodeName</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Checks if there is a pre-parsed const tensor available with the given name and Type. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01182">1182</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8hpp_source.xhtml#l00267">ITfParser::TfParserImpl::m_ParsedTfOperations</a>.</p>
+<div class="fragment"><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;{</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <span class="keyword">auto</span> it = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8dd5c5f271f0f5bd68612e7927d94e58">m_ParsedTfOperations</a>.find(nodeName);</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="keywordflow">if</span> (it == <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8dd5c5f271f0f5bd68612e7927d94e58">m_ParsedTfOperations</a>.end())</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; {</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; }</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <span class="keywordflow">return</span> <span class="keyword">dynamic_cast&lt;</span>ParsedConstTfOperation&lt;Type&gt;*<span class="keyword">&gt;</span>(it-&gt;second.get()) != <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a8dd5c5f271f0f5bd68612e7927d94e58"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8dd5c5f271f0f5bd68612e7927d94e58">armnnTfParser::ITfParser::TfParserImpl::m_ParsedTfOperations</a></div><div class="ttdeci">std::unordered_map&lt; std::string, ParsedTfOperationPtr &gt; m_ParsedTfOperations</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00267">TfParser.hpp:267</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad22826bcee9099bbeb74eeb99c36f998"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad22826bcee9099bbeb74eeb99c36f998">&#9670;&nbsp;</a></span>HasParsedConstTensor() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool HasParsedConstTensor </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_tf_parser_1_1_i_tf_parser.xhtml#a81cd010ead68e4d96e6cb28255143f49">ParsedTfOperation</a> *&#160;</td>
+ <td class="paramname"><em>parsedTfOpPtr</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01193">1193</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+<div class="fragment"><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;{</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <span class="keywordflow">return</span> <span class="keyword">dynamic_cast&lt;</span>ParsedConstTfOperation&lt;Type&gt;*<span class="keyword">&gt;</span>(parsedTfOpPtr) != <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;}</div></div><!-- fragment -->
+</div>
+</div>
+<a id="a3296cce0af78204d897a746643987f07"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3296cce0af78204d897a746643987f07">&#9670;&nbsp;</a></span>IsSupportedLeakyReluPattern()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool IsSupportedLeakyReluPattern </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>mulNodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>alphaLayerIndex</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="namespacearmnn_tf_parser.xhtml#ad85fe4a9bf2aff90c53bc2f50c8931e6">OutputOfParsedTfOperation</a> &amp;&#160;</td>
+ <td class="paramname"><em>otherOp</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> **&#160;</td>
+ <td class="paramname"><em>outputOfLeakyRelu</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structarmnn_1_1_activation_descriptor.xhtml">armnn::ActivationDescriptor</a> &amp;&#160;</td>
+ <td class="paramname"><em>desc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01709">1709</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00050">ActivationDescriptor::m_A</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00048">ActivationDescriptor::m_Function</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00049">WithOutputTensorIndex&lt; T &gt;::m_Index</a>, and <a class="el" href="_tf_parser_8hpp_source.xhtml#l00048">WithOutputTensorIndex&lt; T &gt;::m_IndexedValue</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l01759">ITfParser::TfParserImpl::ParseMaximum()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;{</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; <span class="keyword">const</span> tensorflow::NodeDef&amp; otherNodeDef = otherOp.m_IndexedValue-&gt;GetNode();</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;</div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160; <span class="comment">// Verifying all these assumptions hold:</span></div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160; <span class="comment">// 1, the mulNodeDef is an elementwise multiplication node &quot;Mul&quot;</span></div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160; <span class="comment">// 2, the alphaLayerIndex selects a constant node from the inputs of the &quot;Mul&quot; node</span></div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160; <span class="comment">// 3, the inputLayerIndex selects a layer which has the same name as otherNodeDef</span></div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160; <span class="keywordflow">if</span> (mulNodeDef.op() == <span class="stringliteral">&quot;Mul&quot;</span>)</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160; {</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; <span class="keywordtype">size_t</span> otherLayerIndex = (alphaLayerIndex == 0 ? 1 : 0);</div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(mulNodeDef, 2);</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(inputs.size() == 2);</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>((otherLayerIndex == 0 || alphaLayerIndex == 0));</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>((otherLayerIndex == 1 || alphaLayerIndex == 1));</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(((otherLayerIndex + alphaLayerIndex) == 1));</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;</div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160; <span class="keywordflow">if</span> (inputs[otherLayerIndex].m_IndexedValue-&gt;GetNode().name() == otherNodeDef.name())</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160; {</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160; <span class="keywordflow">if</span> (HasParsedConstTensor&lt;float&gt;(inputs[alphaLayerIndex].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160; {</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160; ParsedConstTfOperation&lt;float&gt;* alpha =</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;float&gt; *&gt;(</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160; inputs[alphaLayerIndex].m_IndexedValue);</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160; std::vector&lt;float&gt; const_data;</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160; <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> const_tensor = alpha-&gt;GetConstTensor(const_data);</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160; <span class="keywordflow">if</span> (const_data.size() == 1)</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; {</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160; desc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a> = ActivationFunction::LeakyReLu;</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160; desc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a> = const_data[0];</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span>&#160; *outputOfLeakyRelu = &amp;(otherOp.m_IndexedValue-&gt;ResolveArmnnOutputSlot(otherOp.m_Index));</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160; }</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; }</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160; }</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160; }</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00314">Tensor.hpp:314</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_a017b2990003a014234f13e999dc7c689"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">armnn::ActivationDescriptor::m_A</a></div><div class="ttdeci">float m_A</div><div class="ttdoc">Alpha upper bound value used by the activation functions. (BoundedReLu, Linear, TanH, Elu). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00050">Descriptors.hpp:50</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_af10fa7883e3579950f477bee92a64844"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">armnn::ActivationDescriptor::m_Function</a></div><div class="ttdeci">ActivationFunction m_Function</div><div class="ttdoc">The activation function to use (Sigmoid, TanH, Linear, ReLu, BoundedReLu, SoftReLu, LeakyReLu, Abs, Sqrt, Square, Elu). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00048">Descriptors.hpp:48</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a51591500d0839a1f602d8cd20bb9d3ce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a51591500d0839a1f602d8cd20bb9d3ce">&#9670;&nbsp;</a></span>LoadGraphDef()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LoadGraphDef </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Sets up variables and then performs BFS to parse all nodes. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03486">3486</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00578">ITfParser::TfParserImpl::GetTfInputNodes()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03413">ITfParser::TfParserImpl::LoadNodeDef()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00261">ITfParser::TfParserImpl::m_InputShapes</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00270">ITfParser::TfParserImpl::m_NetworkInputsBindingInfo</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00273">ITfParser::TfParserImpl::m_NetworkOutputsBindingInfo</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00265">ITfParser::TfParserImpl::m_NodesByName</a>, and <a class="el" href="_tf_parser_8hpp_source.xhtml#l00262">ITfParser::TfParserImpl::m_RequestedOutputs</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03639">ITfParser::TfParserImpl::CreateNetworkFromGraphDef()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03487"></a><span class="lineno"> 3487</span>&#160;{</div><div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>&#160; <span class="comment">// Adds all nodes to our map.</span></div><div class="line"><a name="l03489"></a><span class="lineno"> 3489</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">m_NodesByName</a>.clear();</div><div class="line"><a name="l03490"></a><span class="lineno"> 3490</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac62e2558c14e01605f2b4e1e21cdd1e8">m_NetworkInputsBindingInfo</a>.clear();</div><div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a62d6d6cba9ed0d3ad63fffb40aec86b5">m_NetworkOutputsBindingInfo</a>.clear();</div><div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>&#160;</div><div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; graphDef.node_size(); ++i)</div><div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>&#160; {</div><div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>&#160; <span class="keyword">const</span> tensorflow::NodeDef&amp; node = graphDef.node(i);</div><div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">m_NodesByName</a>[node.name()] = &amp;node;</div><div class="line"><a name="l03497"></a><span class="lineno"> 3497</span>&#160; }</div><div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>&#160;</div><div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>&#160; <span class="comment">// Checks that the input nodes the user has requested exist.</span></div><div class="line"><a name="l03500"></a><span class="lineno"> 3500</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; pair : <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a76ea67f3f7d1d5835c5a92b65dc0854c">m_InputShapes</a>)</div><div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>&#160; {</div><div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>&#160; <span class="keyword">const</span> std::string&amp; requestedInputName = pair.first;</div><div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>&#160; <span class="keyword">auto</span> nodeIt = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">m_NodesByName</a>.find(requestedInputName);</div><div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>&#160; <span class="keywordflow">if</span> (nodeIt == <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">m_NodesByName</a>.end())</div><div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>&#160; {</div><div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>&#160; fmt::format(<span class="stringliteral">&quot;Couldn&#39;t find requested input node &#39;{}&#39; in graph {}&quot;</span>,</div><div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>&#160; requestedInputName,</div><div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>&#160; }</div><div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>&#160; }</div><div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>&#160;</div><div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>&#160; <span class="comment">// Finds the output nodes the user requested.</span></div><div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>&#160; std::vector&lt;const tensorflow::NodeDef*&gt; targetNodes;</div><div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string&amp; requestedOutputName : <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a86cb41745deebd9b0ccf157d97d4d9ca">m_RequestedOutputs</a>)</div><div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>&#160; {</div><div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>&#160; <span class="keyword">auto</span> nodeIt = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">m_NodesByName</a>.find(requestedOutputName);</div><div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>&#160; <span class="keywordflow">if</span> (nodeIt == <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">m_NodesByName</a>.end())</div><div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>&#160; {</div><div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>&#160; fmt::format(<span class="stringliteral">&quot;Couldn&#39;t find requested output node &#39;{}&#39; in graph {}&quot;</span>,</div><div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>&#160; requestedOutputName,</div><div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>&#160; }</div><div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>&#160; targetNodes.push_back(nodeIt-&gt;second);</div><div class="line"><a name="l03526"></a><span class="lineno"> 3526</span>&#160; }</div><div class="line"><a name="l03527"></a><span class="lineno"> 3527</span>&#160;</div><div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>&#160; <span class="comment">// Sorts them into a linear ordering such that all inputs of a node are before the node itself.</span></div><div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>&#160; std::vector&lt;const tensorflow::NodeDef*&gt; sortedNodes;</div><div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>&#160; <span class="keywordflow">if</span> (!armnnUtils::GraphTopologicalSort&lt;const tensorflow::NodeDef*&gt;(</div><div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>&#160; targetNodes,</div><div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>&#160; [<span class="keyword">this</span>](<span class="keyword">const</span> tensorflow::NodeDef* node)</div><div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>&#160; {</div><div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>&#160; <span class="keyword">auto</span> outputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">GetTfInputNodes</a>(*node);</div><div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>&#160; std::vector&lt;const tensorflow::NodeDef*&gt; nodesOnly;</div><div class="line"><a name="l03536"></a><span class="lineno"> 3536</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp; o : outputs) {</div><div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>&#160; nodesOnly.push_back(o.m_IndexedValue);</div><div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>&#160; }</div><div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>&#160; <span class="keywordflow">return</span> nodesOnly;</div><div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>&#160; },</div><div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>&#160; sortedNodes))</div><div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>&#160; {</div><div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>&#160; fmt::format(<span class="stringliteral">&quot;Cycle detected in graph {}&quot;</span>,</div><div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>&#160; }</div><div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>&#160;</div><div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>&#160; <span class="comment">// Parses each node in order, knowing that all inputs of a node will be processed before the node itself.</span></div><div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; it : sortedNodes)</div><div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>&#160; {</div><div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>&#160; <span class="keyword">const</span> tensorflow::NodeDef&amp; currentNode = *it;</div><div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a22a4253bd5cb5510d0086a0f067760ec">LoadNodeDef</a>(currentNode, graphDef);</div><div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>&#160; }</div><div class="line"><a name="l03554"></a><span class="lineno"> 3554</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a76ea67f3f7d1d5835c5a92b65dc0854c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a76ea67f3f7d1d5835c5a92b65dc0854c">armnnTfParser::ITfParser::TfParserImpl::m_InputShapes</a></div><div class="ttdeci">std::map&lt; std::string, armnn::TensorShape &gt; m_InputShapes</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00261">TfParser.hpp:261</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a86cb41745deebd9b0ccf157d97d4d9ca"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a86cb41745deebd9b0ccf157d97d4d9ca">armnnTfParser::ITfParser::TfParserImpl::m_RequestedOutputs</a></div><div class="ttdeci">std::vector&lt; std::string &gt; m_RequestedOutputs</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00262">TfParser.hpp:262</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ac62e2558c14e01605f2b4e1e21cdd1e8"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac62e2558c14e01605f2b4e1e21cdd1e8">armnnTfParser::ITfParser::TfParserImpl::m_NetworkInputsBindingInfo</a></div><div class="ttdeci">std::unordered_map&lt; std::string, BindingPointInfo &gt; m_NetworkInputsBindingInfo</div><div class="ttdoc">Maps input layer names to their corresponding ids and tensor info. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00270">TfParser.hpp:270</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a9e7a394f59e8d223a79e3db798803c1c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">armnnTfParser::ITfParser::TfParserImpl::GetTfInputNodes</a></div><div class="ttdeci">std::vector&lt; OutputOfConstNodeDef &gt; GetTfInputNodes(const tensorflow::NodeDef &amp;nodeDef) const</div><div class="ttdoc">Finds the nodes connected as inputs of the given node in the graph. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00578">TfParser.cpp:578</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ac2c326b2757eadec924e4b7f56a9379c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">armnnTfParser::ITfParser::TfParserImpl::m_NodesByName</a></div><div class="ttdeci">std::unordered_map&lt; std::string, const tensorflow::NodeDef * &gt; m_NodesByName</div><div class="ttdoc">Map of nodes extracted from the GraphDef to speed up parsing. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00265">TfParser.hpp:265</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a62d6d6cba9ed0d3ad63fffb40aec86b5"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a62d6d6cba9ed0d3ad63fffb40aec86b5">armnnTfParser::ITfParser::TfParserImpl::m_NetworkOutputsBindingInfo</a></div><div class="ttdeci">std::unordered_map&lt; std::string, BindingPointInfo &gt; m_NetworkOutputsBindingInfo</div><div class="ttdoc">Maps output layer names to their corresponding ids and tensor info. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00273">TfParser.hpp:273</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a22a4253bd5cb5510d0086a0f067760ec"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a22a4253bd5cb5510d0086a0f067760ec">armnnTfParser::ITfParser::TfParserImpl::LoadNodeDef</a></div><div class="ttdeci">void LoadNodeDef(const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef)</div><div class="ttdoc">Parses a given node, assuming nodes before it in the graph have been done. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03413">TfParser.cpp:3413</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a22a4253bd5cb5510d0086a0f067760ec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a22a4253bd5cb5510d0086a0f067760ec">&#9670;&nbsp;</a></span>LoadNodeDef()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LoadNodeDef </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Parses a given node, assuming nodes before it in the graph have been done. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03413">3413</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00259">ITfParser::TfParserImpl::m_ControlInputs</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00273">ITfParser::TfParserImpl::m_NetworkOutputsBindingInfo</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00267">ITfParser::TfParserImpl::m_ParsedTfOperations</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00262">ITfParser::TfParserImpl::m_RequestedOutputs</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00257">ITfParser::TfParserImpl::ms_OperationNameToParsingFunctions</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">armnn::numeric_cast()</a>, <a class="el" href="_i_tf_parser_8hpp_source.xhtml#l00061">ITfParser::ParsedTfOperation</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03711">ITfParser::TfParserImpl::TrackOutputBinding()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03486">ITfParser::TfParserImpl::LoadGraphDef()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>&#160;{</div><div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>&#160; <span class="comment">// Gets the type of the node (assume float).</span></div><div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">tensorflow::DataType</a> type = tensorflow::DT_FLOAT;</div><div class="line"><a name="l03417"></a><span class="lineno"> 3417</span>&#160; <span class="keywordflow">if</span> (nodeDef.attr().count(<span class="stringliteral">&quot;T&quot;</span>) != 0)</div><div class="line"><a name="l03418"></a><span class="lineno"> 3418</span>&#160; {</div><div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>&#160; <span class="keyword">auto</span> attr = nodeDef.attr().at(<span class="stringliteral">&quot;T&quot;</span>);</div><div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>&#160; type = attr.type();</div><div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>&#160; }</div><div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nodeDef.attr().count(<span class="stringliteral">&quot;dtype&quot;</span>) != 0)</div><div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>&#160; {</div><div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>&#160; <span class="keyword">auto</span> attr = nodeDef.attr().at(<span class="stringliteral">&quot;dtype&quot;</span>);</div><div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>&#160; type = attr.type();</div><div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>&#160; }</div><div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>&#160;</div><div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>&#160; <span class="keywordflow">if</span> ((type != tensorflow::DT_FLOAT &amp;&amp; type != tensorflow::DT_INT32) &amp;&amp; nodeDef.op() != <span class="stringliteral">&quot;Const&quot;</span>)</div><div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>&#160; {</div><div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>&#160; fmt::format(<span class="stringliteral">&quot;Currently only FLOAT and INT32 are supported for tensorflow nodes (apart from Const). &quot;</span></div><div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>&#160; <span class="stringliteral">&quot;Got {} for Node {} {}&quot;</span>,</div><div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>&#160; tensorflow::DataType_Name(type),</div><div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>&#160; nodeDef.name(),</div><div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>&#160; }</div><div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>&#160;</div><div class="line"><a name="l03438"></a><span class="lineno"> 3438</span>&#160; <span class="keyword">const</span> std::string&amp; operation = nodeDef.op();</div><div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>&#160; <span class="keyword">auto</span> itControlInput = std::find(<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9414a632d2c86615287df33c0828f903">m_ControlInputs</a>.begin(), <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9414a632d2c86615287df33c0828f903">m_ControlInputs</a>.end(), operation);</div><div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>&#160; <span class="keywordflow">if</span> (itControlInput != <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9414a632d2c86615287df33c0828f903">m_ControlInputs</a>.end())</div><div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>&#160; {</div><div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>&#160; <span class="comment">// We currently allow Control Input from TensorFlow graph but we ignore them from ArmNN graph.</span></div><div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>&#160; }</div><div class="line"><a name="l03445"></a><span class="lineno"> 3445</span>&#160; <span class="keyword">auto</span> it = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a4b6b3a1fd0ce13ce7d6e3b4342f852c9">ms_OperationNameToParsingFunctions</a>.find(operation);</div><div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a4b6b3a1fd0ce13ce7d6e3b4342f852c9">ms_OperationNameToParsingFunctions</a>.end())</div><div class="line"><a name="l03447"></a><span class="lineno"> 3447</span>&#160; {</div><div class="line"><a name="l03448"></a><span class="lineno"> 3448</span>&#160; <span class="keyword">auto</span> func = it-&gt;second;</div><div class="line"><a name="l03449"></a><span class="lineno"> 3449</span>&#160; <a class="code" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> parsedTfOperation = (this-&gt;*func)(nodeDef, graphDef);</div><div class="line"><a name="l03450"></a><span class="lineno"> 3450</span>&#160; <a class="code" href="classarmnn_tf_parser_1_1_i_tf_parser.xhtml#a81cd010ead68e4d96e6cb28255143f49">ParsedTfOperation</a>* parsedTfOperationRaw = parsedTfOperation.get();</div><div class="line"><a name="l03451"></a><span class="lineno"> 3451</span>&#160;</div><div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>&#160; <span class="comment">// Stores the parsed operation so that dependent layers can connect to it.</span></div><div class="line"><a name="l03453"></a><span class="lineno"> 3453</span>&#160; <span class="keyword">auto</span> it = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8dd5c5f271f0f5bd68612e7927d94e58">m_ParsedTfOperations</a>.find(nodeDef.name());</div><div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8dd5c5f271f0f5bd68612e7927d94e58">m_ParsedTfOperations</a>.end())</div><div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>&#160; {</div><div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(fmt::format(<span class="stringliteral">&quot;Name {} used by more than one node&quot;</span>, nodeDef.name()));</div><div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>&#160; }</div><div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8dd5c5f271f0f5bd68612e7927d94e58">m_ParsedTfOperations</a>[nodeDef.name()] = std::move(parsedTfOperation);</div><div class="line"><a name="l03459"></a><span class="lineno"> 3459</span>&#160;</div><div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>&#160; <span class="comment">// If this node was requested as an output from the network, then adds an ArmNN output layer.</span></div><div class="line"><a name="l03461"></a><span class="lineno"> 3461</span>&#160; <span class="keywordflow">if</span> (std::find(<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a86cb41745deebd9b0ccf157d97d4d9ca">m_RequestedOutputs</a>.begin(), <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a86cb41745deebd9b0ccf157d97d4d9ca">m_RequestedOutputs</a>.end(), nodeDef.name()) !=</div><div class="line"><a name="l03462"></a><span class="lineno"> 3462</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a86cb41745deebd9b0ccf157d97d4d9ca">m_RequestedOutputs</a>.end())</div><div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>&#160; {</div><div class="line"><a name="l03464"></a><span class="lineno"> 3464</span>&#160; <span class="keyword">auto</span> outId = ParseOutputId(nodeDef.name());</div><div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> layerId = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>&gt;(<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a62d6d6cba9ed0d3ad63fffb40aec86b5">m_NetworkOutputsBindingInfo</a>.size());</div><div class="line"><a name="l03466"></a><span class="lineno"> 3466</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; prevSlot = parsedTfOperationRaw-&gt;ResolveArmnnOutputSlot(outId.m_Index);</div><div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>&#160;</div><div class="line"><a name="l03468"></a><span class="lineno"> 3468</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> tensorInfo = prevSlot.GetTensorInfo();</div><div class="line"><a name="l03469"></a><span class="lineno"> 3469</span>&#160;</div><div class="line"><a name="l03470"></a><span class="lineno"> 3470</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* outputLayer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddOutputLayer(layerId, nodeDef.name().c_str());</div><div class="line"><a name="l03471"></a><span class="lineno"> 3471</span>&#160;</div><div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>&#160; prevSlot.Connect(outputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l03473"></a><span class="lineno"> 3473</span>&#160;</div><div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a0c98e07875a82c71c65bbb53eb347561">TrackOutputBinding</a>(outputLayer, layerId, tensorInfo);</div><div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>&#160; }</div><div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>&#160; }</div><div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>&#160; {</div><div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03480"></a><span class="lineno"> 3480</span>&#160; fmt::format(<span class="stringliteral">&quot;Unsupported operation {} in tensorflow::GraphDef {}&quot;</span>,</div><div class="line"><a name="l03481"></a><span class="lineno"> 3481</span>&#160; operation,</div><div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03483"></a><span class="lineno"> 3483</span>&#160; }</div><div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="classarmnn_tf_parser_1_1_i_tf_parser_xhtml_a81cd010ead68e4d96e6cb28255143f49"><div class="ttname"><a href="classarmnn_tf_parser_1_1_i_tf_parser.xhtml#a81cd010ead68e4d96e6cb28255143f49">armnnTfParser::ITfParser::ParsedTfOperation</a></div><div class="ttdeci">friend class ParsedTfOperation</div><div class="ttdef"><b>Definition:</b> <a href="_i_tf_parser_8hpp_source.xhtml#l00061">ITfParser.hpp:61</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a8dd5c5f271f0f5bd68612e7927d94e58"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a8dd5c5f271f0f5bd68612e7927d94e58">armnnTfParser::ITfParser::TfParserImpl::m_ParsedTfOperations</a></div><div class="ttdeci">std::unordered_map&lt; std::string, ParsedTfOperationPtr &gt; m_ParsedTfOperations</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00267">TfParser.hpp:267</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a86cb41745deebd9b0ccf157d97d4d9ca"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a86cb41745deebd9b0ccf157d97d4d9ca">armnnTfParser::ITfParser::TfParserImpl::m_RequestedOutputs</a></div><div class="ttdeci">std::vector&lt; std::string &gt; m_RequestedOutputs</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00262">TfParser.hpp:262</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ab8cf8f9fb6792e654c2d8d8382f6f01b"><div class="ttname"><a href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a></div><div class="ttdeci">int LayerBindingId</div><div class="ttdoc">Type of identifiers for bindable layers (inputs, outputs). </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00210">Types.hpp:210</a></div></div>
+<div class="ttc" id="namespacearmnn_tf_parser_xhtml_aa36bf288c19fe35767bb6e059636f405"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">armnnTfParser::ParsedTfOperationPtr</a></div><div class="ttdeci">std::unique_ptr&lt; ParsedTfOperation &gt; ParsedTfOperationPtr</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00035">TfParser.hpp:35</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00032">Types.hpp:32</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a9414a632d2c86615287df33c0828f903"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9414a632d2c86615287df33c0828f903">armnnTfParser::ITfParser::TfParserImpl::m_ControlInputs</a></div><div class="ttdeci">static const std::list&lt; std::string &gt; m_ControlInputs</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00259">TfParser.hpp:259</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a4b6b3a1fd0ce13ce7d6e3b4342f852c9"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a4b6b3a1fd0ce13ce7d6e3b4342f852c9">armnnTfParser::ITfParser::TfParserImpl::ms_OperationNameToParsingFunctions</a></div><div class="ttdeci">static const std::map&lt; std::string, OperationParsingFunction &gt; ms_OperationNameToParsingFunctions</div><div class="ttdoc">Map of TensorFlow operation names to parsing member functions. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00257">TfParser.hpp:257</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a0c98e07875a82c71c65bbb53eb347561"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a0c98e07875a82c71c65bbb53eb347561">armnnTfParser::ITfParser::TfParserImpl::TrackOutputBinding</a></div><div class="ttdeci">void TrackOutputBinding(armnn::IConnectableLayer *layer, armnn::LayerBindingId id, const armnn::TensorInfo &amp;tensorInfo)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03711">TfParser.cpp:3711</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a62d6d6cba9ed0d3ad63fffb40aec86b5"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a62d6d6cba9ed0d3ad63fffb40aec86b5">armnnTfParser::ITfParser::TfParserImpl::m_NetworkOutputsBindingInfo</a></div><div class="ttdeci">std::unordered_map&lt; std::string, BindingPointInfo &gt; m_NetworkOutputsBindingInfo</div><div class="ttdoc">Maps output layer names to their corresponding ids and tensor info. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00273">TfParser.hpp:273</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3afeb2f06c78a6bced55cb1bb6617e41"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3afeb2f06c78a6bced55cb1bb6617e41">&#9670;&nbsp;</a></span>operator=()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml">TfParserImpl</a>&amp; operator= </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml">TfParserImpl</a> &amp;&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">delete</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a77cc856aea1ab0acd3a4bd7709fb18a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a77cc856aea1ab0acd3a4bd7709fb18a3">&#9670;&nbsp;</a></span>ParseAdd()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseAdd </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l00826">826</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l03118">ITfParser::TfParserImpl::AddAdditionLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03315">ITfParser::TfParserImpl::AddFullyConnectedLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, and <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;{</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160;</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="comment">// If one of the inputs is a MatMul and the other is a const, then we handle both nodes</span></div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="comment">// together as FullyConnected.</span></div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keywordflow">if</span> (inputs[0].m_IndexedValue-&gt;GetNode().op() == <span class="stringliteral">&quot;MatMul&quot;</span> &amp;&amp;</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; HasParsedConstTensor&lt;float&gt;(inputs[1].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; {</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer =</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a64bdfd07d439803d0ec4c8b9b5c3e442">AddFullyConnectedLayer</a>(inputs[0].m_IndexedValue-&gt;GetNode(),</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; &amp;nodeDef,nodeDef.name().c_str());</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; }</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (HasParsedConstTensor&lt;float&gt;(inputs[0].m_IndexedValue-&gt;GetNode().name()) &amp;&amp;</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; inputs[1].m_IndexedValue-&gt;GetNode().op() == <span class="stringliteral">&quot;MatMul&quot;</span>)</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; {</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer =</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a64bdfd07d439803d0ec4c8b9b5c3e442">AddFullyConnectedLayer</a>(inputs[1].m_IndexedValue-&gt;GetNode(),</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; &amp;nodeDef,nodeDef.name().c_str());</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; }</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; {</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="comment">// Otherwise it&#39;s just a regular addition.</span></div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a19ef0406d9678e177106095779f0546e">AddAdditionLayer</a>(nodeDef);</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; }</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a64bdfd07d439803d0ec4c8b9b5c3e442"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a64bdfd07d439803d0ec4c8b9b5c3e442">armnnTfParser::ITfParser::TfParserImpl::AddFullyConnectedLayer</a></div><div class="ttdeci">armnn::IConnectableLayer * AddFullyConnectedLayer(const tensorflow::NodeDef &amp;matMulNodeDef, const tensorflow::NodeDef *addNodeDef, const char *armnnLayerName)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03315">TfParser.cpp:3315</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a19ef0406d9678e177106095779f0546e"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a19ef0406d9678e177106095779f0546e">armnnTfParser::ITfParser::TfParserImpl::AddAdditionLayer</a></div><div class="ttdeci">ParsedTfOperationPtr AddAdditionLayer(const tensorflow::NodeDef &amp;nodeDef, bool isBiasAdd=false)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03118">TfParser.cpp:3118</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="acd911785f874efd8628779cfcc37593b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acd911785f874efd8628779cfcc37593b">&#9670;&nbsp;</a></span>ParseAddN()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseAddN </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l00747">747</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l03118">ITfParser::TfParserImpl::AddAdditionLayer()</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00650">ITfParser::TfParserImpl::CreateAdditionLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, and <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>.</p>
+<div class="fragment"><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;{</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; uint32_t numberOfInputs = ReadMandatoryNodeUint32Attribute(nodeDef, <span class="stringliteral">&quot;N&quot;</span>);</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordflow">if</span> (numberOfInputs &lt; 2)</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; {</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="comment">// should never happen</span></div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; fmt::format(<span class="stringliteral">&quot;AddN Node with name &#39;{}&#39; has less than two ({}) inputs {}&quot;</span>,</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; nodeDef.name(),</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; std::to_string(numberOfInputs),</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; }</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (numberOfInputs == 2)</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; {</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="comment">//this is the same as a simple Add operation</span></div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a19ef0406d9678e177106095779f0546e">AddAdditionLayer</a>(nodeDef, <span class="keyword">false</span>);</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; }</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; {</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="comment">// build a binary tree of Add layers and return the final Add as the return from the function</span></div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="comment">// if we have an odd number of inputs then the final Add will consist of a layer connecting to an</span></div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="comment">// OutputOfParsedTfOperation, otherwise it will be two layers being added together</span></div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, numberOfInputs);</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberOfAdditions = 0;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; std::vector&lt;IConnectableLayer*&gt; layers;</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="comment">// NOTE: at this point we will have a minimum of three inputs</span></div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numberOfInputs; ++i)</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; {</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="comment">// every time i is odd we have two inputs to process.</span></div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keywordtype">bool</span> onSecondItem = i % 2;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordflow">if</span> (onSecondItem)</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; {</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; ++numberOfAdditions;</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* newLayer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#aee1bc04a8977a1a8755243ed9e54f8e2">CreateAdditionLayer</a>(</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; nodeDef, inputs[ i - 1], inputs[i], numberOfAdditions);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; layers.push_back(newLayer);</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; }</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; }</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; std::vector&lt;IConnectableLayer*&gt; layersToConnect(layers);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> numberOfLayersToConnect = layersToConnect.size();</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keywordtype">bool</span> isOdd = numberOfInputs % 2;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keywordflow">while</span> (numberOfLayersToConnect &gt; 1)</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; {</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; layers.clear();</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> i = 0; i &lt; numberOfLayersToConnect; ++i) {</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="keywordtype">bool</span> onSecondItem = i % 2;</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <span class="keywordflow">if</span> (onSecondItem) {</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; ++numberOfAdditions;</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* newLayer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#aee1bc04a8977a1a8755243ed9e54f8e2">CreateAdditionLayer</a>(</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; nodeDef,</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; layersToConnect[i - 1],</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; layersToConnect[i],</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; numberOfAdditions,</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; numberOfLayersToConnect,</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; isOdd);</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; layers.push_back(newLayer);</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; }</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; }</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; <span class="comment">//OK... need to go again... maybe</span></div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; layersToConnect = layers;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; numberOfLayersToConnect = layersToConnect.size();</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; }</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* finalLayer = layersToConnect[0];</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="comment">// if we had an odd number of inputs we need to connect the final layer to the</span></div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="comment">// last OutputOfParsedTfOperation in order to create the last Add layer we will</span></div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="comment">// be handing back.</span></div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordflow">if</span> (isOdd)</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; {</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <span class="comment">// connect the final layer to the last op</span></div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; finalLayer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#aee1bc04a8977a1a8755243ed9e54f8e2">CreateAdditionLayer</a>(nodeDef, inputs[numberOfInputs - 1], finalLayer);</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; }</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, finalLayer);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; }</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_aee1bc04a8977a1a8755243ed9e54f8e2"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#aee1bc04a8977a1a8755243ed9e54f8e2">armnnTfParser::ITfParser::TfParserImpl::CreateAdditionLayer</a></div><div class="ttdeci">armnn::IConnectableLayer * CreateAdditionLayer(const tensorflow::NodeDef &amp;nodeDef, armnn::IOutputSlot *input0Slot, armnn::IOutputSlot *input1Slot, const std::string &amp;layerName)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00650">TfParser.cpp:650</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a19ef0406d9678e177106095779f0546e"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a19ef0406d9678e177106095779f0546e">armnnTfParser::ITfParser::TfParserImpl::AddAdditionLayer</a></div><div class="ttdeci">ParsedTfOperationPtr AddAdditionLayer(const tensorflow::NodeDef &amp;nodeDef, bool isBiasAdd=false)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03118">TfParser.cpp:3118</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a8a7168f2bbef09692d1983b3059046ac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8a7168f2bbef09692d1983b3059046ac">&#9670;&nbsp;</a></span>ParseAvgPool()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseAvgPool </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03003">3003</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l03009">ITfParser::TfParserImpl::ParsePooling2d()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160;{</div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a31983c2de0331de6b32bf08c0d04cb0c">ParsePooling2d</a>(nodeDef, graphDef, PoolingAlgorithm::Average);</div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a31983c2de0331de6b32bf08c0d04cb0c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a31983c2de0331de6b32bf08c0d04cb0c">armnnTfParser::ITfParser::TfParserImpl::ParsePooling2d</a></div><div class="ttdeci">ParsedTfOperationPtr ParsePooling2d(const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef, armnn::PoolingAlgorithm pooltype)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03009">TfParser.cpp:3009</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a052b1116b8e9002b58610a375793ae1b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a052b1116b8e9002b58610a375793ae1b">&#9670;&nbsp;</a></span>ParseBiasAdd()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseBiasAdd </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l00857">857</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l03118">ITfParser::TfParserImpl::AddAdditionLayer()</a>, <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_i_tf_parser_8hpp_source.xhtml#l00064">ITfParser::ParsedIdentityTfOperation</a>, and <a class="el" href="_i_tf_parser_8hpp_source.xhtml#l00061">ITfParser::ParsedTfOperation</a>.</p>
+<div class="fragment"><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160;{</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a19ef0406d9678e177106095779f0546e">AddAdditionLayer</a>(nodeDef, <span class="keyword">true</span>);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a19ef0406d9678e177106095779f0546e"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a19ef0406d9678e177106095779f0546e">armnnTfParser::ITfParser::TfParserImpl::AddAdditionLayer</a></div><div class="ttdeci">ParsedTfOperationPtr AddAdditionLayer(const tensorflow::NodeDef &amp;nodeDef, bool isBiasAdd=false)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03118">TfParser.cpp:3118</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a93ff9eb48ac9fb398fdce42871c2990e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a93ff9eb48ac9fb398fdce42871c2990e">&#9670;&nbsp;</a></span>ParseConcat()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseConcat </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02266">2266</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01198">ITfParser::TfParserImpl::GetConstInputIndex()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00578">ITfParser::TfParserImpl::GetTfInputNodes()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00197">OriginsDescriptor::GetViewOrigin()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00158">OriginsDescriptor::SetConcatAxis()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>, and <a class="el" href="_descriptors_8cpp_source.xhtml#l00167">OriginsDescriptor::SetViewOriginCoord()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160;{</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160; std::vector&lt;OutputOfConstNodeDef&gt; nodes = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">GetTfInputNodes</a>(nodeDef);</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160;</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160; <span class="comment">// In tensorflow, we have the last input of the Concat layer as the axis for concatenation.</span></div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(nodes.size());</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160;</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, numInputs);</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160;</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160; <span class="comment">// Constant tensor index</span></div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a82bb92947dc9e0f04d4242910d6cbc65">GetConstInputIndex</a>(inputs);</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160; <span class="comment">// Get the axis tensor data</span></div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160; ParsedConstTfOperation&lt;int32_t&gt;* shapeNode =</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;int32_t&gt;*&gt;(inputs[index].m_IndexedValue);</div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160;</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160; std::vector&lt;int32_t&gt; axisTensorData;</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160; shapeNode-&gt;GetConstTensor(axisTensorData);</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160;</div><div class="line"><a name="l02286"></a><span class="lineno"> 2286</span>&#160; <span class="comment">// This concatDim indicates the data format: 3 is the NHWC, 1 is the NCHW.</span></div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> concatDim = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(axisTensorData[0]);</div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;</div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160; <span class="comment">// Armnn supports concatenation along the channel dimension for data formats NHWC and NCHW.</span></div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160; <span class="keywordflow">if</span> (concatDim == 0 || concatDim == 2)</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160; {</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160; fmt::format(<span class="stringliteral">&quot;Dimension {} for concatenation is not supported by Armnn. &quot;</span></div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160; <span class="stringliteral">&quot;Node {} {}&quot;</span>,</div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160; concatDim,</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160; nodeDef.name(),</div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160; }</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160;</div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> supportedNumDims = 4;</div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numConcatViews = numInputs - 1;</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160; <a class="code" href="structarmnn_1_1_origins_descriptor.xhtml">OriginsDescriptor</a> concatDescriptor(static_cast&lt;uint32_t&gt;(numConcatViews), supportedNumDims);</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160; concatDescriptor.SetConcatAxis(concatDim);</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> mergeDims(supportedNumDims);</div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mergeDim = 0;</div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIndex = 0; viewIndex &lt; numConcatViews; ++viewIndex)</div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160; {</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160; <span class="comment">// Need to double check whether it should be</span></div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; inputSlot = inputs[viewIndex].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[viewIndex].m_Index);</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;</div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160; <span class="comment">// Double check dimensions of the tensors</span></div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160; <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() != supportedNumDims)</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160; {</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a>(</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160; fmt::format(<span class="stringliteral">&quot;The number of dimensions: {} for input tensors of the &quot;</span></div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160; <span class="stringliteral">&quot;concatenation op should be {} {}&quot;</span>,</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(),</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160; supportedNumDims,</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160; }</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160;</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160; <span class="comment">// Copy the input tensor shape to mergeDimSizes and initialize the view origin coordinates for the current input</span></div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160; mergeDims = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>* viewOrigin = <span class="keyword">const_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>*<span class="keyword">&gt;</span>(concatDescriptor.GetViewOrigin(viewIndex));</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160; std::fill(viewOrigin, viewOrigin + supportedNumDims, 0);</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160;</div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160; <span class="comment">// Update the view origin coordinates and the merge dimension value</span></div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160; concatDescriptor.SetViewOriginCoord(viewIndex, concatDim, mergeDim);</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160; mergeDim += mergeDims[concatDim];</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160; }</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160;</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160; <span class="comment">// Update the output shape</span></div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160; mergeDims[concatDim] = mergeDim;</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddConcatLayer(concatDescriptor, nodeDef.name().c_str());</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160;</div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>(mergeDims, DataType::Float32));</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160;</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIndex = 0; viewIndex &lt; numConcatViews; ++viewIndex)</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160; {</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; inputSlot = inputs[viewIndex].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[viewIndex].m_Index);</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160; inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(viewIndex));</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160; }</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160;</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="structarmnn_1_1_origins_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_origins_descriptor.xhtml">armnn::OriginsDescriptor</a></div><div class="ttdoc">An OriginsDescriptor for the ConcatLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00163">Descriptors.hpp:163</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a82bb92947dc9e0f04d4242910d6cbc65"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a82bb92947dc9e0f04d4242910d6cbc65">armnnTfParser::ITfParser::TfParserImpl::GetConstInputIndex</a></div><div class="ttdeci">unsigned int GetConstInputIndex(const std::vector&lt; OutputOfParsedTfOperation &gt; &amp;inputs)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l01198">TfParser.cpp:1198</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a9e7a394f59e8d223a79e3db798803c1c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">armnnTfParser::ITfParser::TfParserImpl::GetTfInputNodes</a></div><div class="ttdeci">std::vector&lt; OutputOfConstNodeDef &gt; GetTfInputNodes(const tensorflow::NodeDef &amp;nodeDef) const</div><div class="ttdoc">Finds the nodes connected as inputs of the given node in the graph. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00578">TfParser.cpp:578</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ae7258b6f1d2aeff43fe25b2f3d662703"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae7258b6f1d2aeff43fe25b2f3d662703">&#9670;&nbsp;</a></span>ParseConst()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseConst </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01086">1086</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00952">armnnTfParser::ConvertTfTensorDataType()</a>, <a class="el" href="_types_utils_8hpp_source.xhtml#l00126">armnn::GetDataTypeSize()</a>, and <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;{</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(nodeDef.op() == <span class="stringliteral">&quot;Const&quot;</span>);</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <span class="keywordflow">if</span> (nodeDef.attr().count(<span class="stringliteral">&quot;value&quot;</span>) == 0)</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; {</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; fmt::format(<span class="stringliteral">&quot;Value not found for Const node - {} {}&quot;</span>,</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; }</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <span class="keyword">const</span> tensorflow::TensorProto&amp; tfTensor = nodeDef.attr().at(<span class="stringliteral">&quot;value&quot;</span>).tensor();</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="keyword">const</span> tensorflow::TensorShapeProto&amp; tfTensorShape = tfTensor.tensor_shape();</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">tensorflow::DataType</a> tfDataType = ReadMandatoryNodeTypeAttribute(nodeDef, <span class="stringliteral">&quot;dtype&quot;</span>);</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> GetDimensionSize = [](<span class="keyword">auto</span>&amp; d) { <span class="keywordflow">return</span> d.size(); };</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; std::vector&lt;unsigned int&gt; dimensionSizes;</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; std::transform(tfTensorShape.dim().begin(), tfTensorShape.dim().end(),</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; std::back_inserter(dimensionSizes), GetDimensionSize);</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="comment">// Calculates number of elements.</span></div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">DataType</a> dataType = <a class="code" href="namespacearmnn_tf_parser.xhtml#a3d934e14ca544ba7af4fe562def8a986">ConvertTfTensorDataType</a>(tfDataType, nodeDef);</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numElements = 0U;</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; <span class="keywordflow">if</span> (!dimensionSizes.empty())</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; {</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; numElements = std::accumulate(dimensionSizes.begin(), dimensionSizes.end(),</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; 1U, std::multiplies&lt;unsigned int&gt;());</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; }</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; std::vector&lt;int8_t&gt; tensorData;</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="comment">// Get tensor data from the list of values attribute.</span></div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keywordflow">if</span> (tfTensor.tensor_content().empty())</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; {</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; InvokeParseFunction&lt;ParseTfTensorValueList&gt;::Result&lt;<span class="keywordtype">void</span>&gt;(dataType, tfTensor, numElements, tensorData);</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <span class="comment">// If the tensor shape is not defined, but there is a value list, then interpret the data as a 1D</span></div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <span class="comment">// tensor of the provided number of elements.</span></div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <span class="keywordflow">if</span> (numElements == 0)</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; {</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tfNumElements =</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(tensorData.size()) / <a class="code" href="namespacearmnn.xhtml#aa02b9e06fb20fa3c13da0427e6ee5ab2">GetDataTypeSize</a>(dataType);</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; dimensionSizes.push_back(tfNumElements);</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; }</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; }</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <span class="comment">// Gets tensor data from tensor content attribute.</span></div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; {</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; tensorData.assign(tfTensor.tensor_content().begin(), tfTensor.tensor_content().end());</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="comment">// Checks if a tensor shape is defined for the tensor content.</span></div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="keywordflow">if</span> (numElements == 0)</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; {</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; fmt::format(<span class="stringliteral">&quot;No tensor shape found for Const node - {} {}&quot;</span>,</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; }</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; }</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="comment">// Const node requires at least a list of values or a content attribute.</span></div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <span class="keywordflow">if</span> (tensorData.empty())</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; {</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; fmt::format(<span class="stringliteral">&quot;No tensor data found for Const node - {} {}&quot;</span>,</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; }</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> tensorInfo(static_cast&lt;unsigned int&gt;(dimensionSizes.size()),</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; dimensionSizes.data(),</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; dataType);</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; <span class="comment">// If we have a list of values, then the length of the list must be</span></div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <span class="comment">// less than or equal to the number of elements implied by the shape argument.</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <span class="keywordflow">if</span> (tensorData.size() &gt; tensorInfo.GetNumBytes())</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; {</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; fmt::format(<span class="stringliteral">&quot;Number of elements ({}) should be less than or equal &quot;</span></div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="stringliteral">&quot;to the number of elements implied by the shape argument ({}) for Const node - {} {}&quot;</span>,</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; (tensorData.size() / <a class="code" href="namespacearmnn.xhtml#aa02b9e06fb20fa3c13da0427e6ee5ab2">GetDataTypeSize</a>(dataType)),</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; tensorInfo.GetNumElements(),</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; }</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="keywordflow">return</span> InvokeParseFunction&lt;MakeTfOperation&lt;ParsedConstTfOperation&gt;&gt;::Result&lt;ParsedTfOperationPtr&gt;(</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; dataType, <span class="keyword">this</span>, nodeDef, tensorData, tensorInfo);</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00032">Types.hpp:32</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="namespacearmnn_tf_parser_xhtml_a3d934e14ca544ba7af4fe562def8a986"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#a3d934e14ca544ba7af4fe562def8a986">armnnTfParser::ConvertTfTensorDataType</a></div><div class="ttdeci">DataType ConvertTfTensorDataType(const tensorflow::DataType tfDataType, const tensorflow::NodeDef &amp;nodeDef)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00952">TfParser.cpp:952</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_aa02b9e06fb20fa3c13da0427e6ee5ab2"><div class="ttname"><a href="namespacearmnn.xhtml#aa02b9e06fb20fa3c13da0427e6ee5ab2">armnn::GetDataTypeSize</a></div><div class="ttdeci">constexpr unsigned int GetDataTypeSize(DataType dataType)</div><div class="ttdef"><b>Definition:</b> <a href="_types_utils_8hpp_source.xhtml#l00126">TypesUtils.hpp:126</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5caa51a7c4b4444cdcc33832fabc512d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5caa51a7c4b4444cdcc33832fabc512d">&#9670;&nbsp;</a></span>ParseConv2D()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseConv2D </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01213">1213</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l00429">armnnTfParser::CalcPadding()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00356">CHECK_DATA_FORMAT</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00368">CHECK_PADDING_TYPE</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00192">TensorInfo::GetNumElements()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00284">BaseTensor&lt; MemoryType &gt;::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00454">Convolution2dDescriptor::m_BiasEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00456">Convolution2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00450">Convolution2dDescriptor::m_DilationX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00452">Convolution2dDescriptor::m_DilationY</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00444">Convolution2dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00438">Convolution2dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00440">Convolution2dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00442">Convolution2dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00446">Convolution2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00448">Convolution2dDescriptor::m_StrideY</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00131">armnnUtils::Permute()</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00098">armnnUtils::Permuted()</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;{</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; inputSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <span class="keywordflow">if</span> (!HasParsedConstTensor&lt;float&gt;(inputs[1].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; {</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports Convolution layers with constant weights for {}, input {} {}&quot;</span>,</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; inputs[1].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; }</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; ParsedConstTfOperation&lt;float&gt;* weightNode =</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;float&gt; *&gt;(inputs[1].m_IndexedValue);</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; std::string paddingString = ReadMandatoryNodeStringAttribute(nodeDef, <span class="stringliteral">&quot;padding&quot;</span>);</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; std::string dataFormat = ReadMandatoryNodeStringAttribute(nodeDef, <span class="stringliteral">&quot;data_format&quot;</span>);</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; std::vector&lt;uint32_t&gt; strides = ReadMandatoryNodeUint32ListAttribute(nodeDef, <span class="stringliteral">&quot;strides&quot;</span>);</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> desc;</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <a class="code" href="_tf_parser_8cpp.xhtml#a3fb047570644cae325aa88d3cd7bb96e">CHECK_DATA_FORMAT</a>(nodeDef, dataFormat, <span class="stringliteral">&quot;Conv2D&quot;</span>);</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = dataFormat == <span class="stringliteral">&quot;NHWC&quot;</span> ? DataLayout::NHWC : DataLayout::NCHW;</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = dataLayout;</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dataLayoutIndexed(dataLayout);</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = strides[dataLayoutIndexed.GetWidthIndex()];</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = strides[dataLayoutIndexed.GetHeightIndex()];</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; std::vector&lt;uint32_t&gt; dilations = ReadOptionalNodeUint32ListAttribute(nodeDef, <span class="stringliteral">&quot;dilations&quot;</span>);</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <span class="keywordflow">if</span> (!dilations.empty())</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; {</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a> = dilations[dataLayoutIndexed.GetWidthIndex()];</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a> = dilations[dataLayoutIndexed.GetHeightIndex()];</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; }</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; uint32_t inputHeight = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayoutIndexed.GetHeightIndex()];</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; uint32_t inputWidth = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayoutIndexed.GetWidthIndex()];</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <span class="comment">// Mappings from TensorFlow filter tensors to the ArmNN filter tensors.</span></div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="comment">// Tensorflow weights are [H, W, In, Out].</span></div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <span class="comment">// ArmNN weights have to be [Out, H, W, In] when the data layout is NHWC,</span></div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <span class="comment">// and [Out, In, H, W] when the data layout is NCHW.</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">PermutationVector</a> permutationVector =</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; dataLayout == DataLayout::NHWC ?</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; std::initializer_list&lt;unsigned int&gt;{ 1, 2, 3, 0 } : <span class="comment">// NHWC: [H, W, In, Out] -&gt; [Out, H, W, In]</span></div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; std::initializer_list&lt;unsigned int&gt;{ 2, 3, 1, 0 }; <span class="comment">// NCHW: [H, W, In, Out] -&gt; [Out, In, H, W]</span></div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <span class="comment">// Swizzle the tensor using the given permutation vector.</span></div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; weightTensorInfo = weightNode-&gt;GetTensorInfo();</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> weightTensorSwizzledInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(weightTensorInfo, permutationVector);</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; <span class="comment">// Swizzles the content of the tensor&#39;s permanent storage into a local storage.</span></div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; std::vector&lt;float&gt; weightTensorSwizzledData(weightTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>());</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(weightTensorSwizzledInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>(), permutationVector,</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; weightNode-&gt;GetStorage(), weightTensorSwizzledData.data(), <span class="keyword">sizeof</span>(float));</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="comment">// Create a weight tensor with the newly swizzled data.</span></div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> weightTensor(weightTensorSwizzledInfo, weightTensorSwizzledData);</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; uint32_t weightHeight = weightTensor.GetShape()[dataLayoutIndexed.GetHeightIndex()];</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; uint32_t weightWidth = weightTensor.GetShape()[dataLayoutIndexed.GetWidthIndex()];</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; <span class="keywordtype">bool</span> padding = <span class="keyword">false</span>;</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo;</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = 0;</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = 0;</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <a class="code" href="_tf_parser_8cpp.xhtml#aab838eb7734e531bb5be6f6dece673bf">CHECK_PADDING_TYPE</a>(nodeDef, paddingString);</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="keywordflow">if</span> (paddingString == <span class="stringliteral">&quot;SAME&quot;</span>)</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; {</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; padding = <span class="keyword">true</span>;</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; }</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (paddingString == <span class="stringliteral">&quot;VALID&quot;</span>)</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; {</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; padding = <span class="keyword">false</span>;</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; }</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">CalcPadding</a>(inputHeight, weightHeight, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a>, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>, padding);</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">CalcPadding</a>(inputWidth, weightWidth, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a>, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>, desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>, padding);</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <span class="comment">// Calculate output height and width</span></div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dilatedFilterWidth = weightWidth + (desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a> - 1) * (weightWidth - 1);</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readWidth = (inputWidth + desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> + desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>) - dilatedFilterWidth;</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; outputWidth = 1 + (readWidth / desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dilatedFilterHeight = weightHeight + (desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a> - 1) * (weightHeight - 1);</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readHeight = (inputHeight + desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> + desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>) - dilatedFilterHeight;</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; outputHeight = 1 + (readHeight / desc.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>);</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="keywordflow">switch</span> (dataLayout)</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; {</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <span class="keywordflow">case</span> DataLayout::NHWC:</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; outputInfo = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0],</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; outputHeight,</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; outputWidth,</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; weightTensor.GetShape()[0] },</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; DataType::Float32);</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; <span class="keywordflow">case</span> DataLayout::NCHW:</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; outputInfo = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0],</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; weightTensor.GetShape()[0],</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; outputHeight,</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; outputWidth },</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; DataType::Float32);</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; }</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddConvolution2dLayer(desc,</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; weightTensor,</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; <a class="code" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>(),</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; nodeDef.name().c_str());</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;}</div><div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::Convolution2dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00444">Descriptors.hpp:444</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">armnn::Convolution2dDescriptor::m_BiasEnabled</a></div><div class="ttdeci">bool m_BiasEnabled</div><div class="ttdoc">Enable/disable bias. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00454">Descriptors.hpp:454</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::Convolution2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00456">Descriptors.hpp:456</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00050">Types.hpp:50</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml">armnn::Convolution2dDescriptor</a></div><div class="ttdoc">A Convolution2dDescriptor for the Convolution2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00408">Descriptors.hpp:408</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::Convolution2dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00440">Descriptors.hpp:440</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_a302b688d88dd73cde0fb1faef6679907"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">armnn::Convolution2dDescriptor::m_DilationY</a></div><div class="ttdeci">uint32_t m_DilationY</div><div class="ttdoc">Dilation along y axis. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00452">Descriptors.hpp:452</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::Convolution2dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00442">Descriptors.hpp:442</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_af3c74017185773dd61d8ca6662d65d43"><div class="ttname"><a href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a></div><div class="ttdeci">void Permute(const armnn::TensorShape &amp;dstShape, const armnn::PermutationVector &amp;mappings, const void *src, void *dst, size_t dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00131">Permute.cpp:131</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::Convolution2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00446">Descriptors.hpp:446</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+<div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00314">Tensor.hpp:314</a></div></div>
+<div class="ttc" id="namespacearmnn_tf_parser_xhtml_aca0a31de02d5c087029bb28c9202b4d6"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">armnnTfParser::CalcPadding</a></div><div class="ttdeci">void CalcPadding(uint32_t inputSize, uint32_t filterSize, uint32_t stride, uint32_t dilation, uint32_t &amp;paddingFront, uint32_t &amp;paddingBack, bool samePadding)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00429">TfParser.cpp:429</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a></div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00212">Types.hpp:212</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::Convolution2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00448">Descriptors.hpp:448</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_aa3c6a77a963a98ccb8ea7b8fd008a8c1"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">armnn::Convolution2dDescriptor::m_DilationX</a></div><div class="ttdeci">uint32_t m_DilationX</div><div class="ttdoc">Dilation along x axis. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00450">Descriptors.hpp:450</a></div></div>
+<div class="ttc" id="_tf_parser_8cpp_xhtml_a3fb047570644cae325aa88d3cd7bb96e"><div class="ttname"><a href="_tf_parser_8cpp.xhtml#a3fb047570644cae325aa88d3cd7bb96e">CHECK_DATA_FORMAT</a></div><div class="ttdeci">#define CHECK_DATA_FORMAT(NODE_DEF, FORMAT, NODE_TYPE)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00356">TfParser.cpp:356</a></div></div>
+<div class="ttc" id="structarmnn_1_1_empty_optional_xhtml"><div class="ttname"><a href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a></div><div class="ttdoc">EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00032">Optional.hpp:32</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="_tf_parser_8cpp_xhtml_aab838eb7734e531bb5be6f6dece673bf"><div class="ttname"><a href="_tf_parser_8cpp.xhtml#aab838eb7734e531bb5be6f6dece673bf">CHECK_PADDING_TYPE</a></div><div class="ttdeci">#define CHECK_PADDING_TYPE(NODE_DEF, PADDING)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00368">TfParser.cpp:368</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_abeaf4f6785039866fd075f4569ba8e84"><div class="ttname"><a href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a></div><div class="ttdeci">armnn::TensorShape Permuted(const armnn::TensorShape &amp;srcShape, const armnn::PermutationVector &amp;mappings)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00098">Permute.cpp:98</a></div></div>
+<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::Convolution2dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00438">Descriptors.hpp:438</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8846406ac37fbd2204f0be16ee05d5b7"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">armnn::TensorInfo::GetNumElements</a></div><div class="ttdeci">unsigned int GetNumElements() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00192">Tensor.hpp:192</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a87e85155fcde2f7e6e7cc0353e31867f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a87e85155fcde2f7e6e7cc0353e31867f">&#9670;&nbsp;</a></span>ParseDepthwiseConv2D()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseDepthwiseConv2D </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01341">1341</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l00429">armnnTfParser::CalcPadding()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00356">CHECK_DATA_FORMAT</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00368">CHECK_PADDING_TYPE</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00192">TensorInfo::GetNumElements()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00284">BaseTensor&lt; MemoryType &gt;::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00506">DepthwiseConvolution2dDescriptor::m_BiasEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00508">DepthwiseConvolution2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00502">DepthwiseConvolution2dDescriptor::m_DilationX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00504">DepthwiseConvolution2dDescriptor::m_DilationY</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00496">DepthwiseConvolution2dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00490">DepthwiseConvolution2dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00492">DepthwiseConvolution2dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00494">DepthwiseConvolution2dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00498">DepthwiseConvolution2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00500">DepthwiseConvolution2dDescriptor::m_StrideY</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00131">armnnUtils::Permute()</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00098">armnnUtils::Permuted()</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;{</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; inputSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; <span class="keywordflow">if</span> (!HasParsedConstTensor&lt;float&gt;(inputs[1].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; {</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports Depthwise Convolution layer with constant weights. &quot;</span></div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <span class="stringliteral">&quot;Non const input found {} for node {} {}&quot;</span>,</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; inputs[1].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; }</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; ParsedConstTfOperation&lt;float&gt;* weightNode =</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;float&gt; *&gt;(inputs[1].m_IndexedValue);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; std::string paddingString = ReadMandatoryNodeStringAttribute(nodeDef, <span class="stringliteral">&quot;padding&quot;</span>);</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; std::string dataFormat = ReadMandatoryNodeStringAttribute(nodeDef, <span class="stringliteral">&quot;data_format&quot;</span>);</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; std::vector&lt;uint32_t&gt; strides = ReadMandatoryNodeUint32ListAttribute(nodeDef, <span class="stringliteral">&quot;strides&quot;</span>);</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> desc;</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; <a class="code" href="_tf_parser_8cpp.xhtml#a3fb047570644cae325aa88d3cd7bb96e">CHECK_DATA_FORMAT</a>(nodeDef, dataFormat, <span class="stringliteral">&quot;DepthwiseConv2dNative&quot;</span>);</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = dataFormat == <span class="stringliteral">&quot;NHWC&quot;</span> ? DataLayout::NHWC : DataLayout::NCHW;</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = dataLayout;</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dataLayoutIndexed(dataLayout);</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = strides[dataLayoutIndexed.GetWidthIndex()];</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = strides[dataLayoutIndexed.GetHeightIndex()];</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; std::vector&lt;uint32_t&gt; dilations = ReadOptionalNodeUint32ListAttribute(nodeDef, <span class="stringliteral">&quot;dilations&quot;</span>);</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; <span class="keywordflow">if</span> (!dilations.empty())</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; {</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a> = dilations[dataLayoutIndexed.GetWidthIndex()];</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a> = dilations[dataLayoutIndexed.GetHeightIndex()];</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; }</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; uint32_t inputHeight = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayoutIndexed.GetHeightIndex()];</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; uint32_t inputWidth = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayoutIndexed.GetWidthIndex()];</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; <span class="comment">// Mappings from TensorFlow filter tensors to the ArmNN filter tensors.</span></div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="comment">// Tensorflow weights come in the format [H, W, I, M].</span></div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; <span class="comment">// ArmNN weights have to be [M, I, H, W].</span></div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">PermutationVector</a> permutationVector{ 2, 3, 1, 0 }; <span class="comment">// [H, W, I, M] -&gt; [M, I, H, W]</span></div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160;</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; <span class="comment">// Swizzle the tensor using the given permutation vector.</span></div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; weightTensorInfo = weightNode-&gt;GetTensorInfo();</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> weightTensorSwizzledInfo = <a class="code" href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a>(weightTensorInfo, permutationVector);</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; <span class="comment">// Swizzles the content of the tensor&#39;s permanent storage into a local storage.</span></div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; std::vector&lt;float&gt; weightTensorSwizzledData(weightTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>());</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <a class="code" href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a>(weightTensorSwizzledInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>(), permutationVector,</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; weightNode-&gt;GetStorage(), weightTensorSwizzledData.data(), <span class="keyword">sizeof</span>(float));</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; <span class="comment">// Create a weight tensor with the newly swizzled data.</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> weightTensor(weightTensorSwizzledInfo, weightTensorSwizzledData);</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; uint32_t weightHeight = weightTensor.GetShape()[2];</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; uint32_t weightWidth = weightTensor.GetShape()[3];</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; <span class="keywordtype">bool</span> padding = <span class="keyword">false</span>;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo;</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = 0;</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = 0;</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; <a class="code" href="_tf_parser_8cpp.xhtml#aab838eb7734e531bb5be6f6dece673bf">CHECK_PADDING_TYPE</a>(nodeDef, paddingString);</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; <span class="keywordflow">if</span> (paddingString == <span class="stringliteral">&quot;SAME&quot;</span>)</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; {</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; padding = <span class="keyword">true</span>;</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; }</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (paddingString == <span class="stringliteral">&quot;VALID&quot;</span>)</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; {</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; padding = <span class="keyword">false</span>;</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; }</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">CalcPadding</a>(inputHeight, weightHeight, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a>, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>, padding);</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">CalcPadding</a>(inputWidth, weightWidth, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a>, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>, desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>, padding);</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <span class="comment">// Calculate output height and width</span></div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dilatedFilterWidth = weightWidth + (desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">m_DilationX</a> - 1) * (weightWidth - 1);</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readWidth = (inputWidth + desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> + desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>) - dilatedFilterWidth;</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; outputWidth = 1 + (readWidth / desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>);</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dilatedFilterHeight = weightHeight + (desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">m_DilationY</a> - 1) * (weightHeight - 1);</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> readHeight = (inputHeight + desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> + desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>) - dilatedFilterHeight;</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; outputHeight = 1 + (readHeight / desc.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>);</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; <span class="keywordflow">switch</span> (dataLayout)</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; {</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; <span class="keywordflow">case</span> DataLayout::NHWC:</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; outputInfo = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0],</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; outputHeight,</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; outputWidth,</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; weightTensor.GetShape()[0] * weightTensor.GetShape()[1]},</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; DataType::Float32);</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; <span class="keywordflow">case</span> DataLayout::NCHW:</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; outputInfo = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0],</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; weightTensor.GetShape()[0] * weightTensor.GetShape()[1],</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; outputHeight,</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; outputWidth },</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; DataType::Float32);</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; }</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddDepthwiseConvolution2dLayer(desc,</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; weightTensor,</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <a class="code" href="structarmnn_1_1_empty_optional.xhtml">EmptyOptional</a>(),</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; nodeDef.name().c_str());</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">armnn::DepthwiseConvolution2dDescriptor::m_BiasEnabled</a></div><div class="ttdeci">bool m_BiasEnabled</div><div class="ttdoc">Enable/disable bias. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00506">Descriptors.hpp:506</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00050">Types.hpp:50</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::DepthwiseConvolution2dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00496">Descriptors.hpp:496</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::DepthwiseConvolution2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00508">Descriptors.hpp:508</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::DepthwiseConvolution2dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00490">Descriptors.hpp:490</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a302b688d88dd73cde0fb1faef6679907"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a302b688d88dd73cde0fb1faef6679907">armnn::DepthwiseConvolution2dDescriptor::m_DilationY</a></div><div class="ttdeci">uint32_t m_DilationY</div><div class="ttdoc">Dilation factor value for height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00504">Descriptors.hpp:504</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_af3c74017185773dd61d8ca6662d65d43"><div class="ttname"><a href="namespacearmnn_utils.xhtml#af3c74017185773dd61d8ca6662d65d43">armnnUtils::Permute</a></div><div class="ttdeci">void Permute(const armnn::TensorShape &amp;dstShape, const armnn::PermutationVector &amp;mappings, const void *src, void *dst, size_t dataTypeSize)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00131">Permute.cpp:131</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::DepthwiseConvolution2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00498">Descriptors.hpp:498</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_aa3c6a77a963a98ccb8ea7b8fd008a8c1"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aa3c6a77a963a98ccb8ea7b8fd008a8c1">armnn::DepthwiseConvolution2dDescriptor::m_DilationX</a></div><div class="ttdeci">uint32_t m_DilationX</div><div class="ttdoc">Dilation factor value for width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00502">Descriptors.hpp:502</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::DepthwiseConvolution2dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00494">Descriptors.hpp:494</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+<div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00314">Tensor.hpp:314</a></div></div>
+<div class="ttc" id="namespacearmnn_tf_parser_xhtml_aca0a31de02d5c087029bb28c9202b4d6"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">armnnTfParser::CalcPadding</a></div><div class="ttdeci">void CalcPadding(uint32_t inputSize, uint32_t filterSize, uint32_t stride, uint32_t dilation, uint32_t &amp;paddingFront, uint32_t &amp;paddingBack, bool samePadding)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00429">TfParser.cpp:429</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a></div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00212">Types.hpp:212</a></div></div>
+<div class="ttc" id="_tf_parser_8cpp_xhtml_a3fb047570644cae325aa88d3cd7bb96e"><div class="ttname"><a href="_tf_parser_8cpp.xhtml#a3fb047570644cae325aa88d3cd7bb96e">CHECK_DATA_FORMAT</a></div><div class="ttdeci">#define CHECK_DATA_FORMAT(NODE_DEF, FORMAT, NODE_TYPE)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00356">TfParser.cpp:356</a></div></div>
+<div class="ttc" id="structarmnn_1_1_empty_optional_xhtml"><div class="ttname"><a href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a></div><div class="ttdoc">EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00032">Optional.hpp:32</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::DepthwiseConvolution2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00500">Descriptors.hpp:500</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="_tf_parser_8cpp_xhtml_aab838eb7734e531bb5be6f6dece673bf"><div class="ttname"><a href="_tf_parser_8cpp.xhtml#aab838eb7734e531bb5be6f6dece673bf">CHECK_PADDING_TYPE</a></div><div class="ttdeci">#define CHECK_PADDING_TYPE(NODE_DEF, PADDING)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00368">TfParser.cpp:368</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_abeaf4f6785039866fd075f4569ba8e84"><div class="ttname"><a href="namespacearmnn_utils.xhtml#abeaf4f6785039866fd075f4569ba8e84">armnnUtils::Permuted</a></div><div class="ttdeci">armnn::TensorShape Permuted(const armnn::TensorShape &amp;srcShape, const armnn::PermutationVector &amp;mappings)</div><div class="ttdef"><b>Definition:</b> <a href="_permute_8cpp_source.xhtml#l00098">Permute.cpp:98</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">armnn::DepthwiseConvolution2dDescriptor</a></div><div class="ttdoc">A DepthwiseConvolution2dDescriptor for the DepthwiseConvolution2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00460">Descriptors.hpp:460</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8846406ac37fbd2204f0be16ee05d5b7"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">armnn::TensorInfo::GetNumElements</a></div><div class="ttdeci">unsigned int GetNumElements() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00192">Tensor.hpp:192</a></div></div>
+<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::DepthwiseConvolution2dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00492">Descriptors.hpp:492</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="acf7e8c7e2e95c9ac09b1197c04b992a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acf7e8c7e2e95c9ac09b1197c04b992a3">&#9670;&nbsp;</a></span>ParseEqual()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseEqual </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01947">1947</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01841">ITfParser::TfParserImpl::ProcessComparisonLayer()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l01807">ITfParser::TfParserImpl::ProcessElementwiseInputSlots()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;{</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160; std::pair&lt;armnn::IOutputSlot*, armnn::IOutputSlot*&gt; inputLayers = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a0562881f75a2083315f1a1660686812b">ProcessElementwiseInputSlots</a>(nodeDef, <span class="stringliteral">&quot;Equal&quot;</span>);</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input0Slot = inputLayers.first;</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input1Slot = inputLayers.second;</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160;</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160; <a class="code" href="structarmnn_1_1_comparison_descriptor.xhtml">ComparisonDescriptor</a> descriptor(ComparisonOperation::Equal);</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddComparisonLayer(descriptor, nodeDef.name().c_str());</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a4ceb262ac0351dcf1aa9f7e1dc298489">ProcessComparisonLayer</a>(input0Slot, input1Slot, layer, nodeDef);</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="structarmnn_1_1_comparison_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_comparison_descriptor.xhtml">armnn::ComparisonDescriptor</a></div><div class="ttdoc">A ComparisonDescriptor for the ComparisonLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00078">Descriptors.hpp:78</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a0562881f75a2083315f1a1660686812b"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a0562881f75a2083315f1a1660686812b">armnnTfParser::ITfParser::TfParserImpl::ProcessElementwiseInputSlots</a></div><div class="ttdeci">std::pair&lt; armnn::IOutputSlot *, armnn::IOutputSlot * &gt; ProcessElementwiseInputSlots(const tensorflow::NodeDef &amp;nodeDef, const std::string &amp;layerName)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l01807">TfParser.cpp:1807</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a4ceb262ac0351dcf1aa9f7e1dc298489"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a4ceb262ac0351dcf1aa9f7e1dc298489">armnnTfParser::ITfParser::TfParserImpl::ProcessComparisonLayer</a></div><div class="ttdeci">ParsedTfOperationPtr ProcessComparisonLayer(armnn::IOutputSlot *input0Slot, armnn::IOutputSlot *input1Slot, armnn::IConnectableLayer *const layer, const tensorflow::NodeDef &amp;nodeDef)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l01841">TfParser.cpp:1841</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a165298763e91bc4322753dbe8cbe9df7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a165298763e91bc4322753dbe8cbe9df7">&#9670;&nbsp;</a></span>ParseExpandDims()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseExpandDims </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01535">1535</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00194">TensorInfo::GetDataType()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00192">TensorInfo::GetNumElements()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00578">ITfParser::TfParserImpl::GetTfInputNodes()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00848">ReshapeDescriptor::m_TargetShape</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01466">armnnTfParser::OutputShapeOfExpandDims()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>, and <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::Signed32</a>.</p>
+<div class="fragment"><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;{</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; <span class="comment">// Number of inputs can either</span></div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; <span class="comment">// be 1 - that indicates that the axis parameter is passed as an attribute of the operation</span></div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; <span class="comment">// or 2 - which means that the axis parameter is passed as a second input</span></div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; std::vector&lt;OutputOfConstNodeDef&gt; nodes = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">GetTfInputNodes</a>(nodeDef);</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; <span class="keyword">const</span> std::size_t numInputs = nodes.size();</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs;</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; std::int32_t expandDim; <span class="comment">// axis or dim parameter. Describes which dimension to expand.</span></div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; <span class="keywordflow">if</span> (numInputs == 1)</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; {</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 1);</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; expandDim = ReadMandatoryNodeInt32Attribute(nodeDef, <span class="stringliteral">&quot;Tdim&quot;</span>);</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; }</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; {</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; <span class="comment">// make sure data type is int32</span></div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; prevLayerOutputSlot = inputs[1].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[1].m_Index);</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = prevLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>()!=<a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a>)</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; {</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; fmt::format(<span class="stringliteral">&quot;The axis parameter of ExpandDims operation given as second input is not of type int32.&quot;</span></div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <span class="stringliteral">&quot; Input {0} Node {1} {2}&quot;</span>,</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; inputs[1].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; }</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; <span class="comment">// ensure the second input is a constant value</span></div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; <span class="keywordflow">if</span> (!HasParsedConstTensor&lt;int32_t&gt;(inputs[1].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; {</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports ExpandDims layers with constant axis/dim parameter. &quot;</span></div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; <span class="stringliteral">&quot;Input {0} Node {1} {2}&quot;</span>,</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; inputs[1].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; }</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <span class="comment">// make sure the second input is scalar or contains only a single value</span></div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; <span class="comment">// (we don&#39;t support expand dims for multiple axis but we don&#39;t care what shape the</span></div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; <span class="comment">// given tensor has as long as there is only a single value in it</span></div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; <span class="comment">// e.g. a tensor like this [[[1]]] is completely fine)</span></div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">GetNumElements</a>() != 1)</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; {</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; fmt::format(<span class="stringliteral">&quot;The axis parameter of ExpandDims operation given as second input is not &quot;</span></div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; <span class="stringliteral">&quot;allowed to hold more than one value. &quot;</span></div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; <span class="stringliteral">&quot;Input {0} Node {1} {2}&quot;</span>,</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; inputs[1].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; }</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; ParsedConstTfOperation&lt;int32_t&gt;* expandDimsNode =</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;int32_t&gt;*&gt;(inputs[1].m_IndexedValue);</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; memcpy(&amp;expandDim, expandDimsNode-&gt;GetStorage(), <span class="keyword">sizeof</span>(expandDim));</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; }</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; <span class="comment">// First input is the vector that should be expanded by another dimension</span></div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; prevLayerOutputSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = prevLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo;</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; outputInfo = <a class="code" href="namespacearmnn_tf_parser.xhtml#a9be4b3b32d110ca8d27936f6f7df1408">OutputShapeOfExpandDims</a>(nodeDef, inputTensorInfo, expandDim);</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; <a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml">ReshapeDescriptor</a> reshapeDesc;</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; reshapeDesc.<a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml#a1178f4dafdda81f59c15145ec327f7d9">m_TargetShape</a> = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddReshapeLayer(reshapeDesc, nodeDef.name().c_str());</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; prevLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="structarmnn_1_1_reshape_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_reshape_descriptor.xhtml">armnn::ReshapeDescriptor</a></div><div class="ttdoc">A ReshapeDescriptor for the ReshapeLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00832">Descriptors.hpp:832</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6accedffbc6e5308e33d3843e8bdc0dad7">armnn::DataType::Signed32</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_reshape_descriptor_xhtml_a1178f4dafdda81f59c15145ec327f7d9"><div class="ttname"><a href="structarmnn_1_1_reshape_descriptor.xhtml#a1178f4dafdda81f59c15145ec327f7d9">armnn::ReshapeDescriptor::m_TargetShape</a></div><div class="ttdeci">TensorShape m_TargetShape</div><div class="ttdoc">Target shape value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00848">Descriptors.hpp:848</a></div></div>
+<div class="ttc" id="namespacearmnn_tf_parser_xhtml_a9be4b3b32d110ca8d27936f6f7df1408"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#a9be4b3b32d110ca8d27936f6f7df1408">armnnTfParser::OutputShapeOfExpandDims</a></div><div class="ttdeci">TensorInfo OutputShapeOfExpandDims(const tensorflow::NodeDef &amp;nodeDef, TensorInfo inputTensorInfo, std::int32_t expandDim)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l01466">TfParser.cpp:1466</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_aea909c7327109228ef618d459015def3"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">armnn::TensorInfo::GetDataType</a></div><div class="ttdeci">DataType GetDataType() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00194">Tensor.hpp:194</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a9e7a394f59e8d223a79e3db798803c1c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">armnnTfParser::ITfParser::TfParserImpl::GetTfInputNodes</a></div><div class="ttdeci">std::vector&lt; OutputOfConstNodeDef &gt; GetTfInputNodes(const tensorflow::NodeDef &amp;nodeDef) const</div><div class="ttdoc">Finds the nodes connected as inputs of the given node in the graph. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00578">TfParser.cpp:578</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8846406ac37fbd2204f0be16ee05d5b7"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8846406ac37fbd2204f0be16ee05d5b7">armnn::TensorInfo::GetNumElements</a></div><div class="ttdeci">unsigned int GetNumElements() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00192">Tensor.hpp:192</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a838bec330f4c2495c3e86088502e35e8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a838bec330f4c2495c3e86088502e35e8">&#9670;&nbsp;</a></span>ParseFusedBatchNorm()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseFusedBatchNorm </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01618">1618</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l00356">CHECK_DATA_FORMAT</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00641">BatchNormalizationDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00639">BatchNormalizationDescriptor::m_Eps</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;{</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 5);</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; <span class="keywordflow">if</span> (!HasParsedConstTensor&lt;float&gt;(inputs[1].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; {</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports FusedBatchNormalization layers with constant scale. &quot;</span></div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; <span class="stringliteral">&quot;Input {}. Node {} {}&quot;</span>,</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; inputs[1].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; }</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160; ParsedConstTfOperation&lt;float&gt;* scaleNode =</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;float&gt; *&gt;(inputs[1].m_IndexedValue);</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; <span class="keywordflow">if</span> (!HasParsedConstTensor&lt;float&gt;(inputs[2].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; {</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports FusedBatchNormalization layers with constant offset. &quot;</span></div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160; <span class="stringliteral">&quot;Input {}. Node {} {}&quot;</span>,</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; inputs[2].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; }</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; ParsedConstTfOperation&lt;float&gt;* offsetNode =</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;float&gt; *&gt;(inputs[2].m_IndexedValue);</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; <span class="keywordflow">if</span> (!HasParsedConstTensor&lt;float&gt;(inputs[3].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; {</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports FusedBatchNormalization layers with constant mean. &quot;</span></div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <span class="stringliteral">&quot;Input {}. Node {} {}&quot;</span>,</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160; inputs[3].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160; }</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160; ParsedConstTfOperation&lt;float&gt;* meanNode =</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;float&gt; *&gt;(inputs[3].m_IndexedValue);</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160; <span class="keywordflow">if</span> (!HasParsedConstTensor&lt;float&gt;(inputs[4].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160; {</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports FusedBatchNormalization layers with constant variance. &quot;</span></div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160; <span class="stringliteral">&quot;Input {}. Node {} {}&quot;</span>,</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160; inputs[4].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160; }</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160; ParsedConstTfOperation&lt;float&gt;* varianceNode =</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;float&gt; *&gt;(inputs[4].m_IndexedValue);</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160; <span class="keyword">const</span> std::string dataFormat = ReadOptionalNodeStringAttribute(nodeDef, <span class="stringliteral">&quot;data_format&quot;</span>, <span class="stringliteral">&quot;NHWC&quot;</span>);</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; <a class="code" href="_tf_parser_8cpp.xhtml#a3fb047570644cae325aa88d3cd7bb96e">CHECK_DATA_FORMAT</a>(nodeDef, dataFormat, <span class="stringliteral">&quot;FusedBatchNorm&quot;</span>);</div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160; <span class="comment">// The descriptor only has the epsilon attribute.</span></div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160; <a class="code" href="structarmnn_1_1_batch_normalization_descriptor.xhtml">BatchNormalizationDescriptor</a> desc;</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160; desc.<a class="code" href="structarmnn_1_1_batch_normalization_descriptor.xhtml#a11c821c7524251004a72ed13c510853c">m_Eps</a> = ReadMandatoryNodeFloatAttribute(nodeDef, <span class="stringliteral">&quot;epsilon&quot;</span>);</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160; desc.<a class="code" href="structarmnn_1_1_batch_normalization_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = dataFormat == <span class="stringliteral">&quot;NHWC&quot;</span> ? DataLayout::NHWC : DataLayout::NCHW;</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160; <span class="comment">// Data for the parsed tensor args (scale, offset, mean, variance) must be stored</span></div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160; <span class="comment">// locally until the layer is added.</span></div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; std::vector&lt;float&gt; scaleTensorData;</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160; <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> scaleTensor = scaleNode-&gt;GetConstTensor(scaleTensorData);</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160; std::vector&lt;float&gt; offsetTensorData;</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160; <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> offsetTensor = offsetNode-&gt;GetConstTensor(offsetTensorData);</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160; std::vector&lt;float&gt; meanTensorData;</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160; <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> meanTensor = meanNode-&gt;GetConstTensor(meanTensorData);</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160; std::vector&lt;float&gt; varianceTensorData;</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160; <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> varianceTensor = varianceNode-&gt;GetConstTensor(varianceTensorData);</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddBatchNormalizationLayer(desc,</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160; meanTensor,</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160; varianceTensor,</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160; offsetTensor,</div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; scaleTensor,</div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160; nodeDef.name().c_str());</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; inputSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160; inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="structarmnn_1_1_batch_normalization_descriptor_xhtml_a11c821c7524251004a72ed13c510853c"><div class="ttname"><a href="structarmnn_1_1_batch_normalization_descriptor.xhtml#a11c821c7524251004a72ed13c510853c">armnn::BatchNormalizationDescriptor::m_Eps</a></div><div class="ttdeci">float m_Eps</div><div class="ttdoc">Value to add to the variance. Used to avoid dividing by zero. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00639">Descriptors.hpp:639</a></div></div>
+<div class="ttc" id="structarmnn_1_1_batch_normalization_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_batch_normalization_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::BatchNormalizationDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00641">Descriptors.hpp:641</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00314">Tensor.hpp:314</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="_tf_parser_8cpp_xhtml_a3fb047570644cae325aa88d3cd7bb96e"><div class="ttname"><a href="_tf_parser_8cpp.xhtml#a3fb047570644cae325aa88d3cd7bb96e">CHECK_DATA_FORMAT</a></div><div class="ttdeci">#define CHECK_DATA_FORMAT(NODE_DEF, FORMAT, NODE_TYPE)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00356">TfParser.cpp:356</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_batch_normalization_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_batch_normalization_descriptor.xhtml">armnn::BatchNormalizationDescriptor</a></div><div class="ttdoc">A BatchNormalizationDescriptor for the BatchNormalizationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00626">Descriptors.hpp:626</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a9ffcd919d2466d7aa5d2325ee77c322d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9ffcd919d2466d7aa5d2325ee77c322d">&#9670;&nbsp;</a></span>ParseGather()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseGather </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01894">1894</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00194">TensorInfo::GetDataType()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00758">GatherDescriptor::m_Axis</a>, and <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>.</p>
+<div class="fragment"><div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>&#160;{</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; params = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; indices = inputs[1].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[1].m_Index);</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160; <a class="code" href="structarmnn_1_1_gather_descriptor.xhtml">GatherDescriptor</a> descriptor;</div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160; descriptor.<a class="code" href="structarmnn_1_1_gather_descriptor.xhtml#a35d11c7d509d1adbae1ae01c58394a7f">m_Axis</a> = ReadMandatoryNodeInt32Attribute(nodeDef, <span class="stringliteral">&quot;axis&quot;</span>);</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160; <span class="comment">// Infer shape of output tensor</span></div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paramsDim = params.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indicesDim = indices.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputDim = paramsDim - 1 + indicesDim;</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160;</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160; std::vector&lt;unsigned int&gt; dimSizes;</div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; indicesDim; ++i)</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160; {</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160; dimSizes.push_back(indices.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i]);</div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160; }</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i &lt; paramsDim; ++i)</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160; {</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160; dimSizes.push_back(params.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i]);</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160; }</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; inferredShape = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(outputDim, dimSizes.data());</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inferredOutputInfo(inferredShape, params.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>());</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddGatherLayer(descriptor, nodeDef.name().c_str());</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; layer-&gt;GetOutputSlot(0).SetTensorInfo(inferredOutputInfo);</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160; params.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;GetInputSlot(0));</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160; indices.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;GetInputSlot(1));</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_aea909c7327109228ef618d459015def3"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">armnn::TensorInfo::GetDataType</a></div><div class="ttdeci">DataType GetDataType() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00194">Tensor.hpp:194</a></div></div>
+<div class="ttc" id="structarmnn_1_1_gather_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_gather_descriptor.xhtml">armnn::GatherDescriptor</a></div><div class="ttdoc">A GatherDescriptor for the GatherLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00742">Descriptors.hpp:742</a></div></div>
+<div class="ttc" id="structarmnn_1_1_gather_descriptor_xhtml_a35d11c7d509d1adbae1ae01c58394a7f"><div class="ttname"><a href="structarmnn_1_1_gather_descriptor.xhtml#a35d11c7d509d1adbae1ae01c58394a7f">armnn::GatherDescriptor::m_Axis</a></div><div class="ttdeci">int32_t m_Axis</div><div class="ttdoc">The axis in params to gather indices from. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00758">Descriptors.hpp:758</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a3e11b85d3302eb25275a1389647d0f41"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3e11b85d3302eb25275a1389647d0f41">&#9670;&nbsp;</a></span>ParseGreater()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseGreater </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01933">1933</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01841">ITfParser::TfParserImpl::ProcessComparisonLayer()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l01807">ITfParser::TfParserImpl::ProcessElementwiseInputSlots()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;{</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; std::pair&lt;armnn::IOutputSlot*, armnn::IOutputSlot*&gt; inputLayers = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a0562881f75a2083315f1a1660686812b">ProcessElementwiseInputSlots</a>(nodeDef, <span class="stringliteral">&quot;Greater&quot;</span>);</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input0Slot = inputLayers.first;</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input1Slot = inputLayers.second;</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;</div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160; <a class="code" href="structarmnn_1_1_comparison_descriptor.xhtml">ComparisonDescriptor</a> descriptor(ComparisonOperation::Greater);</div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddComparisonLayer(descriptor, nodeDef.name().c_str());</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160;</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a4ceb262ac0351dcf1aa9f7e1dc298489">ProcessComparisonLayer</a>(input0Slot, input1Slot, layer, nodeDef);</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="structarmnn_1_1_comparison_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_comparison_descriptor.xhtml">armnn::ComparisonDescriptor</a></div><div class="ttdoc">A ComparisonDescriptor for the ComparisonLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00078">Descriptors.hpp:78</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a0562881f75a2083315f1a1660686812b"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a0562881f75a2083315f1a1660686812b">armnnTfParser::ITfParser::TfParserImpl::ProcessElementwiseInputSlots</a></div><div class="ttdeci">std::pair&lt; armnn::IOutputSlot *, armnn::IOutputSlot * &gt; ProcessElementwiseInputSlots(const tensorflow::NodeDef &amp;nodeDef, const std::string &amp;layerName)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l01807">TfParser.cpp:1807</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a4ceb262ac0351dcf1aa9f7e1dc298489"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a4ceb262ac0351dcf1aa9f7e1dc298489">armnnTfParser::ITfParser::TfParserImpl::ProcessComparisonLayer</a></div><div class="ttdeci">ParsedTfOperationPtr ProcessComparisonLayer(armnn::IOutputSlot *input0Slot, armnn::IOutputSlot *input1Slot, armnn::IConnectableLayer *const layer, const tensorflow::NodeDef &amp;nodeDef)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l01841">TfParser.cpp:1841</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="afd47848ab22a0d11cb330f25d7ba3235"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afd47848ab22a0d11cb330f25d7ba3235">&#9670;&nbsp;</a></span>ParseIdentity()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseIdentity </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l00891">891</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_i_tf_parser_8hpp_source.xhtml#l00063">ITfParser::DeferredSingleLayerParsedTfOperation</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00192">TensorInfo::GetNumElements()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, and <a class="el" href="_i_tf_parser_8hpp_source.xhtml#l00058">ITfParser::ParsedConstTfOperation</a>.</p>
+<div class="fragment"><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;{</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 1);</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <span class="comment">// Any requests for the output slots of this node should be forwarded to the node connected as input.</span></div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;ParsedIdentityTfOperation&gt;(<span class="keyword">this</span>, nodeDef, inputs[0].m_IndexedValue);</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2cf6fe0b66ca31d917279ae5d0be39b5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2cf6fe0b66ca31d917279ae5d0be39b5">&#9670;&nbsp;</a></span>ParseLrn()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseLrn </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02578">2578</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_i_tf_parser_8hpp_source.xhtml#l00063">ITfParser::DeferredSingleLayerParsedTfOperation</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00597">NormalizationDescriptor::m_Alpha</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00599">NormalizationDescriptor::m_Beta</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00603">NormalizationDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00601">NormalizationDescriptor::m_K</a>, <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00243">m_Layer</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00591">NormalizationDescriptor::m_NormChannelType</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00593">NormalizationDescriptor::m_NormMethodType</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00595">NormalizationDescriptor::m_NormSize</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::NHWC</a>, <a class="el" href="_i_tf_parser_8hpp_source.xhtml#l00059">ITfParser::ParsedMatMulTfOperation</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160;{</div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 1);</div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160;</div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160; <a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml">NormalizationDescriptor</a> normalizationDescriptor;</div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160; normalizationDescriptor.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#a05945f080edf694b631960728b87aadb">m_NormMethodType</a> = NormalizationAlgorithmMethod::LocalBrightness;</div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160; normalizationDescriptor.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#afe1f0f09d49ad2befc01f8789187b7dd">m_NormChannelType</a> = NormalizationAlgorithmChannel::Across;</div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160; normalizationDescriptor.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#a174279be57d7596eeb04c6b7f7510f99">m_Alpha</a> = ReadMandatoryNodeFloatAttribute(nodeDef, <span class="stringliteral">&quot;alpha&quot;</span>);</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160; normalizationDescriptor.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#a8275d51ef9a584feb95726ea0522f6e5">m_Beta</a> = ReadMandatoryNodeFloatAttribute(nodeDef, <span class="stringliteral">&quot;beta&quot;</span>);</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160; normalizationDescriptor.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#a8526ea7cf860d8e7f8340e9f9354f9f0">m_K</a> = ReadMandatoryNodeFloatAttribute(nodeDef, <span class="stringliteral">&quot;bias&quot;</span>);</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160; normalizationDescriptor.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#aa70c05f1aad12fbd9d9ec43ea4557b03">m_NormSize</a> = ReadMandatoryNodeUint32Attribute(nodeDef, <span class="stringliteral">&quot;depth_radius&quot;</span>);</div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160; normalizationDescriptor.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160;</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160; <span class="comment">// The window size must be an odd value. For a window size of (2 * n + 1), TensorFlow defines depth_radius = n.</span></div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160; normalizationDescriptor.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#aa70c05f1aad12fbd9d9ec43ea4557b03">m_NormSize</a> = normalizationDescriptor.<a class="code" href="structarmnn_1_1_normalization_descriptor.xhtml#aa70c05f1aad12fbd9d9ec43ea4557b03">m_NormSize</a> * 2 + 1;</div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160;</div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; prevLayerOutputSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddNormalizationLayer(normalizationDescriptor,</div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160; nodeDef.name().c_str());</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160; prevLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(prevLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160;</div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_a8526ea7cf860d8e7f8340e9f9354f9f0"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#a8526ea7cf860d8e7f8340e9f9354f9f0">armnn::NormalizationDescriptor::m_K</a></div><div class="ttdeci">float m_K</div><div class="ttdoc">Kappa value used for the across channel normalization equation. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00601">Descriptors.hpp:601</a></div></div>
+<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_a174279be57d7596eeb04c6b7f7510f99"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#a174279be57d7596eeb04c6b7f7510f99">armnn::NormalizationDescriptor::m_Alpha</a></div><div class="ttdeci">float m_Alpha</div><div class="ttdoc">Alpha value for the normalization equation. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00597">Descriptors.hpp:597</a></div></div>
+<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::NormalizationDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00603">Descriptors.hpp:603</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_a05945f080edf694b631960728b87aadb"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#a05945f080edf694b631960728b87aadb">armnn::NormalizationDescriptor::m_NormMethodType</a></div><div class="ttdeci">NormalizationAlgorithmMethod m_NormMethodType</div><div class="ttdoc">Normalization method algorithm to use (LocalBrightness, LocalContrast). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00593">Descriptors.hpp:593</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_afe1f0f09d49ad2befc01f8789187b7dd"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#afe1f0f09d49ad2befc01f8789187b7dd">armnn::NormalizationDescriptor::m_NormChannelType</a></div><div class="ttdeci">NormalizationAlgorithmChannel m_NormChannelType</div><div class="ttdoc">Normalization channel algorithm to use (Across, Within). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00591">Descriptors.hpp:591</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml">armnn::NormalizationDescriptor</a></div><div class="ttdoc">A NormalizationDescriptor for the NormalizationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00567">Descriptors.hpp:567</a></div></div>
+<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_a8275d51ef9a584feb95726ea0522f6e5"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#a8275d51ef9a584feb95726ea0522f6e5">armnn::NormalizationDescriptor::m_Beta</a></div><div class="ttdeci">float m_Beta</div><div class="ttdoc">Beta value for the normalization equation. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00599">Descriptors.hpp:599</a></div></div>
+<div class="ttc" id="structarmnn_1_1_normalization_descriptor_xhtml_aa70c05f1aad12fbd9d9ec43ea4557b03"><div class="ttname"><a href="structarmnn_1_1_normalization_descriptor.xhtml#aa70c05f1aad12fbd9d9ec43ea4557b03">armnn::NormalizationDescriptor::m_NormSize</a></div><div class="ttdeci">uint32_t m_NormSize</div><div class="ttdoc">Depth radius value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00595">Descriptors.hpp:595</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="af71fa342538ad7280ff4f9b132bdb71a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af71fa342538ad7280ff4f9b132bdb71a">&#9670;&nbsp;</a></span>ParseMatMul()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseMatMul </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02625">2625</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160;{</div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160;</div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160; <span class="comment">// Defers the creation of the layer (see ParsedMatMulTfOperation).</span></div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;ParsedMatMulTfOperation&gt;(<span class="keyword">this</span>, nodeDef);</div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="acb94c45784c439b75dcf858655a6d330"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acb94c45784c439b75dcf858655a6d330">&#9670;&nbsp;</a></span>ParseMaximum()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseMaximum </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01759">1759</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l03236">ITfParser::TfParserImpl::AddMaximumLayer()</a>, <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01709">ITfParser::TfParserImpl::IsSupportedLeakyReluPattern()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;{</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160; <span class="keywordflow">if</span> (inputs.size() != 2)</div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160; {</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160; fmt::format(<span class="stringliteral">&quot;Maximum expects two inputs!. Got {} for Node {} {}&quot;</span>,</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160; inputs.size(),</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160; }</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160; <span class="keyword">auto</span> inputNode0 = inputs[0].m_IndexedValue-&gt;GetNode();</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160; <span class="keyword">auto</span> inputNode1 = inputs[1].m_IndexedValue-&gt;GetNode();</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* outputOfLeakyRelu = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160; <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> desc;</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160; <span class="comment">// A max node may be part of a LeakyRelu, with one input as a multiplication with a scalar constant,</span></div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160; <span class="comment">// i.e. one of the four possible scenarios:</span></div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160; <span class="comment">// 1, max(mul(a, x), x)</span></div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160; <span class="comment">// 2, max(mul(x, a), x)</span></div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; <span class="comment">// 3, max(x, mul(a, x))</span></div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160; <span class="comment">// 4, max(x, mul(x, a))</span></div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160; <span class="comment">// These are handled by an activation layer.</span></div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a3296cce0af78204d897a746643987f07">IsSupportedLeakyReluPattern</a>(inputNode0, 0, inputs[1], &amp;outputOfLeakyRelu, desc) ||</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a3296cce0af78204d897a746643987f07">IsSupportedLeakyReluPattern</a>(inputNode0, 1, inputs[1], &amp;outputOfLeakyRelu, desc) ||</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a3296cce0af78204d897a746643987f07">IsSupportedLeakyReluPattern</a>(inputNode1, 0, inputs[0], &amp;outputOfLeakyRelu, desc) ||</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a3296cce0af78204d897a746643987f07">IsSupportedLeakyReluPattern</a>(inputNode1, 1, inputs[0], &amp;outputOfLeakyRelu, desc))</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160; {</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(outputOfLeakyRelu != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddActivationLayer(desc, nodeDef.name().c_str());</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160; outputOfLeakyRelu-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputOfLeakyRelu-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160; }</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160; {</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160; <span class="comment">// Anything else is just a maximum layer.</span></div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160;</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae3a610533ecb2a9a87fb47785f7fb712">AddMaximumLayer</a>(nodeDef);</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160; }</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a3296cce0af78204d897a746643987f07"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a3296cce0af78204d897a746643987f07">armnnTfParser::ITfParser::TfParserImpl::IsSupportedLeakyReluPattern</a></div><div class="ttdeci">bool IsSupportedLeakyReluPattern(const tensorflow::NodeDef &amp;mulNodeDef, size_t alphaLayerIndex, const OutputOfParsedTfOperation &amp;otherOp, armnn::IOutputSlot **outputOfLeakyRelu, armnn::ActivationDescriptor &amp;desc)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l01709">TfParser.cpp:1709</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml">armnn::ActivationDescriptor</a></div><div class="ttdoc">An ActivationDescriptor for the ActivationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00025">Descriptors.hpp:25</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae3a610533ecb2a9a87fb47785f7fb712"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae3a610533ecb2a9a87fb47785f7fb712">armnnTfParser::ITfParser::TfParserImpl::AddMaximumLayer</a></div><div class="ttdeci">ParsedTfOperationPtr AddMaximumLayer(const tensorflow::NodeDef &amp;nodeDef)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03236">TfParser.cpp:3236</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4cb0ff36b50bf417cfde094f34ec8e04"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4cb0ff36b50bf417cfde094f34ec8e04">&#9670;&nbsp;</a></span>ParseMaxPool()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseMaxPool </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02997">2997</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l03009">ITfParser::TfParserImpl::ParsePooling2d()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160;{</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a31983c2de0331de6b32bf08c0d04cb0c">ParsePooling2d</a>(nodeDef, graphDef, PoolingAlgorithm::Max);</div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a31983c2de0331de6b32bf08c0d04cb0c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a31983c2de0331de6b32bf08c0d04cb0c">armnnTfParser::ITfParser::TfParserImpl::ParsePooling2d</a></div><div class="ttdeci">ParsedTfOperationPtr ParsePooling2d(const tensorflow::NodeDef &amp;nodeDef, const tensorflow::GraphDef &amp;graphDef, armnn::PoolingAlgorithm pooltype)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03009">TfParser.cpp:3009</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a74351720e73ac419536a6a527b4b46fa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a74351720e73ac419536a6a527b4b46fa">&#9670;&nbsp;</a></span>ParseMean()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseMean </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02634">2634</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_parser_helper_8cpp_source.xhtml#l00052">armnnUtils::CalculateReducedOutputTensoInfo()</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_i_tf_parser_8hpp_source.xhtml#l00063">ITfParser::DeferredSingleLayerParsedTfOperation</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00969">MeanDescriptor::m_Axis</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00971">MeanDescriptor::m_KeepDims</a>, <a class="el" href="_subgraph_view_selector_8cpp_source.xhtml#l00243">m_Layer</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_i_tf_parser_8hpp_source.xhtml#l00060">ITfParser::ParsedMulTfOperation</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160;{</div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; inputSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160;</div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160; <span class="keywordflow">if</span> (inputs.size() != 2)</div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160; {</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160; fmt::format(<span class="stringliteral">&quot;Mean expects two inputs!. Got {} for Node {} {}&quot;</span>,</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160; inputs.size(),</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160; nodeDef.name(),</div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160; }</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160;</div><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160; <span class="keywordtype">bool</span> keepDims = ReadMandatoryNodeBoolAttribute(nodeDef, <span class="stringliteral">&quot;keep_dims&quot;</span>);</div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160;</div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160; ParsedConstTfOperation&lt;int32_t&gt;* axisNode =</div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;int32_t&gt;*&gt;(inputs[1].m_IndexedValue);</div><div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>&#160;</div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; axisTensorInfo = axisNode-&gt;GetTensorInfo();</div><div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>&#160;</div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160; <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> axisTensor(axisTensorInfo, axisNode-&gt;GetStorage());</div><div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span>* axisData = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">int</span>*<span class="keyword">&gt;</span>(axisTensor.GetMemoryArea());</div><div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>&#160;</div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo;</div><div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160; <a class="code" href="structarmnn_1_1_mean_descriptor.xhtml">MeanDescriptor</a> meanDescriptor;</div><div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160; meanDescriptor.<a class="code" href="structarmnn_1_1_mean_descriptor.xhtml#a28e0548abfc4e79c48f29a3d11a062e9">m_KeepDims</a> = keepDims;</div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160;</div><div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>&#160; <span class="comment">// Negative axis values are supported so that the process requires</span></div><div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>&#160; <span class="comment">// to convert them into the corresponding positive ones.</span></div><div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>&#160; <span class="comment">// Duplicate values are also removed.</span></div><div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>&#160; std::vector&lt;int&gt; rawAxisVector(axisData, axisData + axisTensorInfo.GetNumElements());</div><div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>&#160; std::set&lt;unsigned int&gt; positiveAxisSet;</div><div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>&#160; <span class="keywordtype">int</span> rank = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>());</div><div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>&#160;</div><div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160; std::transform(rawAxisVector.begin(), rawAxisVector.end(),</div><div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>&#160; std::inserter(positiveAxisSet, positiveAxisSet.begin()),</div><div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160; [rank](<span class="keywordtype">int</span> i) -&gt; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> { <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>((i + rank) % rank); });</div><div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160;</div><div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>&#160; <a class="code" href="namespacearmnn_utils.xhtml#aac34adc5b96d744ae53eac580213f855">CalculateReducedOutputTensoInfo</a>(inputTensorInfo, positiveAxisSet, keepDims, outputTensorInfo);</div><div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160;</div><div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160; <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt; positiveAxisSet.size())</div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160; {</div><div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>&#160; meanDescriptor.<a class="code" href="structarmnn_1_1_mean_descriptor.xhtml#a1f0d67b087c491248bd1cde3ff995a95">m_Axis</a>.assign(positiveAxisSet.begin(), positiveAxisSet.end());</div><div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>&#160; }</div><div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160;</div><div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddMeanLayer(meanDescriptor, nodeDef.name().c_str());</div><div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160; inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160;</div><div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_aac34adc5b96d744ae53eac580213f855"><div class="ttname"><a href="namespacearmnn_utils.xhtml#aac34adc5b96d744ae53eac580213f855">armnnUtils::CalculateReducedOutputTensoInfo</a></div><div class="ttdeci">void CalculateReducedOutputTensoInfo(const armnn::TensorInfo &amp;inputTensorInfo, const std::set&lt; unsigned int &gt; &amp;axisSet, bool keepDims, armnn::TensorInfo &amp;outputTensorInfo)</div><div class="ttdoc">Creates a tensor info after reducing the dimensions mentioned in axisData. </div><div class="ttdef"><b>Definition:</b> <a href="_parser_helper_8cpp_source.xhtml#l00052">ParserHelper.cpp:52</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_mean_descriptor_xhtml_a1f0d67b087c491248bd1cde3ff995a95"><div class="ttname"><a href="structarmnn_1_1_mean_descriptor.xhtml#a1f0d67b087c491248bd1cde3ff995a95">armnn::MeanDescriptor::m_Axis</a></div><div class="ttdeci">std::vector&lt; unsigned int &gt; m_Axis</div><div class="ttdoc">Values for the dimensions to reduce. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00969">Descriptors.hpp:969</a></div></div>
+<div class="ttc" id="structarmnn_1_1_mean_descriptor_xhtml_a28e0548abfc4e79c48f29a3d11a062e9"><div class="ttname"><a href="structarmnn_1_1_mean_descriptor.xhtml#a28e0548abfc4e79c48f29a3d11a062e9">armnn::MeanDescriptor::m_KeepDims</a></div><div class="ttdeci">bool m_KeepDims</div><div class="ttdoc">Enable/disable keep dimensions. If true, then the reduced dimensions that are of length 1 are kept...</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00971">Descriptors.hpp:971</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00314">Tensor.hpp:314</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="structarmnn_1_1_mean_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_mean_descriptor.xhtml">armnn::MeanDescriptor</a></div><div class="ttdoc">A MeanDescriptor for the MeanLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00951">Descriptors.hpp:951</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5b86d12475da84cedb4632a47bb68b1e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b86d12475da84cedb4632a47bb68b1e">&#9670;&nbsp;</a></span>ParseMinimum()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseMinimum </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01961">1961</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01807">ITfParser::TfParserImpl::ProcessElementwiseInputSlots()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l01868">ITfParser::TfParserImpl::ProcessElementwiseLayer()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;{</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160; std::pair&lt;armnn::IOutputSlot*, armnn::IOutputSlot*&gt; inputLayers = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a0562881f75a2083315f1a1660686812b">ProcessElementwiseInputSlots</a>(nodeDef, <span class="stringliteral">&quot;Minimum&quot;</span>);</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input0Slot = inputLayers.first;</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input1Slot = inputLayers.second;</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddMinimumLayer(nodeDef.name().c_str());</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a0d5cf4cdeeb79d5e4fed01981d734b50">ProcessElementwiseLayer</a>(input0Slot, input1Slot, layer, nodeDef);</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a0562881f75a2083315f1a1660686812b"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a0562881f75a2083315f1a1660686812b">armnnTfParser::ITfParser::TfParserImpl::ProcessElementwiseInputSlots</a></div><div class="ttdeci">std::pair&lt; armnn::IOutputSlot *, armnn::IOutputSlot * &gt; ProcessElementwiseInputSlots(const tensorflow::NodeDef &amp;nodeDef, const std::string &amp;layerName)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l01807">TfParser.cpp:1807</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a0d5cf4cdeeb79d5e4fed01981d734b50"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a0d5cf4cdeeb79d5e4fed01981d734b50">armnnTfParser::ITfParser::TfParserImpl::ProcessElementwiseLayer</a></div><div class="ttdeci">ParsedTfOperationPtr ProcessElementwiseLayer(armnn::IOutputSlot *input0Slot, armnn::IOutputSlot *input1Slot, armnn::IConnectableLayer *const layer, const tensorflow::NodeDef &amp;nodeDef)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l01868">TfParser.cpp:1868</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5f4ea9601ffef3d1549614e959d967d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f4ea9601ffef3d1549614e959d967d4">&#9670;&nbsp;</a></span>ParseMul()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseMul </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02710">2710</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160;{</div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160;</div><div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;ParsedMulTfOperation&gt;(<span class="keyword">this</span>, nodeDef);</div><div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2a41fc15eebc9b7bb3404d1a2634639c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2a41fc15eebc9b7bb3404d1a2634639c">&#9670;&nbsp;</a></span>ParsePad()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParsePad </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02195">2195</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l02176">armnnTfParser::CalculatePaddedOutputTensorInfo()</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02147">armnnTfParser::CheckPaddingTensor()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160;{</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160; <span class="comment">// input consists of:</span></div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160; <span class="comment">// input[0] the tensor which will be padded</span></div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160; <span class="comment">// input[1] the tensor holding the padding values</span></div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; previousLayerOutputSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = previousLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160; <span class="keywordflow">if</span> (!HasParsedConstTensor&lt;int32_t&gt;(inputs[1].m_IndexedValue))</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160; {</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports Pad with constant padding. &quot;</span></div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160; <span class="stringliteral">&quot;Input {}. Node {} {}&quot;</span>,</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; inputs[1].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160; nodeDef.name(),</div><div class="line"><a name="l02212"></a><span class="lineno"> 2212</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160;</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160; }</div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160; ParsedConstTfOperation&lt;int32_t&gt;* paddingTensorOp =</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;int32_t&gt;*&gt;(inputs[1].m_IndexedValue);</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;</div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160; std::vector&lt;int32_t&gt; paddingTensorData;</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160; <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> paddingTensor = paddingTensorOp-&gt;GetConstTensor(paddingTensorData);</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160; <span class="comment">// paddings is an integer tensor with shape [n, 2], where n is the rank of tensor</span></div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160; <span class="comment">// and should match the rank of the input tensor that is being padded.</span></div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160; <span class="comment">// For each dimension D of input, paddings[D, 0] indicates how many values to add</span></div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160; <span class="comment">// before the contents of tensor in that dimension, and paddings[D, 1] indicates how</span></div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160; <span class="comment">// many values to add after the contents of tensor in that dimension</span></div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160; <span class="comment">// This needs to be translated into a padList for ACL</span></div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160; std::vector&lt;std::pair&lt;unsigned int, unsigned int&gt;&gt; padList;</div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rank = <a class="code" href="namespacearmnn_tf_parser.xhtml#ae5488f1478c62281c5e937e79ebcd145">CheckPaddingTensor</a>(paddingTensor, inputTensorInfo, nodeDef.name());</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; rank; ++i)</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160; {</div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160; std::pair&lt;unsigned int, unsigned int&gt; paddingForDim;</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; 2; j++)</div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160; {</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = (i * 2) + j;</div><div class="line"><a name="l02234"></a><span class="lineno"> 2234</span>&#160; <span class="keywordtype">int</span> paddingAmount = paddingTensorData[index];</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160; <span class="comment">// make sure we can cast to an unsigned value</span></div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160; <span class="keywordflow">if</span> (paddingAmount &lt; 0)</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160; {</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160; fmt::format(<span class="stringliteral">&quot;Negative amount {} specified at [{}, {}] of padding tensor on Node {} {}.&quot;</span>,</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160; paddingAmount,</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160; i,</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160; j,</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160; nodeDef.name(),</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160; }</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160; <span class="keywordflow">if</span> (j == 0)</div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160; {</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160; paddingForDim.first = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(paddingAmount);</div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160; }</div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160; {</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160; paddingForDim.second = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(paddingAmount);</div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160; }</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160; }</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160; padList.push_back(paddingForDim);</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160; }</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160; <a class="code" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> padDescriptor(padList);</div><div class="line"><a name="l02258"></a><span class="lineno"> 2258</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddPadLayer(padDescriptor, nodeDef.name().c_str());</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160; previousLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160; <span class="comment">// Use the padding to calculate the new output tensor shape</span></div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = <a class="code" href="namespacearmnn_tf_parser.xhtml#a9c18860db8b032de579c5ad94cbae5d0">CalculatePaddedOutputTensorInfo</a>(inputTensorInfo, padList);</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="namespacearmnn_tf_parser_xhtml_ae5488f1478c62281c5e937e79ebcd145"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#ae5488f1478c62281c5e937e79ebcd145">armnnTfParser::CheckPaddingTensor</a></div><div class="ttdeci">unsigned int CheckPaddingTensor(const ConstTensor &amp;paddingTensor, const TensorInfo &amp;inputTensorInfo, const std::string &amp;nodeName)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l02147">TfParser.cpp:2147</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_pad_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_pad_descriptor.xhtml">armnn::PadDescriptor</a></div><div class="ttdoc">A PadDescriptor for the PadLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00975">Descriptors.hpp:975</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00314">Tensor.hpp:314</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="namespacearmnn_tf_parser_xhtml_a9c18860db8b032de579c5ad94cbae5d0"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#a9c18860db8b032de579c5ad94cbae5d0">armnnTfParser::CalculatePaddedOutputTensorInfo</a></div><div class="ttdeci">TensorInfo CalculatePaddedOutputTensorInfo(const TensorInfo &amp;inputTensorInfo, const std::vector&lt; std::pair&lt; unsigned int, unsigned int &gt;&gt; &amp;padList)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l02176">TfParser.cpp:2176</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a46587dd82842638c50848021c57b6fad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a46587dd82842638c50848021c57b6fad">&#9670;&nbsp;</a></span>ParsePlaceholder()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParsePlaceholder </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02718">2718</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00261">ITfParser::TfParserImpl::m_InputShapes</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00270">ITfParser::TfParserImpl::m_NetworkInputsBindingInfo</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">armnn::numeric_cast()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03704">ITfParser::TfParserImpl::TrackInputBinding()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>&#160;{</div><div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160;</div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 0);</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160;</div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a> layerId = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<a class="code" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">LayerBindingId</a>&gt;(<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac62e2558c14e01605f2b4e1e21cdd1e8">m_NetworkInputsBindingInfo</a>.size());</div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160;</div><div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160; <span class="keyword">auto</span> it = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a76ea67f3f7d1d5835c5a92b65dc0854c">m_InputShapes</a>.find(nodeDef.name());</div><div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>&#160; <span class="keywordflow">if</span> (it == <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a76ea67f3f7d1d5835c5a92b65dc0854c">m_InputShapes</a>.end())</div><div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>&#160; {</div><div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160; fmt::format(<span class="stringliteral">&quot;Missing input shape for Placeholder &#39;{}&#39; {}&quot;</span>,</div><div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>&#160; nodeDef.name(),</div><div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>&#160; }</div><div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> tensorInfo(it-&gt;second, DataType::Float32);</div><div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160;</div><div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddInputLayer(layerId, nodeDef.name().c_str());</div><div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160;</div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(tensorInfo);</div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160;</div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160; <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2a1112c66d08e3760ecccf39c7854a90">TrackInputBinding</a>(layer, layerId, tensorInfo);</div><div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160;</div><div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a76ea67f3f7d1d5835c5a92b65dc0854c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a76ea67f3f7d1d5835c5a92b65dc0854c">armnnTfParser::ITfParser::TfParserImpl::m_InputShapes</a></div><div class="ttdeci">std::map&lt; std::string, armnn::TensorShape &gt; m_InputShapes</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00261">TfParser.hpp:261</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2a1112c66d08e3760ecccf39c7854a90"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2a1112c66d08e3760ecccf39c7854a90">armnnTfParser::ITfParser::TfParserImpl::TrackInputBinding</a></div><div class="ttdeci">void TrackInputBinding(armnn::IConnectableLayer *layer, armnn::LayerBindingId id, const armnn::TensorInfo &amp;tensorInfo)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03704">TfParser.cpp:3704</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ab8cf8f9fb6792e654c2d8d8382f6f01b"><div class="ttname"><a href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a></div><div class="ttdeci">int LayerBindingId</div><div class="ttdoc">Type of identifiers for bindable layers (inputs, outputs). </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00210">Types.hpp:210</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ac62e2558c14e01605f2b4e1e21cdd1e8"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac62e2558c14e01605f2b4e1e21cdd1e8">armnnTfParser::ITfParser::TfParserImpl::m_NetworkInputsBindingInfo</a></div><div class="ttdeci">std::unordered_map&lt; std::string, BindingPointInfo &gt; m_NetworkInputsBindingInfo</div><div class="ttdoc">Maps input layer names to their corresponding ids and tensor info. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00270">TfParser.hpp:270</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a31983c2de0331de6b32bf08c0d04cb0c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31983c2de0331de6b32bf08c0d04cb0c">&#9670;&nbsp;</a></span>ParsePooling2d()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParsePooling2d </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718">armnn::PoolingAlgorithm</a>&#160;</td>
+ <td class="paramname"><em>pooltype</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03009">3009</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l00429">armnnTfParser::CalcPadding()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00356">CHECK_DATA_FORMAT</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00368">CHECK_PADDING_TYPE</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00024">DataLayoutIndexed::GetHeightIndex()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_data_layout_indexed_8hpp_source.xhtml#l00025">DataLayoutIndexed::GetWidthIndex()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00385">Pooling2dDescriptor::m_DataLayout</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00381">Pooling2dDescriptor::m_OutputShapeRounding</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00371">Pooling2dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00383">Pooling2dDescriptor::m_PaddingMethod</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00365">Pooling2dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00367">Pooling2dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00369">Pooling2dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00375">Pooling2dDescriptor::m_PoolHeight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00363">Pooling2dDescriptor::m_PoolType</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00373">Pooling2dDescriptor::m_PoolWidth</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00377">Pooling2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00379">Pooling2dDescriptor::m_StrideY</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03003">ITfParser::TfParserImpl::ParseAvgPool()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l02997">ITfParser::TfParserImpl::ParseMaxPool()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160;{</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160;</div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 1);</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; inputSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160;</div><div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>&#160; <span class="keywordflow">if</span> (inputs.size() != 1)</div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160; {</div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160; fmt::format(<span class="stringliteral">&quot;2D Pooling expects one input!. Got {} for Node {} {}&quot;</span>,</div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160; inputs.size(),</div><div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>&#160; nodeDef.name(),</div><div class="line"><a name="l03024"></a><span class="lineno"> 3024</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160; }</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160;</div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160; std::string paddingString = ReadMandatoryNodeStringAttribute(nodeDef, <span class="stringliteral">&quot;padding&quot;</span>);</div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160; std::string dataFormat = ReadMandatoryNodeStringAttribute(nodeDef, <span class="stringliteral">&quot;data_format&quot;</span>);</div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160; std::vector&lt;uint32_t&gt; strides = ReadMandatoryNodeUint32ListAttribute(nodeDef, <span class="stringliteral">&quot;strides&quot;</span>);</div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160; std::vector&lt;uint32_t&gt; ksize = ReadMandatoryNodeUint32ListAttribute(nodeDef, <span class="stringliteral">&quot;ksize&quot;</span>); <span class="comment">// size of pool windows</span></div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160;</div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160; <a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> pooling2dDescriptor;</div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160; pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a> = pooltype;</div><div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160; pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> = PaddingMethod::Exclude;</div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160; pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#affb5b68b3eba3ed45a06c7cde7781962">m_OutputShapeRounding</a> = OutputShapeRounding::Floor;</div><div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>&#160;</div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160; <a class="code" href="_tf_parser_8cpp.xhtml#a3fb047570644cae325aa88d3cd7bb96e">CHECK_DATA_FORMAT</a>(nodeDef, dataFormat, <span class="stringliteral">&quot;Pooling2D&quot;</span>);</div><div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160; <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">DataLayout</a> dataLayout = dataFormat == <span class="stringliteral">&quot;NHWC&quot;</span> ? DataLayout::NHWC : DataLayout::NCHW;</div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160; pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = dataLayout;</div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160; <a class="code" href="classarmnn_utils_1_1_data_layout_indexed.xhtml">DataLayoutIndexed</a> dataLayoutIndexed(dataLayout);</div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160;</div><div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>&#160; pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a> = strides[dataLayoutIndexed.GetWidthIndex()];</div><div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>&#160; pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a> = strides[dataLayoutIndexed.GetHeightIndex()];</div><div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160; pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a> = ksize[dataLayoutIndexed.GetWidthIndex()];</div><div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>&#160; pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a> = ksize[dataLayoutIndexed.GetHeightIndex()];</div><div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>&#160;</div><div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>&#160; uint32_t inputHeight = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayoutIndexed.GetHeightIndex()];</div><div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>&#160; uint32_t inputWidth = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[dataLayoutIndexed.GetWidthIndex()];</div><div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>&#160;</div><div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160; <span class="keywordtype">bool</span> padding = <span class="keyword">false</span>;</div><div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo;</div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputHeight = 0;</div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputWidth = 0;</div><div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>&#160;</div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160; <a class="code" href="_tf_parser_8cpp.xhtml#aab838eb7734e531bb5be6f6dece673bf">CHECK_PADDING_TYPE</a>(nodeDef, paddingString);</div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160;</div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160; <span class="keywordflow">if</span> (paddingString == <span class="stringliteral">&quot;SAME&quot;</span>)</div><div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160; {</div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160; padding = <span class="keyword">true</span>;</div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160;</div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160; outputHeight = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(ceil(static_cast&lt;float&gt;(inputHeight) /</div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160; static_cast&lt;float&gt;(pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>)));</div><div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160; outputWidth = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(ceil(static_cast&lt;float&gt;(inputWidth) /</div><div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160; static_cast&lt;float&gt;(pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>)));</div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160; }</div><div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (paddingString == <span class="stringliteral">&quot;VALID&quot;</span>)</div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160; {</div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160; padding = <span class="keyword">false</span>;</div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160;</div><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160; outputHeight = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(ceil(</div><div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>&#160; static_cast&lt;float&gt;(inputHeight - pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a> + 1) /</div><div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160; static_cast&lt;float&gt;(pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>)));</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160; outputWidth = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(ceil(</div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160; static_cast&lt;float&gt;(inputWidth - pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a> + 1) /</div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160; static_cast&lt;float&gt;(pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>)));</div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160; }</div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160;</div><div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>&#160; <span class="keywordflow">switch</span> (dataLayout)</div><div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>&#160; {</div><div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>&#160; <span class="keywordflow">case</span> DataLayout::NHWC:</div><div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>&#160; outputInfo = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0],</div><div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>&#160; outputHeight,</div><div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>&#160; outputWidth,</div><div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>&#160; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[3] },</div><div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>&#160; DataType::Float32);</div><div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>&#160; <span class="keywordflow">case</span> DataLayout::NCHW:</div><div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160; outputInfo = <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>({ inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0],</div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[1],</div><div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>&#160; outputHeight,</div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160; outputWidth },</div><div class="line"><a name="l03092"></a><span class="lineno"> 3092</span>&#160; DataType::Float32);</div><div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>&#160; }</div><div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>&#160;</div><div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>&#160; <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">CalcPadding</a>(inputWidth, pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a>, pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>, 1u,</div><div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160; pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>, pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>, padding);</div><div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160; <a class="code" href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">CalcPadding</a>(inputHeight, pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a>, pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>, 1u,</div><div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>&#160; pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>, pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>, padding);</div><div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>&#160;</div><div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160;</div><div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddPooling2dLayer(pooling2dDescriptor, nodeDef.name().c_str());</div><div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160; <span class="keywordflow">if</span> (layer == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160; {</div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03106"></a><span class="lineno"> 3106</span>&#160; fmt::format(<span class="stringliteral">&quot;Failed to add pooling2d layer for {} {}&quot;</span>,</div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160; nodeDef.name(),</div><div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160; }</div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160;</div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>&#160;</div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160; inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160;</div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::Pooling2dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00371">Descriptors.hpp:371</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0">armnn::DataLayout</a></div><div class="ttdeci">DataLayout</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00050">Types.hpp:50</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::Pooling2dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00365">Descriptors.hpp:365</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a6d8fb685cc1ff224f25aa127fcf62c86"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">armnn::Pooling2dDescriptor::m_PoolWidth</a></div><div class="ttdeci">uint32_t m_PoolWidth</div><div class="ttdoc">Pooling width value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00373">Descriptors.hpp:373</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a8c29d6ea9b4186d69aad5961c910939c"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">armnn::Pooling2dDescriptor::m_PaddingMethod</a></div><div class="ttdeci">PaddingMethod m_PaddingMethod</div><div class="ttdoc">The padding method to be used. (Exclude, IgnoreValue). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00383">Descriptors.hpp:383</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::Pooling2dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00369">Descriptors.hpp:369</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::Pooling2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00377">Descriptors.hpp:377</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a5699e8606c37d18c03910b242cd1b010"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">armnn::Pooling2dDescriptor::m_PoolHeight</a></div><div class="ttdeci">uint32_t m_PoolHeight</div><div class="ttdoc">Pooling height value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00375">Descriptors.hpp:375</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::Pooling2dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00367">Descriptors.hpp:367</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_utils_1_1_data_layout_indexed_xhtml"><div class="ttname"><a href="classarmnn_utils_1_1_data_layout_indexed.xhtml">armnnUtils::DataLayoutIndexed</a></div><div class="ttdoc">Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...</div><div class="ttdef"><b>Definition:</b> <a href="_data_layout_indexed_8hpp_source.xhtml#l00017">DataLayoutIndexed.hpp:17</a></div></div>
+<div class="ttc" id="namespacearmnn_tf_parser_xhtml_aca0a31de02d5c087029bb28c9202b4d6"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#aca0a31de02d5c087029bb28c9202b4d6">armnnTfParser::CalcPadding</a></div><div class="ttdeci">void CalcPadding(uint32_t inputSize, uint32_t filterSize, uint32_t stride, uint32_t dilation, uint32_t &amp;paddingFront, uint32_t &amp;paddingBack, bool samePadding)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00429">TfParser.cpp:429</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::Pooling2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00385">Descriptors.hpp:385</a></div></div>
+<div class="ttc" id="_tf_parser_8cpp_xhtml_a3fb047570644cae325aa88d3cd7bb96e"><div class="ttname"><a href="_tf_parser_8cpp.xhtml#a3fb047570644cae325aa88d3cd7bb96e">CHECK_DATA_FORMAT</a></div><div class="ttdeci">#define CHECK_DATA_FORMAT(NODE_DEF, FORMAT, NODE_TYPE)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00356">TfParser.cpp:356</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a0031997bf43bd2747656c31e4977793a"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">armnn::Pooling2dDescriptor::m_PoolType</a></div><div class="ttdeci">PoolingAlgorithm m_PoolType</div><div class="ttdoc">The pooling algorithm to use (Max. Average, L2). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00363">Descriptors.hpp:363</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_affb5b68b3eba3ed45a06c7cde7781962"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#affb5b68b3eba3ed45a06c7cde7781962">armnn::Pooling2dDescriptor::m_OutputShapeRounding</a></div><div class="ttdeci">OutputShapeRounding m_OutputShapeRounding</div><div class="ttdoc">The rounding method for the output shape. (Floor, Ceiling). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00381">Descriptors.hpp:381</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="_tf_parser_8cpp_xhtml_aab838eb7734e531bb5be6f6dece673bf"><div class="ttname"><a href="_tf_parser_8cpp.xhtml#aab838eb7734e531bb5be6f6dece673bf">CHECK_PADDING_TYPE</a></div><div class="ttdeci">#define CHECK_PADDING_TYPE(NODE_DEF, PADDING)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00368">TfParser.cpp:368</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml">armnn::Pooling2dDescriptor</a></div><div class="ttdoc">A Pooling2dDescriptor for the Pooling2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00329">Descriptors.hpp:329</a></div></div>
+<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::Pooling2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00379">Descriptors.hpp:379</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ab1bcf36c86bd2c3f9d8dbd8793642f43"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab1bcf36c86bd2c3f9d8dbd8793642f43">&#9670;&nbsp;</a></span>ParseRealDiv()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseRealDiv </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02746">2746</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l03198">ITfParser::TfParserImpl::AddRealDivLayer()</a>, and <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>&#160;{</div><div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a138dbe1b5b87970a073445ab7fc512f5">AddRealDivLayer</a>(nodeDef);</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a138dbe1b5b87970a073445ab7fc512f5"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a138dbe1b5b87970a073445ab7fc512f5">armnnTfParser::ITfParser::TfParserImpl::AddRealDivLayer</a></div><div class="ttdeci">ParsedTfOperationPtr AddRealDivLayer(const tensorflow::NodeDef &amp;nodeDef)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03198">TfParser.cpp:3198</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a64aff7efca99114ef64a6b30953d93ee"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a64aff7efca99114ef64a6b30953d93ee">&#9670;&nbsp;</a></span>ParseRelu()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseRelu </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02753">2753</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l02984">ITfParser::TfParserImpl::AddActivationLayer()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00048">ActivationDescriptor::m_Function</a>.</p>
+<div class="fragment"><div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>&#160;{</div><div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>&#160;</div><div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>&#160; <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> activationDesc;</div><div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>&#160; activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a> = ActivationFunction::ReLu;</div><div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a03e49169bbbcfea8be81ff4139d1f75f">AddActivationLayer</a>(nodeDef, activationDesc);</div><div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml">armnn::ActivationDescriptor</a></div><div class="ttdoc">An ActivationDescriptor for the ActivationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00025">Descriptors.hpp:25</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a03e49169bbbcfea8be81ff4139d1f75f"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a03e49169bbbcfea8be81ff4139d1f75f">armnnTfParser::ITfParser::TfParserImpl::AddActivationLayer</a></div><div class="ttdeci">ParsedTfOperationPtr AddActivationLayer(const tensorflow::NodeDef &amp;nodeDef, armnn::ActivationDescriptor &amp;desc)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l02984">TfParser.cpp:2984</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_af10fa7883e3579950f477bee92a64844"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">armnn::ActivationDescriptor::m_Function</a></div><div class="ttdeci">ActivationFunction m_Function</div><div class="ttdoc">The activation function to use (Sigmoid, TanH, Linear, ReLu, BoundedReLu, SoftReLu, LeakyReLu, Abs, Sqrt, Square, Elu). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00048">Descriptors.hpp:48</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a68cb028cdc437c8daad2e2c9406da4f9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68cb028cdc437c8daad2e2c9406da4f9">&#9670;&nbsp;</a></span>ParseRelu6()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseRelu6 </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02763">2763</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l02984">ITfParser::TfParserImpl::AddActivationLayer()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00050">ActivationDescriptor::m_A</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00052">ActivationDescriptor::m_B</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00048">ActivationDescriptor::m_Function</a>.</p>
+<div class="fragment"><div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160;{</div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160;</div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160; <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> activationDesc;</div><div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>&#160; activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a> = ActivationFunction::BoundedReLu;</div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160; activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a> = 6.0f;</div><div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>&#160; activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">m_B</a> = 0.0f;</div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160;</div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a03e49169bbbcfea8be81ff4139d1f75f">AddActivationLayer</a>(nodeDef, activationDesc);</div><div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml">armnn::ActivationDescriptor</a></div><div class="ttdoc">An ActivationDescriptor for the ActivationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00025">Descriptors.hpp:25</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_a017b2990003a014234f13e999dc7c689"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">armnn::ActivationDescriptor::m_A</a></div><div class="ttdeci">float m_A</div><div class="ttdoc">Alpha upper bound value used by the activation functions. (BoundedReLu, Linear, TanH, Elu). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00050">Descriptors.hpp:50</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a03e49169bbbcfea8be81ff4139d1f75f"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a03e49169bbbcfea8be81ff4139d1f75f">armnnTfParser::ITfParser::TfParserImpl::AddActivationLayer</a></div><div class="ttdeci">ParsedTfOperationPtr AddActivationLayer(const tensorflow::NodeDef &amp;nodeDef, armnn::ActivationDescriptor &amp;desc)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l02984">TfParser.cpp:2984</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_a28c4c9cb15f6be3499abbc46b356060b"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">armnn::ActivationDescriptor::m_B</a></div><div class="ttdeci">float m_B</div><div class="ttdoc">Beta lower bound value used by the activation functions. (BoundedReLu, Linear, TanH). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00052">Descriptors.hpp:52</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_af10fa7883e3579950f477bee92a64844"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">armnn::ActivationDescriptor::m_Function</a></div><div class="ttdeci">ActivationFunction m_Function</div><div class="ttdoc">The activation function to use (Sigmoid, TanH, Linear, ReLu, BoundedReLu, SoftReLu, LeakyReLu, Abs, Sqrt, Square, Elu). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00048">Descriptors.hpp:48</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a7278a1a8d099cde1417ca4f7e3c2ef9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7278a1a8d099cde1417ca4f7e3c2ef9c">&#9670;&nbsp;</a></span>ParseReshape()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseReshape </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02389">2389</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00848">ReshapeDescriptor::m_TargetShape</a>, <a class="el" href="_i_tf_parser_8hpp_source.xhtml#l00061">ITfParser::ParsedTfOperation</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160;{</div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160; <a class="code" href="classarmnn_tf_parser_1_1_i_tf_parser.xhtml#a81cd010ead68e4d96e6cb28255143f49">ParsedTfOperation</a>* inputNode = inputs[0].m_IndexedValue;</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160;</div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160; <span class="keywordflow">if</span> (!HasParsedConstTensor&lt;int32_t&gt;(inputs[1].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160; {</div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports Reshape layers with constant shapes. &quot;</span></div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160; <span class="stringliteral">&quot;Input {} Node {} {}&quot;</span>,</div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160; inputs[1].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160; nodeDef.name(),</div><div class="line"><a name="l02403"></a><span class="lineno"> 2403</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160; }</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160; ParsedConstTfOperation&lt;int32_t&gt;* shapeNode =</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;int32_t&gt;*&gt;(inputs[1].m_IndexedValue);</div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160;</div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a>&amp; prevLayerOutputSlot = inputNode-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = prevLayerOutputSlot.GetTensorInfo();</div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160;</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160; std::vector&lt;int32_t&gt; shapeTensorData;</div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160; <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> shapeTensor = shapeNode-&gt;GetConstTensor(shapeTensorData);</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo = PrepareReshape(inputTensorInfo, shapeTensorData);</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160;</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> targetShape = outputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160; <a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml">ReshapeDescriptor</a> reshapeDesc;</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160; reshapeDesc.<a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml#a1178f4dafdda81f59c15145ec327f7d9">m_TargetShape</a> = targetShape;</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160;</div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddReshapeLayer(reshapeDesc, nodeDef.name().c_str());</div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160; prevLayerOutputSlot.Connect(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160;</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="structarmnn_1_1_reshape_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_reshape_descriptor.xhtml">armnn::ReshapeDescriptor</a></div><div class="ttdoc">A ReshapeDescriptor for the ReshapeLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00832">Descriptors.hpp:832</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="classarmnn_tf_parser_1_1_i_tf_parser_xhtml_a81cd010ead68e4d96e6cb28255143f49"><div class="ttname"><a href="classarmnn_tf_parser_1_1_i_tf_parser.xhtml#a81cd010ead68e4d96e6cb28255143f49">armnnTfParser::ITfParser::ParsedTfOperation</a></div><div class="ttdeci">friend class ParsedTfOperation</div><div class="ttdef"><b>Definition:</b> <a href="_i_tf_parser_8hpp_source.xhtml#l00061">ITfParser.hpp:61</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_reshape_descriptor_xhtml_a1178f4dafdda81f59c15145ec327f7d9"><div class="ttname"><a href="structarmnn_1_1_reshape_descriptor.xhtml#a1178f4dafdda81f59c15145ec327f7d9">armnn::ReshapeDescriptor::m_TargetShape</a></div><div class="ttdeci">TensorShape m_TargetShape</div><div class="ttdoc">Target shape value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00848">Descriptors.hpp:848</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00314">Tensor.hpp:314</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="acce71942f3e1ccf87e85f3b4819e2691"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acce71942f3e1ccf87e85f3b4819e2691">&#9670;&nbsp;</a></span>ParseResizeBilinear()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseResizeBilinear </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02426">2426</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">armnn::Bilinear</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::Float32</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00823">ResizeDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00821">ResizeDescriptor::m_Method</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00818">ResizeDescriptor::m_TargetHeight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00816">ResizeDescriptor::m_TargetWidth</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::NHWC</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;{</div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160;</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160; <span class="keywordflow">if</span> (!HasParsedConstTensor&lt;int32_t&gt;(inputs[1].m_IndexedValue-&gt;GetNode().name()))</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160; {</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports ResizeBilinear layers with constant sizes. &quot;</span></div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160; <span class="stringliteral">&quot;Input {}. Node {} {}&quot;</span>,</div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160; inputs[1].m_IndexedValue-&gt;GetNode().name(),</div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160; nodeDef.name(),</div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160; }</div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160; ParsedConstTfOperation&lt;int32_t&gt;* sizeNode =</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;int32_t&gt;*&gt;(inputs[1].m_IndexedValue);</div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160;</div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160; <span class="comment">// Checks the align_corners attribute is not set.</span></div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160; <span class="keywordflow">if</span> (ReadOptionalNodeBoolAttribute(nodeDef, <span class="stringliteral">&quot;align_corners&quot;</span>, <span class="keyword">false</span>))</div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160; {</div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160; fmt::format(<span class="stringliteral">&quot;ArmNN only supports ResizeBilinear layers with align_corners set to false. &quot;</span></div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160; <span class="stringliteral">&quot;Node {} {}&quot;</span>,</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160; nodeDef.name(),</div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160; }</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160;</div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160; <span class="comment">// Data for the parsed tensor args (size) must be stored locally.</span></div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160; std::vector&lt;int32_t&gt; sizeTensorData;</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160; <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a> sizeTensor = sizeNode-&gt;GetConstTensor(sizeTensorData);</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160;</div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160; <span class="comment">// The descriptor only has target height and width attributes, which we get from the size tensor.</span></div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160; <a class="code" href="structarmnn_1_1_resize_descriptor.xhtml">ResizeDescriptor</a> desc;</div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160; desc.<a class="code" href="structarmnn_1_1_resize_descriptor.xhtml#a869254cb56968986a78a79e1d6d4a86b">m_Method</a> = <a class="code" href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">armnn::ResizeMethod::Bilinear</a>;</div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160; desc.<a class="code" href="structarmnn_1_1_resize_descriptor.xhtml#a46c3fa15c46fb0d1dcdc24d0ea5cb5cd">m_TargetHeight</a> = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (sizeTensorData[0]);</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160; desc.<a class="code" href="structarmnn_1_1_resize_descriptor.xhtml#adcf5037208faac36c0788239a073f75c">m_TargetWidth</a> = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span> (sizeTensorData[1]);</div><div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160; desc.<a class="code" href="structarmnn_1_1_resize_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160;</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddResizeLayer(desc, nodeDef.name().c_str());</div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160;</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; inputSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160; <span class="comment">// The input shape is always in BHWC format, this will be swizzled below; for now,</span></div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160; <span class="comment">// get the batch and channels to make up the ArmNN output shape with the target size.</span></div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outBatch = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[0];</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outChannels = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[3];</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outHeight = desc.<a class="code" href="structarmnn_1_1_resize_descriptor.xhtml#a46c3fa15c46fb0d1dcdc24d0ea5cb5cd">m_TargetHeight</a>;</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outWidth = desc.<a class="code" href="structarmnn_1_1_resize_descriptor.xhtml#adcf5037208faac36c0788239a073f75c">m_TargetWidth</a>;</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outShape({outBatch, outHeight, outWidth, outChannels });</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160; <span class="comment">// The output DataType is always Float32, regardless of the input DataType.</span></div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo(outShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a>);</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160;</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160; inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160;</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="structarmnn_1_1_resize_descriptor_xhtml_a869254cb56968986a78a79e1d6d4a86b"><div class="ttname"><a href="structarmnn_1_1_resize_descriptor.xhtml#a869254cb56968986a78a79e1d6d4a86b">armnn::ResizeDescriptor::m_Method</a></div><div class="ttdeci">ResizeMethod m_Method</div><div class="ttdoc">The Interpolation method to use (Bilinear, NearestNeighbor). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00821">Descriptors.hpp:821</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_resize_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_resize_descriptor.xhtml">armnn::ResizeDescriptor</a></div><div class="ttdoc">A ResizeDescriptor for the ResizeLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00794">Descriptors.hpp:794</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00314">Tensor.hpp:314</a></div></div>
+<div class="ttc" id="structarmnn_1_1_resize_descriptor_xhtml_adcf5037208faac36c0788239a073f75c"><div class="ttname"><a href="structarmnn_1_1_resize_descriptor.xhtml#adcf5037208faac36c0788239a073f75c">armnn::ResizeDescriptor::m_TargetWidth</a></div><div class="ttdeci">uint32_t m_TargetWidth</div><div class="ttdoc">Target width value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00816">Descriptors.hpp:816</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="structarmnn_1_1_resize_descriptor_xhtml_a46c3fa15c46fb0d1dcdc24d0ea5cb5cd"><div class="ttname"><a href="structarmnn_1_1_resize_descriptor.xhtml#a46c3fa15c46fb0d1dcdc24d0ea5cb5cd">armnn::ResizeDescriptor::m_TargetHeight</a></div><div class="ttdeci">uint32_t m_TargetHeight</div><div class="ttdoc">Target height value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00818">Descriptors.hpp:818</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f"><div class="ttname"><a href="namespacearmnn.xhtml#a9a2af2f8c4af4f9efa8e79417d505ac4aaf17c98bbd83c27d6426d2ff3fa81d7f">armnn::ResizeMethod::Bilinear</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_resize_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_resize_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::ResizeDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00823">Descriptors.hpp:823</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a7cac9d2ac092398b0efe64ec8e006511"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7cac9d2ac092398b0efe64ec8e006511">&#9670;&nbsp;</a></span>ParseRsqrt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseRsqrt </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02787">2787</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160;{</div><div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>&#160;</div><div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 1);</div><div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>&#160;</div><div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>&#160; <a class="code" href="structarmnn_1_1_elementwise_unary_descriptor.xhtml">ElementwiseUnaryDescriptor</a> descriptor(UnaryOperation::Rsqrt);</div><div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddElementwiseUnaryLayer(descriptor, nodeDef.name().c_str());</div><div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>&#160;</div><div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; prevLayerOutputSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>&#160; prevLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(prevLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160;</div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="structarmnn_1_1_elementwise_unary_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_elementwise_unary_descriptor.xhtml">armnn::ElementwiseUnaryDescriptor</a></div><div class="ttdoc">A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00098">Descriptors.hpp:98</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a1b1a337a431d198f68de42bde32ce2f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b1a337a431d198f68de42bde32ce2f1">&#9670;&nbsp;</a></span>ParseShape()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseShape </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02348">2348</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, and <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160;{</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160; <span class="comment">// Note: the Shape layer is handled in a special way, because:</span></div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160; <span class="comment">// 1. ARMNN doesn&#39;t support int32 tensors which it outputs.</span></div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160; <span class="comment">// 2. ARMNN works with statically shaped tensors which are known at parse time.</span></div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160; <span class="comment">// 3. because of 1. and 2. we treat the output of Shape as a temporary const int32</span></div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160; <span class="comment">// tensor which may be used as an input to other ops, most likely a Reshape.</span></div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160; <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">tensorflow::DataType</a> tfDataType = ReadMandatoryNodeTypeAttribute(nodeDef, <span class="stringliteral">&quot;out_type&quot;</span>);</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160; <span class="keywordflow">if</span> (tfDataType != tensorflow::DT_INT32)</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160; {</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160; fmt::format(<span class="stringliteral">&quot;Armnn only supports DT_INT32 as out_type. Got {} for Node {} {}&quot;</span>,</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160; tensorflow::DataType_Name(tfDataType),</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160; nodeDef.name(),</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160; }</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160;</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160; <span class="keyword">const</span> std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 1);</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; prevLayerOutputSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; prevLayerTensorInfo = prevLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> prevLayerDimensions = prevLayerTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160;</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160; std::vector&lt;int32_t&gt; shapeTensorData;</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160; shapeTensorData.reserve(prevLayerDimensions);</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160;</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;prevLayerDimensions; ++i)</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160; {</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160; shapeTensorData.push_back(static_cast&lt;int32_t&gt;(prevLayerTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i]));</div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160; }</div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160;</div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> shapeTensorInfo(1, &amp;prevLayerDimensions, DataType::Signed32);</div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160;</div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;ParsedConstTfOperation&lt;int32_t&gt;&gt;(<span class="keyword">this</span>,</div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160; nodeDef,</div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160; &amp;shapeTensorData[0],</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160; shapeTensorInfo);</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00032">Types.hpp:32</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="aee93c8f83169730c175da7601fca5de6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aee93c8f83169730c175da7601fca5de6">&#9670;&nbsp;</a></span>ParseSigmoid()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseSigmoid </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02776">2776</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l02984">ITfParser::TfParserImpl::AddActivationLayer()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00048">ActivationDescriptor::m_Function</a>.</p>
+<div class="fragment"><div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160;{</div><div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160;</div><div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160; <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> activationDesc;</div><div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160; activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a> = ActivationFunction::Sigmoid;</div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160;</div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a03e49169bbbcfea8be81ff4139d1f75f">AddActivationLayer</a>(nodeDef, activationDesc);</div><div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml">armnn::ActivationDescriptor</a></div><div class="ttdoc">An ActivationDescriptor for the ActivationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00025">Descriptors.hpp:25</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a03e49169bbbcfea8be81ff4139d1f75f"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a03e49169bbbcfea8be81ff4139d1f75f">armnnTfParser::ITfParser::TfParserImpl::AddActivationLayer</a></div><div class="ttdeci">ParsedTfOperationPtr AddActivationLayer(const tensorflow::NodeDef &amp;nodeDef, armnn::ActivationDescriptor &amp;desc)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l02984">TfParser.cpp:2984</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_af10fa7883e3579950f477bee92a64844"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">armnn::ActivationDescriptor::m_Function</a></div><div class="ttdeci">ActivationFunction m_Function</div><div class="ttdoc">The activation function to use (Sigmoid, TanH, Linear, ReLu, BoundedReLu, SoftReLu, LeakyReLu, Abs, Sqrt, Square, Elu). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00048">Descriptors.hpp:48</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a60be7de45006fefe5ace8729014b0fb7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a60be7de45006fefe5ace8729014b0fb7">&#9670;&nbsp;</a></span>ParseSoftmax()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseSoftmax </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02804">2804</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>&#160;{</div><div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>&#160;</div><div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 1);</div><div class="line"><a name="l02810"></a><span class="lineno"> 2810</span>&#160;</div><div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>&#160; <a class="code" href="structarmnn_1_1_softmax_descriptor.xhtml">SoftmaxDescriptor</a> softmaxDescriptor;</div><div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddSoftmaxLayer(softmaxDescriptor, nodeDef.name().c_str());</div><div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>&#160;</div><div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; prevLayerSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>&#160; prevLayerSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(prevLayerSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>&#160;</div><div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_softmax_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_softmax_descriptor.xhtml">armnn::SoftmaxDescriptor</a></div><div class="ttdoc">A SoftmaxDescriptor for the SoftmaxLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00139">Descriptors.hpp:139</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="abb49b9213d49e8f2c49dd98506f164b2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb49b9213d49e8f2c49dd98506f164b2">&#9670;&nbsp;</a></span>ParseSoftplus()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseSoftplus </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02912">2912</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l02984">ITfParser::TfParserImpl::AddActivationLayer()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00048">ActivationDescriptor::m_Function</a>.</p>
+<div class="fragment"><div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>&#160;{</div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>&#160;</div><div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>&#160; <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> activationDesc;</div><div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>&#160; activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a> = ActivationFunction::SoftReLu;</div><div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>&#160;</div><div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a03e49169bbbcfea8be81ff4139d1f75f">AddActivationLayer</a>(nodeDef, activationDesc);</div><div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml">armnn::ActivationDescriptor</a></div><div class="ttdoc">An ActivationDescriptor for the ActivationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00025">Descriptors.hpp:25</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a03e49169bbbcfea8be81ff4139d1f75f"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a03e49169bbbcfea8be81ff4139d1f75f">armnnTfParser::ITfParser::TfParserImpl::AddActivationLayer</a></div><div class="ttdeci">ParsedTfOperationPtr AddActivationLayer(const tensorflow::NodeDef &amp;nodeDef, armnn::ActivationDescriptor &amp;desc)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l02984">TfParser.cpp:2984</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_af10fa7883e3579950f477bee92a64844"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">armnn::ActivationDescriptor::m_Function</a></div><div class="ttdeci">ActivationFunction m_Function</div><div class="ttdoc">The activation function to use (Sigmoid, TanH, Linear, ReLu, BoundedReLu, SoftReLu, LeakyReLu, Abs, Sqrt, Square, Elu). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00048">Descriptors.hpp:48</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5d67929430d96c47e5652d84da82c1fb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5d67929430d96c47e5652d84da82c1fb">&#9670;&nbsp;</a></span>ParseSplit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseSplit </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02821">2821</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01198">ITfParser::TfParserImpl::GetConstInputIndex()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00194">TensorInfo::GetDataType()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#ac2dac3b61c94de52093616be4ab17f8d">IConnectableLayer::GetNumOutputSlots()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00578">ITfParser::TfParserImpl::GetTfInputNodes()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>, <a class="el" href="_descriptors_8cpp_source.xhtml#l00310">ViewsDescriptor::SetViewOriginCoord()</a>, and <a class="el" href="_descriptors_8cpp_source.xhtml#l00315">ViewsDescriptor::SetViewSize()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>&#160;{</div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160;</div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160; std::vector&lt;OutputOfConstNodeDef&gt; nodes = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">GetTfInputNodes</a>(nodeDef);</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(nodes.size());</div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, numInputs);</div><div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>&#160;</div><div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>&#160; <span class="comment">// Constant tensor index</span></div><div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a82bb92947dc9e0f04d4242910d6cbc65">GetConstInputIndex</a>(inputs);</div><div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>&#160; <span class="comment">// Get the axis tensor data</span></div><div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>&#160; ParsedConstTfOperation&lt;int32_t&gt;* shapeNode =</div><div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;int32_t&gt;*&gt;(inputs[index].m_IndexedValue);</div><div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>&#160;</div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160; std::vector&lt;int32_t&gt; axisTensorData;</div><div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>&#160; shapeNode-&gt;GetConstTensor(axisTensorData);</div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160;</div><div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>&#160; <span class="comment">// This splitDim indicates the data format: 3 is the NHWC, 1 is the NCHW.</span></div><div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> splitDim = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(axisTensorData[0]);</div><div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>&#160;</div><div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>&#160; <span class="comment">// Armnn supports split along the channel dimension for data formats NHWC and NCHW.</span></div><div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160; <span class="keywordflow">if</span> (splitDim == 0 || splitDim == 2)</div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160; {</div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a>(</div><div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>&#160; fmt::format(<span class="stringliteral">&quot;Dimension {} for split is not supported by Armnn. &quot;</span></div><div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>&#160; <span class="stringliteral">&quot;Node {} {}&quot;</span>,</div><div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>&#160; splitDim,</div><div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>&#160; nodeDef.name(),</div><div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>&#160; }</div><div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>&#160;</div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160; <span class="comment">// As Armnn only supports splitter outputs of the same shape, therefore num_split will be limited to an integer.</span></div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160; uint32_t num_split = ReadMandatoryNodeUint32Attribute(nodeDef, <span class="stringliteral">&quot;num_split&quot;</span>);</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160;</div><div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; inputSlot = inputs[1 - index].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[1 - index].m_Index);</div><div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160;</div><div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> supportedNumDims = 4;</div><div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>&#160; <span class="keyword">auto</span> inputDimSize = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160;</div><div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>&#160; <span class="keywordflow">if</span> (inputDimSize != supportedNumDims)</div><div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>&#160; {</div><div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a>(</div><div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>&#160; fmt::format(<span class="stringliteral">&quot;The number of dimensions: {} for input tensors of the &quot;</span></div><div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>&#160; <span class="stringliteral">&quot;split op should be {} {}&quot;</span>,</div><div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>&#160; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(),</div><div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>&#160; supportedNumDims,</div><div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160; }</div><div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>&#160;</div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160; std::vector&lt;unsigned int&gt; splitterDimSizes(inputDimSize);</div><div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160;</div><div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>&#160; <span class="comment">// Add current input shape to splitterDimSizes</span></div><div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; inputDimSize; ++i)</div><div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>&#160; {</div><div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160; splitterDimSizes[i] = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>()[i];</div><div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>&#160; }</div><div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>&#160;</div><div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>&#160; <span class="keywordflow">if</span> (splitterDimSizes[splitDim] % num_split != 0)</div><div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>&#160; {</div><div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(<span class="stringliteral">&quot;Number of splits must evenly divide the dimension&quot;</span>);</div><div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>&#160; }</div><div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160; splitterDimSizes[splitDim] /= num_split;</div><div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>&#160;</div><div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>&#160; <a class="code" href="structarmnn_1_1_views_descriptor.xhtml">SplitterDescriptor</a> splitDesc(num_split);</div><div class="line"><a name="l02887"></a><span class="lineno"> 2887</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> g = 0; g &lt; num_split; ++g)</div><div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>&#160; {</div><div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160; <span class="comment">// Set the size of the views.</span></div><div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimIdx = 0; dimIdx &lt; splitterDimSizes.size(); ++dimIdx)</div><div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160; {</div><div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160; splitDesc.SetViewSize(g, dimIdx, splitterDimSizes[dimIdx]);</div><div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>&#160; }</div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160; splitDesc.SetViewOriginCoord(g, splitDim, splitterDimSizes[splitDim] * g);</div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160; }</div><div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>&#160;</div><div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a> *layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddSplitterLayer(splitDesc, nodeDef.name().c_str());</div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160;</div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160; inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160;</div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160; <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a> outShape = <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(static_cast&lt;unsigned int&gt;(splitterDimSizes.size()),</div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160; splitterDimSizes.data());</div><div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160;</div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#ac2dac3b61c94de52093616be4ab17f8d">GetNumOutputSlots</a>(); ++i)</div><div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>&#160; {</div><div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(i).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>(outShape, inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>()));</div><div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160; }</div><div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>&#160;</div><div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_ac2dac3b61c94de52093616be4ab17f8d"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#ac2dac3b61c94de52093616be4ab17f8d">armnn::IConnectableLayer::GetNumOutputSlots</a></div><div class="ttdeci">virtual unsigned int GetNumOutputSlots() const =0</div><div class="ttdoc">Returns the number of connectable output slots. </div></div>
+<div class="ttc" id="structarmnn_1_1_views_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_views_descriptor.xhtml">armnn::ViewsDescriptor</a></div><div class="ttdoc">A ViewsDescriptor for the SplitterLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00206">Descriptors.hpp:206</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_aea909c7327109228ef618d459015def3"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">armnn::TensorInfo::GetDataType</a></div><div class="ttdeci">DataType GetDataType() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00194">Tensor.hpp:194</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a82bb92947dc9e0f04d4242910d6cbc65"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a82bb92947dc9e0f04d4242910d6cbc65">armnnTfParser::ITfParser::TfParserImpl::GetConstInputIndex</a></div><div class="ttdeci">unsigned int GetConstInputIndex(const std::vector&lt; OutputOfParsedTfOperation &gt; &amp;inputs)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l01198">TfParser.cpp:1198</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a9e7a394f59e8d223a79e3db798803c1c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">armnnTfParser::ITfParser::TfParserImpl::GetTfInputNodes</a></div><div class="ttdeci">std::vector&lt; OutputOfConstNodeDef &gt; GetTfInputNodes(const tensorflow::NodeDef &amp;nodeDef) const</div><div class="ttdoc">Finds the nodes connected as inputs of the given node in the graph. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00578">TfParser.cpp:578</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="ad0f8f08a9af6b35b3218969adec2a3c3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad0f8f08a9af6b35b3218969adec2a3c3">&#9670;&nbsp;</a></span>ParseSqueeze()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseSqueeze </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02557">2557</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00848">ReshapeDescriptor::m_TargetShape</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02485">armnnTfParser::OutputShapeOfSqueeze()</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;{</div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 1);</div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160;</div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; prevLayerOutputSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = prevLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160;</div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo;</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160; outputInfo = <a class="code" href="namespacearmnn_tf_parser.xhtml#a6e06adf62d53562032e738b89f3eb37c">OutputShapeOfSqueeze</a>(nodeDef, inputTensorInfo);</div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160;</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160; <a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml">ReshapeDescriptor</a> reshapeDesc;</div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160; reshapeDesc.<a class="code" href="structarmnn_1_1_reshape_descriptor.xhtml#a1178f4dafdda81f59c15145ec327f7d9">m_TargetShape</a> = outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddReshapeLayer(reshapeDesc, nodeDef.name().c_str());</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160; prevLayerOutputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160;</div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="structarmnn_1_1_reshape_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_reshape_descriptor.xhtml">armnn::ReshapeDescriptor</a></div><div class="ttdoc">A ReshapeDescriptor for the ReshapeLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00832">Descriptors.hpp:832</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_reshape_descriptor_xhtml_a1178f4dafdda81f59c15145ec327f7d9"><div class="ttname"><a href="structarmnn_1_1_reshape_descriptor.xhtml#a1178f4dafdda81f59c15145ec327f7d9">armnn::ReshapeDescriptor::m_TargetShape</a></div><div class="ttdeci">TensorShape m_TargetShape</div><div class="ttdoc">Target shape value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00848">Descriptors.hpp:848</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="namespacearmnn_tf_parser_xhtml_a6e06adf62d53562032e738b89f3eb37c"><div class="ttname"><a href="namespacearmnn_tf_parser.xhtml#a6e06adf62d53562032e738b89f3eb37c">armnnTfParser::OutputShapeOfSqueeze</a></div><div class="ttdeci">TensorInfo OutputShapeOfSqueeze(const tensorflow::NodeDef &amp;nodeDef, TensorInfo inputTensorInfo)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l02485">TfParser.cpp:2485</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a7fe3fd8cda30d697f99359a6e295677b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7fe3fd8cda30d697f99359a6e295677b">&#9670;&nbsp;</a></span>ParseStack()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseStack </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02015">2015</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00194">TensorInfo::GetDataType()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00578">ITfParser::TfParserImpl::GetTfInputNodes()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01046">StackDescriptor::m_Axis</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01050">StackDescriptor::m_InputShape</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01048">StackDescriptor::m_NumInputs</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;{</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160; std::vector&lt;OutputOfConstNodeDef&gt; nodes = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">GetTfInputNodes</a>(nodeDef);</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(nodes.size());</div><div class="line"><a name="l02022"></a><span class="lineno"> 2022</span>&#160; <span class="keywordflow">if</span> (numInputs &lt; 1)</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160; {</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160; fmt::format(<span class="stringliteral">&quot;Pack/Stack expects at least one input. Got {} for Node {} {}&quot;</span>,</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160; numInputs,</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160; nodeDef.name(),</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160; }</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, numInputs);</div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160; <span class="comment">// Use the tensor shape of the first input as the &quot;correct&quot; input shape in the descriptor</span></div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input0Slot = &amp;inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; inputTensorInfo = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160; <span class="keyword">auto</span> numDimensions = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>().<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160; <span class="comment">// validate axis</span></div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160; int32_t axis = ReadMandatoryNodeInt32Attribute(nodeDef, <span class="stringliteral">&quot;axis&quot;</span>);</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> sNumDimensions = (<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(numDimensions) + 1);</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160; <span class="keywordflow">if</span> (!(axis &lt; sNumDimensions &amp;&amp; axis &gt;= -sNumDimensions))</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; {</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160; fmt::format(<span class="stringliteral">&quot;Axis index is not in range. Got {} for Node {} {}&quot;</span>,</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160; axis,</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; nodeDef.name(),</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160; }</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; <span class="keywordflow">if</span> (axis &lt; 0)</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160; {</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160; axis = <span class="keyword">static_cast&lt;</span>int32_t<span class="keyword">&gt;</span>(numDimensions) + axis + 1;</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160; }</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160; <a class="code" href="structarmnn_1_1_stack_descriptor.xhtml">StackDescriptor</a> stackDescriptor;</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160; stackDescriptor.<a class="code" href="structarmnn_1_1_stack_descriptor.xhtml#ab218de7805899c8412d75d1fd1d846d2">m_Axis</a> = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(axis);</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160; stackDescriptor.<a class="code" href="structarmnn_1_1_stack_descriptor.xhtml#aed6086070440ceb94129bef06f70173f">m_NumInputs</a> = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(numInputs);</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160; stackDescriptor.<a class="code" href="structarmnn_1_1_stack_descriptor.xhtml#a2bea87b470268bb0b73457c3733dbc04">m_InputShape</a> = inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> supportedNumDims = 4;</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIndex = 0; viewIndex &lt; numInputs; ++viewIndex)</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160; {</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; inputSlot = inputs[viewIndex].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[viewIndex].m_Index);</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160; <span class="comment">// Double check dimensions of the tensors</span></div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160; <span class="keywordflow">if</span> (inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() &gt;= supportedNumDims)</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160; {</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a>(</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160; fmt::format(<span class="stringliteral">&quot;The number of dimensions: {} for input tensors of the &quot;</span></div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160; <span class="stringliteral">&quot;Pack/Stack op. Number of dimensions should be less than {} {}&quot;</span>,</div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(),</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160; supportedNumDims,</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; }</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160; }</div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; std::vector&lt;unsigned int&gt; outputDimensions;</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; stackDescriptor.<a class="code" href="structarmnn_1_1_stack_descriptor.xhtml#a2bea87b470268bb0b73457c3733dbc04">m_InputShape</a>.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); ++i)</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160; {</div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160; outputDimensions.push_back(stackDescriptor.<a class="code" href="structarmnn_1_1_stack_descriptor.xhtml#a2bea87b470268bb0b73457c3733dbc04">m_InputShape</a>[i]);</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160; }</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160; outputDimensions.insert(outputDimensions.begin() + axis, numInputs);</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;</div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; <span class="comment">// add Stack Layer</span></div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddStackLayer(stackDescriptor, nodeDef.name().c_str());</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> viewIndex = 0; viewIndex &lt; numInputs; ++viewIndex)</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160; {</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; inputSlot = inputs[viewIndex].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[viewIndex].m_Index);</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; inputSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(viewIndex));</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160; }</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a>(static_cast&lt;uint32_t&gt;(outputDimensions.size()),</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160; outputDimensions.data(),</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160; inputTensorInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">GetDataType</a>()));</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02099"></a><span class="lineno"> 2099</span>&#160;}</div><div class="ttc" id="structarmnn_1_1_stack_descriptor_xhtml_ab218de7805899c8412d75d1fd1d846d2"><div class="ttname"><a href="structarmnn_1_1_stack_descriptor.xhtml#ab218de7805899c8412d75d1fd1d846d2">armnn::StackDescriptor::m_Axis</a></div><div class="ttdeci">uint32_t m_Axis</div><div class="ttdoc">0-based axis along which to stack the input tensors. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01046">Descriptors.hpp:1046</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="structarmnn_1_1_stack_descriptor_xhtml_a2bea87b470268bb0b73457c3733dbc04"><div class="ttname"><a href="structarmnn_1_1_stack_descriptor.xhtml#a2bea87b470268bb0b73457c3733dbc04">armnn::StackDescriptor::m_InputShape</a></div><div class="ttdeci">TensorShape m_InputShape</div><div class="ttdoc">Required shape of all input tensors. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01050">Descriptors.hpp:1050</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_stack_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_stack_descriptor.xhtml">armnn::StackDescriptor</a></div><div class="ttdoc">A StackDescriptor for the StackLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01024">Descriptors.hpp:1024</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_aea909c7327109228ef618d459015def3"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#aea909c7327109228ef618d459015def3">armnn::TensorInfo::GetDataType</a></div><div class="ttdeci">DataType GetDataType() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00194">Tensor.hpp:194</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="structarmnn_1_1_stack_descriptor_xhtml_aed6086070440ceb94129bef06f70173f"><div class="ttname"><a href="structarmnn_1_1_stack_descriptor.xhtml#aed6086070440ceb94129bef06f70173f">armnn::StackDescriptor::m_NumInputs</a></div><div class="ttdeci">uint32_t m_NumInputs</div><div class="ttdoc">Number of input tensors. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01048">Descriptors.hpp:1048</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorShape::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdoc">Function that returns the tensor rank. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00174">Tensor.cpp:174</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a9e7a394f59e8d223a79e3db798803c1c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">armnnTfParser::ITfParser::TfParserImpl::GetTfInputNodes</a></div><div class="ttdeci">std::vector&lt; OutputOfConstNodeDef &gt; GetTfInputNodes(const tensorflow::NodeDef &amp;nodeDef) const</div><div class="ttdoc">Finds the nodes connected as inputs of the given node in the graph. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00578">TfParser.cpp:578</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a16ffc6437ceb17b6ad370192a5100944"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a16ffc6437ceb17b6ad370192a5100944">&#9670;&nbsp;</a></span>ParseStridedSlice()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseStridedSlice </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02923">2923</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_parser_helper_8cpp_source.xhtml#l00103">armnnUtils::CalculateStridedSliceOutputTensorInfo()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00578">ITfParser::TfParserImpl::GetTfInputNodes()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01115">StridedSliceDescriptor::m_Begin</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01123">StridedSliceDescriptor::m_BeginMask</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01136">StridedSliceDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01130">StridedSliceDescriptor::m_EllipsisMask</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01117">StridedSliceDescriptor::m_End</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01126">StridedSliceDescriptor::m_EndMask</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01133">StridedSliceDescriptor::m_NewAxisMask</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01128">StridedSliceDescriptor::m_ShrinkAxisMask</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01119">StridedSliceDescriptor::m_Stride</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::NHWC</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>&#160;{</div><div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160;</div><div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160; std::vector&lt;OutputOfConstNodeDef&gt; nodes = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">GetTfInputNodes</a>(nodeDef);</div><div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numInputs = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(nodes.size());</div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, numInputs);</div><div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>&#160;</div><div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>&#160; ParsedConstTfOperation&lt;int32_t&gt;* beginNode =</div><div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;int32_t&gt; *&gt;(inputs[1].m_IndexedValue);</div><div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>&#160; std::vector&lt;int32_t&gt; beginTensorData;</div><div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>&#160; beginNode-&gt;GetConstTensor(beginTensorData);</div><div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>&#160;</div><div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>&#160; ParsedConstTfOperation&lt;int32_t&gt;* endNode =</div><div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;int32_t&gt; *&gt;(inputs[2].m_IndexedValue);</div><div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>&#160; std::vector&lt;int32_t&gt; endTensorData;</div><div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>&#160; endNode-&gt;GetConstTensor(endTensorData);</div><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>&#160;</div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160; ParsedConstTfOperation&lt;int32_t&gt;* stridesNode =</div><div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;int32_t&gt; *&gt;(inputs[3].m_IndexedValue);</div><div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>&#160; std::vector&lt;int32_t&gt; stridesTensorData;</div><div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160; stridesNode-&gt;GetConstTensor(stridesTensorData);</div><div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>&#160;</div><div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>&#160; <a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml">StridedSliceDescriptor</a> desc;</div><div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>&#160; desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a118fe06b7c2599da60398ee311ede923">m_Begin</a> = beginTensorData;</div><div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>&#160; desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#aa68194dd6258ab5b04123005a066ea25">m_End</a> = endTensorData;</div><div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>&#160; desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a0d53caff836b84204adbd1c28752a201">m_Stride</a> = stridesTensorData;</div><div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>&#160; desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a61081be1483984e33db452c75d569f51">m_BeginMask</a> = ReadMandatoryNodeInt32Attribute(nodeDef, <span class="stringliteral">&quot;begin_mask&quot;</span>);</div><div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>&#160; desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#ac37e49c0d6e6e54f9d2015d0f11f8ee7">m_EndMask</a> = ReadMandatoryNodeInt32Attribute(nodeDef, <span class="stringliteral">&quot;end_mask&quot;</span>);</div><div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>&#160; desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#af996d82c47e43a16f4c8faa6c6b3e030">m_EllipsisMask</a> = ReadMandatoryNodeInt32Attribute(nodeDef, <span class="stringliteral">&quot;ellipsis_mask&quot;</span>);</div><div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160; desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a7c91eda2b331d607bae92cd8ebf50bb9">m_NewAxisMask</a> = ReadMandatoryNodeInt32Attribute(nodeDef, <span class="stringliteral">&quot;new_axis_mask&quot;</span>);</div><div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>&#160; desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a6d0384878432cfc9652b7ae8bc59506f">m_ShrinkAxisMask</a> = ReadMandatoryNodeInt32Attribute(nodeDef, <span class="stringliteral">&quot;shrink_axis_mask&quot;</span>);</div><div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160; desc.<a class="code" href="structarmnn_1_1_strided_slice_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a>;</div><div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddStridedSliceLayer(desc, nodeDef.name().c_str());</div><div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>&#160;</div><div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>&amp; prevLayerSlot = inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputTensorInfo = prevLayerSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>&#160;</div><div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputTensorInfo;</div><div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>&#160; <a class="code" href="namespacearmnn_utils.xhtml#a9300450bab29bb951d6f8755b7d9d3a8">CalculateStridedSliceOutputTensorInfo</a>(inputTensorInfo, desc, outputTensorInfo);</div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160;</div><div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160; prevLayerSlot.<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02966"></a><span class="lineno"> 2966</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputTensorInfo);</div><div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>&#160;</div><div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_a6d0384878432cfc9652b7ae8bc59506f"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#a6d0384878432cfc9652b7ae8bc59506f">armnn::StridedSliceDescriptor::m_ShrinkAxisMask</a></div><div class="ttdeci">int32_t m_ShrinkAxisMask</div><div class="ttdoc">Shrink axis mask value. If set, the nth specification shrinks the dimensionality by 1...</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01128">Descriptors.hpp:1128</a></div></div>
+<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_a118fe06b7c2599da60398ee311ede923"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#a118fe06b7c2599da60398ee311ede923">armnn::StridedSliceDescriptor::m_Begin</a></div><div class="ttdeci">std::vector&lt; int &gt; m_Begin</div><div class="ttdoc">Begin values for the input that will be sliced. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01115">Descriptors.hpp:1115</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::StridedSliceDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01136">Descriptors.hpp:1136</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_a61081be1483984e33db452c75d569f51"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#a61081be1483984e33db452c75d569f51">armnn::StridedSliceDescriptor::m_BeginMask</a></div><div class="ttdeci">int32_t m_BeginMask</div><div class="ttdoc">Begin mask value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01123">Descriptors.hpp:1123</a></div></div>
+<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_ac37e49c0d6e6e54f9d2015d0f11f8ee7"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#ac37e49c0d6e6e54f9d2015d0f11f8ee7">armnn::StridedSliceDescriptor::m_EndMask</a></div><div class="ttdeci">int32_t m_EndMask</div><div class="ttdoc">End mask value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01126">Descriptors.hpp:1126</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_a7c91eda2b331d607bae92cd8ebf50bb9"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#a7c91eda2b331d607bae92cd8ebf50bb9">armnn::StridedSliceDescriptor::m_NewAxisMask</a></div><div class="ttdeci">int32_t m_NewAxisMask</div><div class="ttdoc">New axis mask value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01133">Descriptors.hpp:1133</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_af996d82c47e43a16f4c8faa6c6b3e030"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#af996d82c47e43a16f4c8faa6c6b3e030">armnn::StridedSliceDescriptor::m_EllipsisMask</a></div><div class="ttdeci">int32_t m_EllipsisMask</div><div class="ttdoc">Ellipsis mask value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01130">Descriptors.hpp:1130</a></div></div>
+<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_a0d53caff836b84204adbd1c28752a201"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#a0d53caff836b84204adbd1c28752a201">armnn::StridedSliceDescriptor::m_Stride</a></div><div class="ttdeci">std::vector&lt; int &gt; m_Stride</div><div class="ttdoc">Stride values for the input that will be sliced. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01119">Descriptors.hpp:1119</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_a9300450bab29bb951d6f8755b7d9d3a8"><div class="ttname"><a href="namespacearmnn_utils.xhtml#a9300450bab29bb951d6f8755b7d9d3a8">armnnUtils::CalculateStridedSliceOutputTensorInfo</a></div><div class="ttdeci">void CalculateStridedSliceOutputTensorInfo(const armnn::TensorInfo &amp;inputTensorInfo, const armnn::StridedSliceDescriptor &amp;desc, armnn::TensorInfo &amp;outputTensorInfo)</div><div class="ttdoc">Create output tensor info for a StridedSlice operator. </div><div class="ttdef"><b>Definition:</b> <a href="_parser_helper_8cpp_source.xhtml#l00103">ParserHelper.cpp:103</a></div></div>
+<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml_aa68194dd6258ab5b04123005a066ea25"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml#aa68194dd6258ab5b04123005a066ea25">armnn::StridedSliceDescriptor::m_End</a></div><div class="ttdeci">std::vector&lt; int &gt; m_End</div><div class="ttdoc">End values for the input that will be sliced. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01117">Descriptors.hpp:1117</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a9e7a394f59e8d223a79e3db798803c1c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a9e7a394f59e8d223a79e3db798803c1c">armnnTfParser::ITfParser::TfParserImpl::GetTfInputNodes</a></div><div class="ttdeci">std::vector&lt; OutputOfConstNodeDef &gt; GetTfInputNodes(const tensorflow::NodeDef &amp;nodeDef) const</div><div class="ttdoc">Finds the nodes connected as inputs of the given node in the graph. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00578">TfParser.cpp:578</a></div></div>
+<div class="ttc" id="structarmnn_1_1_strided_slice_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_strided_slice_descriptor.xhtml">armnn::StridedSliceDescriptor</a></div><div class="ttdoc">A StridedSliceDescriptor for the StridedSliceLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01076">Descriptors.hpp:1076</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a6f8a3151672d48b7b929cfd9acd5add1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6f8a3151672d48b7b929cfd9acd5add1">&#9670;&nbsp;</a></span>ParseSub()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseSub </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01974">1974</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;{</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;</div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input0Slot = &amp;inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input1Slot = &amp;inputs[1].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[1].m_Index);</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; input0Info = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>&amp; input1Info = input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160;</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160; <span class="keywordflow">if</span> (input0Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 1)</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160; {</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> isNHWC = <span class="keyword">true</span>;</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160; input0Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input1Slot, input0Slot, isNHWC, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; }</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; <span class="keywordflow">if</span> (input1Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 1)</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160; {</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> isNHWC = <span class="keyword">true</span>;</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160; input1Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input0Slot, input1Slot, isNHWC, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160; }</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160;</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160; <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* <span class="keyword">const</span> layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddSubtractionLayer(nodeDef.name().c_str());</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;</div><div class="line"><a name="l02000"></a><span class="lineno"> 2000</span>&#160; input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160; input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(1));</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160;</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160; <span class="keywordflow">if</span> (input0Info.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>() == 1)</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160; {</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160; }</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160; {</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>());</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160; }</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a4fc55afb4885278ad1510b2c4307af76"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">armnn::optimizations::AddBroadcastReshapeLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddBroadcastReshapeLayerImpl &gt; AddBroadcastReshapeLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_broadcast_reshape_layer_8hpp_source.xhtml#l00082">AddBroadcastReshapeLayer.hpp:82</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a44a628660248f91dad0ba4f625014bcc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44a628660248f91dad0ba4f625014bcc">&#9670;&nbsp;</a></span>ParseTanh()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseTanh </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02971">2971</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8cpp_source.xhtml#l02984">ITfParser::TfParserImpl::AddActivationLayer()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00050">ActivationDescriptor::m_A</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00052">ActivationDescriptor::m_B</a>, and <a class="el" href="_descriptors_8hpp_source.xhtml#l00048">ActivationDescriptor::m_Function</a>.</p>
+<div class="fragment"><div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>&#160;{</div><div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>&#160;</div><div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160; <a class="code" href="structarmnn_1_1_activation_descriptor.xhtml">ActivationDescriptor</a> activationDesc;</div><div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160; activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">m_Function</a> = ActivationFunction::TanH;</div><div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>&#160; activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">m_A</a> = 1.0f;</div><div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>&#160; activationDesc.<a class="code" href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">m_B</a> = 1.0f;</div><div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160;</div><div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a03e49169bbbcfea8be81ff4139d1f75f">AddActivationLayer</a>(nodeDef, activationDesc);</div><div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160;}</div><div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml">armnn::ActivationDescriptor</a></div><div class="ttdoc">An ActivationDescriptor for the ActivationLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00025">Descriptors.hpp:25</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_a017b2990003a014234f13e999dc7c689"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#a017b2990003a014234f13e999dc7c689">armnn::ActivationDescriptor::m_A</a></div><div class="ttdeci">float m_A</div><div class="ttdoc">Alpha upper bound value used by the activation functions. (BoundedReLu, Linear, TanH, Elu). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00050">Descriptors.hpp:50</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a03e49169bbbcfea8be81ff4139d1f75f"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a03e49169bbbcfea8be81ff4139d1f75f">armnnTfParser::ITfParser::TfParserImpl::AddActivationLayer</a></div><div class="ttdeci">ParsedTfOperationPtr AddActivationLayer(const tensorflow::NodeDef &amp;nodeDef, armnn::ActivationDescriptor &amp;desc)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l02984">TfParser.cpp:2984</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_a28c4c9cb15f6be3499abbc46b356060b"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#a28c4c9cb15f6be3499abbc46b356060b">armnn::ActivationDescriptor::m_B</a></div><div class="ttdeci">float m_B</div><div class="ttdoc">Beta lower bound value used by the activation functions. (BoundedReLu, Linear, TanH). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00052">Descriptors.hpp:52</a></div></div>
+<div class="ttc" id="structarmnn_1_1_activation_descriptor_xhtml_af10fa7883e3579950f477bee92a64844"><div class="ttname"><a href="structarmnn_1_1_activation_descriptor.xhtml#af10fa7883e3579950f477bee92a64844">armnn::ActivationDescriptor::m_Function</a></div><div class="ttdeci">ActivationFunction m_Function</div><div class="ttdoc">The activation function to use (Sigmoid, TanH, Linear, ReLu, BoundedReLu, SoftReLu, LeakyReLu, Abs, Sqrt, Square, Elu). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00048">Descriptors.hpp:48</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a38b8abe6086a61e8831391b8717453cf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a38b8abe6086a61e8831391b8717453cf">&#9670;&nbsp;</a></span>ParseTranspose()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ParseTranspose </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::GraphDef &amp;&#160;</td>
+ <td class="paramname"><em>graphDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l02101">2101</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01198">ITfParser::TfParserImpl::GetConstInputIndex()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="_ignore_unused_8hpp_source.xhtml#l00014">armnn::IgnoreUnused()</a>, <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00189">TensorInfo::SetShape()</a>, and <a class="el" href="armnn_utils_2_transpose_8cpp_source.xhtml#l00098">armnnUtils::TransposeTensorShape()</a>.</p>
+<div class="fragment"><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;{</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(graphDef);</div><div class="line"><a name="l02105"></a><span class="lineno"> 2105</span>&#160;</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160; <span class="keyword">auto</span> inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> inputCount = inputs.size();</div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160; <span class="keywordflow">if</span> (inputCount != 2)</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160; {</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160; fmt::format(<span class="stringliteral">&quot;The number of given input is {}. It should be two for Transpose op.&quot;</span></div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160; <span class="stringliteral">&quot;Node {} {}&quot;</span>,</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160; inputCount,</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160; nodeDef.name(),</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; }</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160; <span class="keyword">auto</span>* input0Slot = &amp;inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l02120"></a><span class="lineno"> 2120</span>&#160;</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> constInput = inputs[<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a82bb92947dc9e0f04d4242910d6cbc65">GetConstInputIndex</a>(inputs)];</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160; <span class="keyword">auto</span>* permuteVectorInput =</div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160; PolymorphicDowncast&lt;ParsedConstTfOperation&lt;int32_t&gt;*&gt;(constInput.m_IndexedValue);</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; permuteVectorInfo = permuteVectorInput-&gt;GetTensorInfo();</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; std::vector&lt;int32_t&gt; permuteVectorData;</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160; permuteVectorInput-&gt;GetConstTensor(permuteVectorData);</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;</div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160; std::vector&lt;unsigned int&gt; armnnPermuteVectorData(permuteVectorData.begin(), permuteVectorData.end());</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> permutationVector = <a class="code" href="classarmnn_1_1_permutation_vector.xhtml">PermutationVector</a>(armnnPermuteVectorData.data(), permuteVectorInfo.GetNumElements());</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> desc = <a class="code" href="structarmnn_1_1_transpose_descriptor.xhtml">TransposeDescriptor</a>(permutationVector);</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160; <span class="keyword">auto</span>* layer = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>-&gt;AddTransposeLayer(desc, nodeDef.name().c_str());</div><div class="line"><a name="l02135"></a><span class="lineno"> 2135</span>&#160; <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(layer);</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160; input0Slot-&gt;Connect(layer-&gt;GetInputSlot(0));</div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; input0Info = input0Slot-&gt;GetTensorInfo();</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> outputInfo {input0Info};</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160; outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>(<a class="code" href="namespacearmnn_utils.xhtml#a428a9a6ffdf0e8d723b50c038c56c336">armnnUtils::TransposeTensorShape</a>(input0Info.GetShape(), desc.m_DimMappings));</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; layer-&gt;GetOutputSlot(0).SetTensorInfo(outputInfo);</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_abe8889e8150beef5fd204b2d87b49298"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">armnn::TensorInfo::SetShape</a></div><div class="ttdeci">void SetShape(const TensorShape &amp;newShape)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00189">Tensor.hpp:189</a></div></div>
+<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml">armnn::PermutationVector</a></div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00212">Types.hpp:212</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a82bb92947dc9e0f04d4242910d6cbc65"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a82bb92947dc9e0f04d4242910d6cbc65">armnnTfParser::ITfParser::TfParserImpl::GetConstInputIndex</a></div><div class="ttdeci">unsigned int GetConstInputIndex(const std::vector&lt; OutputOfParsedTfOperation &gt; &amp;inputs)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l01198">TfParser.cpp:1198</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="structarmnn_1_1_transpose_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_transpose_descriptor.xhtml">armnn::TransposeDescriptor</a></div><div class="ttdoc">A TransposeDescriptor for the TransposeLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l01263">Descriptors.hpp:1263</a></div></div>
+<div class="ttc" id="namespacearmnn_utils_xhtml_a428a9a6ffdf0e8d723b50c038c56c336"><div class="ttname"><a href="namespacearmnn_utils.xhtml#a428a9a6ffdf0e8d723b50c038c56c336">armnnUtils::TransposeTensorShape</a></div><div class="ttdeci">armnn::TensorShape TransposeTensorShape(const armnn::TensorShape &amp;srcShape, const armnn::PermutationVector &amp;mappings)</div><div class="ttdef"><b>Definition:</b> <a href="armnn_utils_2_transpose_8cpp_source.xhtml#l00098">Transpose.cpp:98</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a4ceb262ac0351dcf1aa9f7e1dc298489"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4ceb262ac0351dcf1aa9f7e1dc298489">&#9670;&nbsp;</a></span>ProcessComparisonLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ProcessComparisonLayer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *&#160;</td>
+ <td class="paramname"><em>input0Slot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *&#160;</td>
+ <td class="paramname"><em>input1Slot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *const&#160;</td>
+ <td class="paramname"><em>layer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01841">1841</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00195">TensorInfo::SetDataType()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00189">TensorInfo::SetShape()</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l01947">ITfParser::TfParserImpl::ParseEqual()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l01933">ITfParser::TfParserImpl::ParseGreater()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160;{</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160; input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(1));</div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;</div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160; outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a71975fcec1464d639f1a78f73164d1bd">SetDataType</a>(DataType::Boolean);</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160; std::vector&lt;unsigned int&gt; outputShape;</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; input0Shape = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; input1Shape = input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; input0Shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); i++)</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160; {</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160; outputShape.push_back(std::max(input0Shape[i], input1Shape[i]));</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160; }</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160; outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(input0Shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(), outputShape.data()));</div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_abe8889e8150beef5fd204b2d87b49298"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">armnn::TensorInfo::SetShape</a></div><div class="ttdeci">void SetShape(const TensorShape &amp;newShape)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00189">Tensor.hpp:189</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a71975fcec1464d639f1a78f73164d1bd"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a71975fcec1464d639f1a78f73164d1bd">armnn::TensorInfo::SetDataType</a></div><div class="ttdeci">void SetDataType(DataType type)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00195">Tensor.hpp:195</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorShape::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdoc">Function that returns the tensor rank. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00174">Tensor.cpp:174</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a0562881f75a2083315f1a1660686812b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0562881f75a2083315f1a1660686812b">&#9670;&nbsp;</a></span>ProcessElementwiseInputSlots()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::pair&lt; <a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> * &gt; ProcessElementwiseInputSlots </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>layerName</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01807">1807</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00191">TensorInfo::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, and <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">ITfParser::TfParserImpl::m_Network</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l01947">ITfParser::TfParserImpl::ParseEqual()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01933">ITfParser::TfParserImpl::ParseGreater()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l01961">ITfParser::TfParserImpl::ParseMinimum()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;{</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160; std::vector&lt;OutputOfParsedTfOperation&gt; inputs = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">GetInputParsedTfOperationsChecked</a>(nodeDef, 2);</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input0Slot = &amp;inputs[0].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[0].m_Index);</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160; <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">IOutputSlot</a>* input1Slot = &amp;inputs[1].m_IndexedValue-&gt;ResolveArmnnOutputSlot(inputs[1].m_Index);</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> input0Dim = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> input1Dim = input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>();</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160; <span class="keywordflow">if</span> (input0Dim != input1Dim)</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160; {</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160; <span class="comment">// broadcasting where input0 and input1 have different number of dimensions</span></div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160; <span class="comment">// is only supported for 1D and 4D tensors pair</span></div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160; <span class="keywordflow">if</span> (input0Dim == 1 &amp;&amp; input1Dim == 4)</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160; {</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160; input0Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input1Slot, input0Slot, <span class="keyword">true</span>, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160; }</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (input0Dim == 4 &amp;&amp; input1Dim == 1)</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160; {</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160; input1Slot = <a class="code" href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">AddBroadcastReshapeLayer</a>(input0Slot, input1Slot, <span class="keyword">true</span>, *<a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">m_Network</a>, nodeDef);</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160; }</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160; {</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160; fmt::format(<span class="stringliteral">&quot;Unsupported broadcast configuration for {} operation {} {}&quot;</span>,</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160; layerName,</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160; nodeDef.name(),</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160; }</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160; }</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160; <span class="keywordflow">return</span> {input0Slot, input1Slot};</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a2db3ae8d422f17d455e0ba0cb6291d2a"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a2db3ae8d422f17d455e0ba0cb6291d2a">armnnTfParser::ITfParser::TfParserImpl::m_Network</a></div><div class="ttdeci">armnn::INetworkPtr m_Network</div><div class="ttdoc">The network we&amp;#39;re building. Gets cleared after it is passed to the user. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00251">TfParser.hpp:251</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ae295ca8b7d19bb5e6db3f93bd4561ee0"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ae295ca8b7d19bb5e6db3f93bd4561ee0">armnnTfParser::ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked</a></div><div class="ttdeci">std::vector&lt; OutputOfParsedTfOperation &gt; GetInputParsedTfOperationsChecked(const tensorflow::NodeDef &amp;nodeDef, std::size_t expectedNumInputs)</div><div class="ttdoc">Finds the IParsedTfOperations for the nodes connected as inputs of the given node in the graph...</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00615">TfParser.cpp:615</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a4fc55afb4885278ad1510b2c4307af76"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a4fc55afb4885278ad1510b2c4307af76">armnn::optimizations::AddBroadcastReshapeLayer</a></div><div class="ttdeci">OptimizeForType&lt; Layer, AddBroadcastReshapeLayerImpl &gt; AddBroadcastReshapeLayer</div><div class="ttdef"><b>Definition:</b> <a href="_add_broadcast_reshape_layer_8hpp_source.xhtml#l00082">AddBroadcastReshapeLayer.hpp:82</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorInfo::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00191">Tensor.hpp:191</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a0d5cf4cdeeb79d5e4fed01981d734b50"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d5cf4cdeeb79d5e4fed01981d734b50">&#9670;&nbsp;</a></span>ProcessElementwiseLayer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a> ProcessElementwiseLayer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *&#160;</td>
+ <td class="paramname"><em>input0Slot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a> *&#160;</td>
+ <td class="paramname"><em>input1Slot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *const&#160;</td>
+ <td class="paramname"><em>layer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tensorflow::NodeDef &amp;&#160;</td>
+ <td class="paramname"><em>nodeDef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l01868">1868</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_tensor_8cpp_source.xhtml#l00174">TensorShape::GetNumDimensions()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00187">TensorInfo::GetShape()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">IOutputSlot::GetTensorInfo()</a>, <a class="el" href="_tensor_8hpp_source.xhtml#l00189">TensorInfo::SetShape()</a>, and <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l01961">ITfParser::TfParserImpl::ParseMinimum()</a>.</p>
+<div class="fragment"><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;{</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160; input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160; input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(1));</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160;</div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160; <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>();</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160; std::vector&lt;unsigned int&gt; outputShape;</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; input0Shape = input0Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>&amp; input1Shape = input1Slot-&gt;<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">GetTensorInfo</a>().<a class="code" href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">GetShape</a>();</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; input0Shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(); i++)</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160; {</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160; outputShape.push_back(std::max(input0Shape[i], input1Shape[i]));</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160; }</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160; outputInfo.<a class="code" href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">SetShape</a>(<a class="code" href="classarmnn_1_1_tensor_shape.xhtml">TensorShape</a>(input0Shape.<a class="code" href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">GetNumDimensions</a>(), outputShape.data()));</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160; layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;</div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;SingleLayerParsedTfOperation&gt;(<span class="keyword">this</span>, nodeDef, layer);</div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_a8b5d0f8a24e9d9238f412260a552acf8"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#a8b5d0f8a24e9d9238f412260a552acf8">armnn::TensorInfo::GetShape</a></div><div class="ttdeci">const TensorShape &amp; GetShape() const</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00187">Tensor.hpp:187</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml_abe8889e8150beef5fd204b2d87b49298"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml#abe8889e8150beef5fd204b2d87b49298">armnn::TensorInfo::SetShape</a></div><div class="ttdeci">void SetShape(const TensorShape &amp;newShape)</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00189">Tensor.hpp:189</a></div></div>
+<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml_a157e27d41e9f6b21f0d3c025fa47dc24"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml#a157e27d41e9f6b21f0d3c025fa47dc24">armnn::TensorShape::GetNumDimensions</a></div><div class="ttdeci">unsigned int GetNumDimensions() const</div><div class="ttdoc">Function that returns the tensor rank. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8cpp_source.xhtml#l00174">Tensor.cpp:174</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a9943775a364fc4ab53b85ac88f311886"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a9943775a364fc4ab53b85ac88f311886">armnn::IOutputSlot::GetTensorInfo</a></div><div class="ttdeci">virtual const TensorInfo &amp; GetTensorInfo() const =0</div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
+<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="acbdfb887feb642038726a828bd748ff3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acbdfb887feb642038726a828bd748ff3">&#9670;&nbsp;</a></span>ResolveIdentityNode()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const tensorflow::NodeDef * ResolveIdentityNode </td>
+ <td>(</td>
+ <td class="paramtype">const tensorflow::NodeDef *&#160;</td>
+ <td class="paramname"><em>nodeDef</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Handling identity layers as the input for Conv2D layer. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l00546">546</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, and <a class="el" href="_tf_parser_8hpp_source.xhtml#l00265">ITfParser::TfParserImpl::m_NodesByName</a>.</p>
+<div class="fragment"><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160;{</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">if</span> (nodeDef-&gt;op() != <span class="stringliteral">&quot;Identity&quot;</span>)</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; {</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">return</span> nodeDef;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; }</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">if</span> (nodeDef-&gt;input_size() != 1)</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; {</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; fmt::format(<span class="stringliteral">&quot;Identity node should have a single input! {} has {} inputs {}&quot;</span>,</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; nodeDef-&gt;name(),</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; nodeDef-&gt;input_size(),</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; }</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keyword">auto</span> it = <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">m_NodesByName</a>.find(nodeDef-&gt;input(0));</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">if</span> (it != <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">m_NodesByName</a>.end())</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; {</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="keyword">const</span> tensorflow::NodeDef* inputNode = it-&gt;second;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#acbdfb887feb642038726a828bd748ff3">ResolveIdentityNode</a>(inputNode);</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; }</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; fmt::format(<span class="stringliteral">&quot;Cannot find what the Identity node {} is linked to! {}&quot;</span>,</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; nodeDef-&gt;name(),</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_acbdfb887feb642038726a828bd748ff3"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#acbdfb887feb642038726a828bd748ff3">armnnTfParser::ITfParser::TfParserImpl::ResolveIdentityNode</a></div><div class="ttdeci">const tensorflow::NodeDef * ResolveIdentityNode(const tensorflow::NodeDef *nodeDef)</div><div class="ttdoc">Handling identity layers as the input for Conv2D layer. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l00546">TfParser.cpp:546</a></div></div>
+<div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ac2c326b2757eadec924e4b7f56a9379c"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac2c326b2757eadec924e4b7f56a9379c">armnnTfParser::ITfParser::TfParserImpl::m_NodesByName</a></div><div class="ttdeci">std::unordered_map&lt; std::string, const tensorflow::NodeDef * &gt; m_NodesByName</div><div class="ttdoc">Map of nodes extracted from the GraphDef to speed up parsing. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00265">TfParser.hpp:265</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a5f5e6255b21fdf458d3733bbdcdc4af5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5f5e6255b21fdf458d3733bbdcdc4af5">&#9670;&nbsp;</a></span>TrackBindingPoint()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void TrackBindingPoint </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *&#160;</td>
+ <td class="paramname"><em>layer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a>&#160;</td>
+ <td class="paramname"><em>id</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>tensorInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>bindingPointDesc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::unordered_map&lt; std::string, <a class="el" href="namespacearmnn_tf_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>nameToBindingInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03718">3718</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_exceptions_8hpp_source.xhtml#l00197">CHECK_LOCATION</a>, and <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#afcc1c3a20bd2860e0ddd21674389246f">IConnectableLayer::GetName()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03704">ITfParser::TfParserImpl::TrackInputBinding()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03711">ITfParser::TfParserImpl::TrackOutputBinding()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03723"></a><span class="lineno"> 3723</span>&#160;{</div><div class="line"><a name="l03724"></a><span class="lineno"> 3724</span>&#160; <span class="keyword">const</span> std::string layerName = layer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#afcc1c3a20bd2860e0ddd21674389246f">GetName</a>();</div><div class="line"><a name="l03725"></a><span class="lineno"> 3725</span>&#160; <span class="keyword">auto</span> it = nameToBindingInfo.find(layerName);</div><div class="line"><a name="l03726"></a><span class="lineno"> 3726</span>&#160; <span class="keywordflow">if</span> (it == nameToBindingInfo.end())</div><div class="line"><a name="l03727"></a><span class="lineno"> 3727</span>&#160; {</div><div class="line"><a name="l03728"></a><span class="lineno"> 3728</span>&#160; nameToBindingInfo[layerName] = std::make_pair(<span class="keywordtype">id</span>, tensorInfo);</div><div class="line"><a name="l03729"></a><span class="lineno"> 3729</span>&#160; }</div><div class="line"><a name="l03730"></a><span class="lineno"> 3730</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l03731"></a><span class="lineno"> 3731</span>&#160; {</div><div class="line"><a name="l03732"></a><span class="lineno"> 3732</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_parse_exception.xhtml">ParseException</a>(</div><div class="line"><a name="l03733"></a><span class="lineno"> 3733</span>&#160; fmt::format(<span class="stringliteral">&quot;Id {} used by more than one {} layer {}&quot;</span>,</div><div class="line"><a name="l03734"></a><span class="lineno"> 3734</span>&#160; <span class="keywordtype">id</span>,</div><div class="line"><a name="l03735"></a><span class="lineno"> 3735</span>&#160; bindingPointDesc,</div><div class="line"><a name="l03736"></a><span class="lineno"> 3736</span>&#160; <a class="code" href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a>().AsString()));</div><div class="line"><a name="l03737"></a><span class="lineno"> 3737</span>&#160; }</div><div class="line"><a name="l03738"></a><span class="lineno"> 3738</span>&#160;}</div><div class="ttc" id="_exceptions_8hpp_xhtml_aa3be76aec4ce713822a5ea1ecbb7bc61"><div class="ttname"><a href="_exceptions_8hpp.xhtml#aa3be76aec4ce713822a5ea1ecbb7bc61">CHECK_LOCATION</a></div><div class="ttdeci">#define CHECK_LOCATION()</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00197">Exceptions.hpp:197</a></div></div>
+<div class="ttc" id="classarmnn_1_1_parse_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_parse_exception.xhtml">armnn::ParseException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00092">Exceptions.hpp:92</a></div></div>
+<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_afcc1c3a20bd2860e0ddd21674389246f"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#afcc1c3a20bd2860e0ddd21674389246f">armnn::IConnectableLayer::GetName</a></div><div class="ttdeci">virtual const char * GetName() const =0</div><div class="ttdoc">Returns the name of the layer. </div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a2a1112c66d08e3760ecccf39c7854a90"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2a1112c66d08e3760ecccf39c7854a90">&#9670;&nbsp;</a></span>TrackInputBinding()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void TrackInputBinding </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *&#160;</td>
+ <td class="paramname"><em>layer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a>&#160;</td>
+ <td class="paramname"><em>id</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>tensorInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03704">3704</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8hpp_source.xhtml#l00270">ITfParser::TfParserImpl::m_NetworkInputsBindingInfo</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03718">ITfParser::TfParserImpl::TrackBindingPoint()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l02718">ITfParser::TfParserImpl::ParsePlaceholder()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03707"></a><span class="lineno"> 3707</span>&#160;{</div><div class="line"><a name="l03708"></a><span class="lineno"> 3708</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a5f5e6255b21fdf458d3733bbdcdc4af5">TrackBindingPoint</a>(layer, <span class="keywordtype">id</span>, tensorInfo, <span class="stringliteral">&quot;input&quot;</span>, <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac62e2558c14e01605f2b4e1e21cdd1e8">m_NetworkInputsBindingInfo</a>);</div><div class="line"><a name="l03709"></a><span class="lineno"> 3709</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a5f5e6255b21fdf458d3733bbdcdc4af5"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a5f5e6255b21fdf458d3733bbdcdc4af5">armnnTfParser::ITfParser::TfParserImpl::TrackBindingPoint</a></div><div class="ttdeci">static void TrackBindingPoint(armnn::IConnectableLayer *layer, armnn::LayerBindingId id, const armnn::TensorInfo &amp;tensorInfo, const char *bindingPointDesc, std::unordered_map&lt; std::string, BindingPointInfo &gt; &amp;nameToBindingInfo)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03718">TfParser.cpp:3718</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_ac62e2558c14e01605f2b4e1e21cdd1e8"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#ac62e2558c14e01605f2b4e1e21cdd1e8">armnnTfParser::ITfParser::TfParserImpl::m_NetworkInputsBindingInfo</a></div><div class="ttdeci">std::unordered_map&lt; std::string, BindingPointInfo &gt; m_NetworkInputsBindingInfo</div><div class="ttdoc">Maps input layer names to their corresponding ids and tensor info. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00270">TfParser.hpp:270</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<a id="a0c98e07875a82c71c65bbb53eb347561"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0c98e07875a82c71c65bbb53eb347561">&#9670;&nbsp;</a></span>TrackOutputBinding()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void TrackOutputBinding </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a> *&#160;</td>
+ <td class="paramname"><em>layer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="namespacearmnn.xhtml#ab8cf8f9fb6792e654c2d8d8382f6f01b">armnn::LayerBindingId</a>&#160;</td>
+ <td class="paramname"><em>id</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a> &amp;&#160;</td>
+ <td class="paramname"><em>tensorInfo</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8cpp_source.xhtml#l03711">3711</a> of file <a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a>.</p>
+
+<p class="reference">References <a class="el" href="_tf_parser_8hpp_source.xhtml#l00273">ITfParser::TfParserImpl::m_NetworkOutputsBindingInfo</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03718">ITfParser::TfParserImpl::TrackBindingPoint()</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03413">ITfParser::TfParserImpl::LoadNodeDef()</a>.</p>
+<div class="fragment"><div class="line"><a name="l03714"></a><span class="lineno"> 3714</span>&#160;{</div><div class="line"><a name="l03715"></a><span class="lineno"> 3715</span>&#160; <span class="keywordflow">return</span> <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a5f5e6255b21fdf458d3733bbdcdc4af5">TrackBindingPoint</a>(layer, <span class="keywordtype">id</span>, tensorInfo, <span class="stringliteral">&quot;output&quot;</span>, <a class="code" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a62d6d6cba9ed0d3ad63fffb40aec86b5">m_NetworkOutputsBindingInfo</a>);</div><div class="line"><a name="l03716"></a><span class="lineno"> 3716</span>&#160;}</div><div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a5f5e6255b21fdf458d3733bbdcdc4af5"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a5f5e6255b21fdf458d3733bbdcdc4af5">armnnTfParser::ITfParser::TfParserImpl::TrackBindingPoint</a></div><div class="ttdeci">static void TrackBindingPoint(armnn::IConnectableLayer *layer, armnn::LayerBindingId id, const armnn::TensorInfo &amp;tensorInfo, const char *bindingPointDesc, std::unordered_map&lt; std::string, BindingPointInfo &gt; &amp;nameToBindingInfo)</div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8cpp_source.xhtml#l03718">TfParser.cpp:3718</a></div></div>
+<div class="ttc" id="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl_xhtml_a62d6d6cba9ed0d3ad63fffb40aec86b5"><div class="ttname"><a href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a62d6d6cba9ed0d3ad63fffb40aec86b5">armnnTfParser::ITfParser::TfParserImpl::m_NetworkOutputsBindingInfo</a></div><div class="ttdeci">std::unordered_map&lt; std::string, BindingPointInfo &gt; m_NetworkOutputsBindingInfo</div><div class="ttdoc">Maps output layer names to their corresponding ids and tensor info. </div><div class="ttdef"><b>Definition:</b> <a href="_tf_parser_8hpp_source.xhtml#l00273">TfParser.hpp:273</a></div></div>
+</div><!-- fragment -->
+</div>
+</div>
+<h2 class="groupheader">Member Data Documentation</h2>
+<a id="a9414a632d2c86615287df33c0828f903"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9414a632d2c86615287df33c0828f903">&#9670;&nbsp;</a></span>m_ControlInputs</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const std::list&lt; std::string &gt; m_ControlInputs</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<b>Initial value:</b><div class="fragment"><div class="line">= {</div><div class="line"> <span class="stringliteral">&quot;Assert&quot;</span></div><div class="line">}</div></div><!-- fragment -->
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8hpp_source.xhtml#l00259">259</a> of file <a class="el" href="_tf_parser_8hpp_source.xhtml">TfParser.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03413">ITfParser::TfParserImpl::LoadNodeDef()</a>.</p>
+
+</div>
+</div>
+<a id="a76ea67f3f7d1d5835c5a92b65dc0854c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a76ea67f3f7d1d5835c5a92b65dc0854c">&#9670;&nbsp;</a></span>m_InputShapes</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::map&lt;std::string, <a class="el" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>&gt; m_InputShapes</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8hpp_source.xhtml#l00261">261</a> of file <a class="el" href="_tf_parser_8hpp_source.xhtml">TfParser.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03669">ITfParser::TfParserImpl::Cleanup()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03639">ITfParser::TfParserImpl::CreateNetworkFromGraphDef()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03486">ITfParser::TfParserImpl::LoadGraphDef()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l02718">ITfParser::TfParserImpl::ParsePlaceholder()</a>.</p>
+
+</div>
+</div>
+<a id="a2db3ae8d422f17d455e0ba0cb6291d2a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2db3ae8d422f17d455e0ba0cb6291d2a">&#9670;&nbsp;</a></span>m_Network</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a> m_Network</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The network we're building. Gets cleared after it is passed to the user. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8hpp_source.xhtml#l00251">251</a> of file <a class="el" href="_tf_parser_8hpp_source.xhtml">TfParser.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l02984">ITfParser::TfParserImpl::AddActivationLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03118">ITfParser::TfParserImpl::AddAdditionLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03315">ITfParser::TfParserImpl::AddFullyConnectedLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03236">ITfParser::TfParserImpl::AddMaximumLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03279">ITfParser::TfParserImpl::AddMultiplicationLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03198">ITfParser::TfParserImpl::AddRealDivLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00650">ITfParser::TfParserImpl::CreateAdditionLayer()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03639">ITfParser::TfParserImpl::CreateNetworkFromGraphDef()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03413">ITfParser::TfParserImpl::LoadNodeDef()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02266">ITfParser::TfParserImpl::ParseConcat()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01213">ITfParser::TfParserImpl::ParseConv2D()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01341">ITfParser::TfParserImpl::ParseDepthwiseConv2D()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01947">ITfParser::TfParserImpl::ParseEqual()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01535">ITfParser::TfParserImpl::ParseExpandDims()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01618">ITfParser::TfParserImpl::ParseFusedBatchNorm()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01894">ITfParser::TfParserImpl::ParseGather()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01933">ITfParser::TfParserImpl::ParseGreater()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02578">ITfParser::TfParserImpl::ParseLrn()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01759">ITfParser::TfParserImpl::ParseMaximum()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02634">ITfParser::TfParserImpl::ParseMean()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01961">ITfParser::TfParserImpl::ParseMinimum()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02195">ITfParser::TfParserImpl::ParsePad()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02718">ITfParser::TfParserImpl::ParsePlaceholder()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03009">ITfParser::TfParserImpl::ParsePooling2d()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02389">ITfParser::TfParserImpl::ParseReshape()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02426">ITfParser::TfParserImpl::ParseResizeBilinear()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02787">ITfParser::TfParserImpl::ParseRsqrt()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02804">ITfParser::TfParserImpl::ParseSoftmax()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02821">ITfParser::TfParserImpl::ParseSplit()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02557">ITfParser::TfParserImpl::ParseSqueeze()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02015">ITfParser::TfParserImpl::ParseStack()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02923">ITfParser::TfParserImpl::ParseStridedSlice()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01974">ITfParser::TfParserImpl::ParseSub()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02101">ITfParser::TfParserImpl::ParseTranspose()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l01807">ITfParser::TfParserImpl::ProcessElementwiseInputSlots()</a>.</p>
+
+</div>
+</div>
+<a id="ac62e2558c14e01605f2b4e1e21cdd1e8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac62e2558c14e01605f2b4e1e21cdd1e8">&#9670;&nbsp;</a></span>m_NetworkInputsBindingInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::unordered_map&lt;std::string, <a class="el" href="namespacearmnn_tf_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a>&gt; m_NetworkInputsBindingInfo</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maps input layer names to their corresponding ids and tensor info. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8hpp_source.xhtml#l00270">270</a> of file <a class="el" href="_tf_parser_8hpp_source.xhtml">TfParser.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03678">ITfParser::TfParserImpl::GetNetworkInputBindingInfo()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03486">ITfParser::TfParserImpl::LoadGraphDef()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l02718">ITfParser::TfParserImpl::ParsePlaceholder()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03704">ITfParser::TfParserImpl::TrackInputBinding()</a>.</p>
+
+</div>
+</div>
+<a id="a62d6d6cba9ed0d3ad63fffb40aec86b5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a62d6d6cba9ed0d3ad63fffb40aec86b5">&#9670;&nbsp;</a></span>m_NetworkOutputsBindingInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::unordered_map&lt;std::string, <a class="el" href="namespacearmnn_tf_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a>&gt; m_NetworkOutputsBindingInfo</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maps output layer names to their corresponding ids and tensor info. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8hpp_source.xhtml#l00273">273</a> of file <a class="el" href="_tf_parser_8hpp_source.xhtml">TfParser.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03683">ITfParser::TfParserImpl::GetNetworkOutputBindingInfo()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03486">ITfParser::TfParserImpl::LoadGraphDef()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03413">ITfParser::TfParserImpl::LoadNodeDef()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03711">ITfParser::TfParserImpl::TrackOutputBinding()</a>.</p>
+
+</div>
+</div>
+<a id="ac2c326b2757eadec924e4b7f56a9379c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac2c326b2757eadec924e4b7f56a9379c">&#9670;&nbsp;</a></span>m_NodesByName</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::unordered_map&lt;std::string, const tensorflow::NodeDef*&gt; m_NodesByName</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Map of nodes extracted from the GraphDef to speed up parsing. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8hpp_source.xhtml#l00265">265</a> of file <a class="el" href="_tf_parser_8hpp_source.xhtml">TfParser.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03669">ITfParser::TfParserImpl::Cleanup()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00578">ITfParser::TfParserImpl::GetTfInputNodes()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03486">ITfParser::TfParserImpl::LoadGraphDef()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l00546">ITfParser::TfParserImpl::ResolveIdentityNode()</a>.</p>
+
+</div>
+</div>
+<a id="a8dd5c5f271f0f5bd68612e7927d94e58"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8dd5c5f271f0f5bd68612e7927d94e58">&#9670;&nbsp;</a></span>m_ParsedTfOperations</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::unordered_map&lt;std::string, <a class="el" href="namespacearmnn_tf_parser.xhtml#aa36bf288c19fe35767bb6e059636f405">ParsedTfOperationPtr</a>&gt; m_ParsedTfOperations</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8hpp_source.xhtml#l00267">267</a> of file <a class="el" href="_tf_parser_8hpp_source.xhtml">TfParser.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03669">ITfParser::TfParserImpl::Cleanup()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l00615">ITfParser::TfParserImpl::GetInputParsedTfOperationsChecked()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l01182">ITfParser::TfParserImpl::HasParsedConstTensor()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03413">ITfParser::TfParserImpl::LoadNodeDef()</a>.</p>
+
+</div>
+</div>
+<a id="a86cb41745deebd9b0ccf157d97d4d9ca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a86cb41745deebd9b0ccf157d97d4d9ca">&#9670;&nbsp;</a></span>m_RequestedOutputs</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt;std::string&gt; m_RequestedOutputs</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8hpp_source.xhtml#l00262">262</a> of file <a class="el" href="_tf_parser_8hpp_source.xhtml">TfParser.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03669">ITfParser::TfParserImpl::Cleanup()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03639">ITfParser::TfParserImpl::CreateNetworkFromGraphDef()</a>, <a class="el" href="_tf_parser_8cpp_source.xhtml#l03486">ITfParser::TfParserImpl::LoadGraphDef()</a>, and <a class="el" href="_tf_parser_8cpp_source.xhtml#l03413">ITfParser::TfParserImpl::LoadNodeDef()</a>.</p>
+
+</div>
+</div>
+<a id="a4b6b3a1fd0ce13ce7d6e3b4342f852c9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4b6b3a1fd0ce13ce7d6e3b4342f852c9">&#9670;&nbsp;</a></span>ms_OperationNameToParsingFunctions</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const std::map&lt; std::string, <a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml#a82733f14dce0abd22e6d5a79a0a6b936">ITfParser::TfParserImpl::OperationParsingFunction</a> &gt; ms_OperationNameToParsingFunctions</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Map of TensorFlow operation names to parsing member functions. </p>
+
+<p class="definition">Definition at line <a class="el" href="_tf_parser_8hpp_source.xhtml#l00257">257</a> of file <a class="el" href="_tf_parser_8hpp_source.xhtml">TfParser.hpp</a>.</p>
+
+<p class="reference">Referenced by <a class="el" href="_tf_parser_8cpp_source.xhtml#l03413">ITfParser::TfParserImpl::LoadNodeDef()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li>src/armnnTfParser/<a class="el" href="_tf_parser_8hpp_source.xhtml">TfParser.hpp</a></li>
+<li>src/armnnTfParser/<a class="el" href="_tf_parser_8cpp_source.xhtml">TfParser.cpp</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="namespacearmnn_tf_parser.xhtml">armnnTfParser</a></li><li class="navelem"><a class="el" href="classarmnn_tf_parser_1_1_i_tf_parser.xhtml">ITfParser</a></li><li class="navelem"><a class="el" href="structarmnn_tf_parser_1_1_i_tf_parser_1_1_tf_parser_impl.xhtml">TfParserImpl</a></li>
+ <li class="footer">Generated on Thu Feb 25 2021 17:28:03 for ArmNN by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>