| <!DOCTYPE html> |
| |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"/> |
| <meta content="IE=edge" http-equiv="X-UA-Compatible"/> |
| <meta content="width=device-width, initial-scale=1" name="viewport"/> |
| <meta content="MXNet Clojure Symbolic API" property="og:title"> |
| <meta content="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/image/og-logo.png" property="og:image"> |
| <meta content="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/image/og-logo.png" property="og:image:secure_url"> |
| <meta content="MXNet Clojure Symbolic API" property="og:description"/> |
| <title>MXNet Clojure Symbolic API — mxnet documentation</title> |
| <link crossorigin="anonymous" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" rel="stylesheet"/> |
| <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet"/> |
| <link href="../../_static/basic.css" rel="stylesheet" type="text/css"> |
| <link href="../../_static/pygments.css" rel="stylesheet" type="text/css"> |
| <link href="../../_static/mxnet.css" rel="stylesheet" type="text/css"/> |
| <script type="text/javascript"> |
| var DOCUMENTATION_OPTIONS = { |
| URL_ROOT: '../../', |
| VERSION: '', |
| COLLAPSE_INDEX: false, |
| FILE_SUFFIX: '.html', |
| HAS_SOURCE: true, |
| SOURCELINK_SUFFIX: '.txt' |
| }; |
| </script> |
| <script src="https://code.jquery.com/jquery-1.11.1.min.js" type="text/javascript"></script> |
| <script src="../../_static/underscore.js" type="text/javascript"></script> |
| <script src="../../_static/searchtools_custom.js" type="text/javascript"></script> |
| <script src="../../_static/doctools.js" type="text/javascript"></script> |
| <script src="../../_static/selectlang.js" type="text/javascript"></script> |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script> |
| <script type="text/javascript"> jQuery(function() { Search.loadIndex("/versions/1.4.1/searchindex.js"); Search.init();}); </script> |
| <script> |
| (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ |
| (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new |
| Date();a=s.createElement(o), |
| m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) |
| })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); |
| |
| ga('create', 'UA-96378503-1', 'auto'); |
| ga('send', 'pageview'); |
| |
| </script> |
| <!-- --> |
| <!-- <script type="text/javascript" src="../../_static/jquery.js"></script> --> |
| <!-- --> |
| <!-- <script type="text/javascript" src="../../_static/underscore.js"></script> --> |
| <!-- --> |
| <!-- <script type="text/javascript" src="../../_static/doctools.js"></script> --> |
| <!-- --> |
| <!-- <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> --> |
| <!-- --> |
| <link href="../../genindex.html" rel="index" title="Index"> |
| <link href="../../search.html" rel="search" title="Search"/> |
| <link href="index.html" rel="up" title="MXNet - Clojure API"/> |
| <link href="../julia/index.html" rel="next" title="MXNet - Julia API"/> |
| <link href="symbol_in_pictures.html" rel="prev" title="Symbolic Configuration and Execution in Pictures"/> |
| <link href="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/image/mxnet-icon.png" rel="icon" type="image/png"/> |
| </link></link></link></meta></meta></meta></head> |
| <body background="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/image/mxnet-background-compressed.jpeg" role="document"> |
| <div class="content-block"><div class="navbar navbar-fixed-top"> |
| <div class="container" id="navContainer"> |
| <div class="innder" id="header-inner"> |
| <h1 id="logo-wrap"> |
| <a href="../../" id="logo"><img src="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/image/mxnet_logo.png"/></a> |
| </h1> |
| <nav class="nav-bar" id="main-nav"> |
| <a class="main-nav-link" href="/versions/1.4.1/install/index.html">Install</a> |
| <span id="dropdown-menu-position-anchor"> |
| <a aria-expanded="true" aria-haspopup="true" class="main-nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button">Gluon <span class="caret"></span></a> |
| <ul class="dropdown-menu navbar-menu" id="package-dropdown-menu"> |
| <li><a class="main-nav-link" href="/versions/1.4.1/tutorials/gluon/gluon.html">About</a></li> |
| <li><a class="main-nav-link" href="https://www.d2l.ai/">Dive into Deep Learning</a></li> |
| <li><a class="main-nav-link" href="https://gluon-cv.mxnet.io">GluonCV Toolkit</a></li> |
| <li><a class="main-nav-link" href="https://gluon-nlp.mxnet.io/">GluonNLP Toolkit</a></li> |
| </ul> |
| </span> |
| <span id="dropdown-menu-position-anchor"> |
| <a aria-expanded="true" aria-haspopup="true" class="main-nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button">API <span class="caret"></span></a> |
| <ul class="dropdown-menu navbar-menu" id="package-dropdown-menu"> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/python/index.html">Python</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/c++/index.html">C++</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/clojure/index.html">Clojure</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/java/index.html">Java</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/julia/index.html">Julia</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/perl/index.html">Perl</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/r/index.html">R</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/scala/index.html">Scala</a></li> |
| </ul> |
| </span> |
| <span id="dropdown-menu-position-anchor-docs"> |
| <a aria-expanded="true" aria-haspopup="true" class="main-nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button">Docs <span class="caret"></span></a> |
| <ul class="dropdown-menu navbar-menu" id="package-dropdown-menu-docs"> |
| <li><a class="main-nav-link" href="/versions/1.4.1/faq/index.html">FAQ</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/tutorials/index.html">Tutorials</a> |
| <li><a class="main-nav-link" href="https://github.com/apache/incubator-mxnet/tree/1.4.1/example">Examples</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/architecture/index.html">Architecture</a></li> |
| <li><a class="main-nav-link" href="https://cwiki.apache.org/confluence/display/MXNET/Apache+MXNet+Home">Developer Wiki</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/model_zoo/index.html">Model Zoo</a></li> |
| <li><a class="main-nav-link" href="https://github.com/onnx/onnx-mxnet">ONNX</a></li> |
| </li></ul> |
| </span> |
| <span id="dropdown-menu-position-anchor-community"> |
| <a aria-expanded="true" aria-haspopup="true" class="main-nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button">Community <span class="caret"></span></a> |
| <ul class="dropdown-menu navbar-menu" id="package-dropdown-menu-community"> |
| <li><a class="main-nav-link" href="http://discuss.mxnet.io">Forum</a></li> |
| <li><a class="main-nav-link" href="https://github.com/apache/incubator-mxnet/tree/1.4.1">Github</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/community/contribute.html">Contribute</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/community/ecosystem.html">Ecosystem</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/community/powered_by.html">Powered By</a></li> |
| </ul> |
| </span> |
| <span id="dropdown-menu-position-anchor-version" style="position: relative"><a href="#" class="main-nav-link dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="true">1.4.1<span class="caret"></span></a><ul id="package-dropdown-menu" class="dropdown-menu"><li><a href="/">master</a></li><li><a href=/versions/1.6/>1.6</a></li><li><a href=/versions/1.5.0/>1.5.0</a></li><li><a href=/versions/1.4.1/>1.4.1</a></li><li><a href=/versions/1.3.1/>1.3.1</a></li><li><a href=/versions/1.2.1/>1.2.1</a></li><li><a href=/versions/1.1.0/>1.1.0</a></li><li><a href=/versions/1.0.0/>1.0.0</a></li><li><a href=/versions/0.12.1/>0.12.1</a></li><li><a href=/versions/0.11.0/>0.11.0</a></li></ul></span></nav> |
| <script> function getRootPath(){ return "../../" } </script> |
| <div class="burgerIcon dropdown"> |
| <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button">☰</a> |
| <ul class="dropdown-menu" id="burgerMenu"> |
| <li><a href="/versions/1.4.1/install/index.html">Install</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/tutorials/index.html">Tutorials</a></li> |
| <li class="dropdown-submenu dropdown"> |
| <a aria-expanded="true" aria-haspopup="true" class="dropdown-toggle burger-link" data-toggle="dropdown" href="#" tabindex="-1">Gluon</a> |
| <ul class="dropdown-menu navbar-menu" id="package-dropdown-menu"> |
| <li><a class="main-nav-link" href="/versions/1.4.1/tutorials/gluon/gluon.html">About</a></li> |
| <li><a class="main-nav-link" href="http://gluon.mxnet.io">The Straight Dope (Tutorials)</a></li> |
| <li><a class="main-nav-link" href="https://gluon-cv.mxnet.io">GluonCV Toolkit</a></li> |
| <li><a class="main-nav-link" href="https://gluon-nlp.mxnet.io/">GluonNLP Toolkit</a></li> |
| </ul> |
| </li> |
| <li class="dropdown-submenu"> |
| <a aria-expanded="true" aria-haspopup="true" class="dropdown-toggle burger-link" data-toggle="dropdown" href="#" tabindex="-1">API</a> |
| <ul class="dropdown-menu"> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/python/index.html">Python</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/c++/index.html">C++</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/clojure/index.html">Clojure</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/java/index.html">Java</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/julia/index.html">Julia</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/perl/index.html">Perl</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/r/index.html">R</a></li> |
| <li><a class="main-nav-link" href="/versions/1.4.1/api/scala/index.html">Scala</a></li> |
| </ul> |
| </li> |
| <li class="dropdown-submenu"> |
| <a aria-expanded="true" aria-haspopup="true" class="dropdown-toggle burger-link" data-toggle="dropdown" href="#" tabindex="-1">Docs</a> |
| <ul class="dropdown-menu"> |
| <li><a href="/versions/1.4.1/faq/index.html" tabindex="-1">FAQ</a></li> |
| <li><a href="/versions/1.4.1/tutorials/index.html" tabindex="-1">Tutorials</a></li> |
| <li><a href="https://github.com/apache/incubator-mxnet/tree/1.4.1/example" tabindex="-1">Examples</a></li> |
| <li><a href="/versions/1.4.1/architecture/index.html" tabindex="-1">Architecture</a></li> |
| <li><a href="https://cwiki.apache.org/confluence/display/MXNET/Apache+MXNet+Home" tabindex="-1">Developer Wiki</a></li> |
| <li><a href="/versions/1.4.1/model_zoo/index.html" tabindex="-1">Gluon Model Zoo</a></li> |
| <li><a href="https://github.com/onnx/onnx-mxnet" tabindex="-1">ONNX</a></li> |
| </ul> |
| </li> |
| <li class="dropdown-submenu dropdown"> |
| <a aria-haspopup="true" class="dropdown-toggle burger-link" data-toggle="dropdown" href="#" role="button" tabindex="-1">Community</a> |
| <ul class="dropdown-menu"> |
| <li><a href="http://discuss.mxnet.io" tabindex="-1">Forum</a></li> |
| <li><a href="https://github.com/apache/incubator-mxnet/tree/1.4.1" tabindex="-1">Github</a></li> |
| <li><a href="/versions/1.4.1/community/contribute.html" tabindex="-1">Contribute</a></li> |
| <li><a href="/versions/1.4.1/community/ecosystem.html" tabindex="-1">Ecosystem</a></li> |
| <li><a href="/versions/1.4.1/community/powered_by.html" tabindex="-1">Powered By</a></li> |
| </ul> |
| </li> |
| <li id="dropdown-menu-position-anchor-version-mobile" class="dropdown-submenu" style="position: relative"><a href="#" tabindex="-1">1.4.1</a><ul class="dropdown-menu"><li><a tabindex="-1" href=/>master</a></li><li><a tabindex="-1" href=/versions/1.6/>1.6</a></li><li><a tabindex="-1" href=/versions/1.5.0/>1.5.0</a></li><li><a tabindex="-1" href=/versions/1.4.1/>1.4.1</a></li><li><a tabindex="-1" href=/versions/1.3.1/>1.3.1</a></li><li><a tabindex="-1" href=/versions/1.2.1/>1.2.1</a></li><li><a tabindex="-1" href=/versions/1.1.0/>1.1.0</a></li><li><a tabindex="-1" href=/versions/1.0.0/>1.0.0</a></li><li><a tabindex="-1" href=/versions/0.12.1/>0.12.1</a></li><li><a tabindex="-1" href=/versions/0.11.0/>0.11.0</a></li></ul></li></ul> |
| </div> |
| <div class="plusIcon dropdown"> |
| <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button"><span aria-hidden="true" class="glyphicon glyphicon-plus"></span></a> |
| <ul class="dropdown-menu dropdown-menu-right" id="plusMenu"></ul> |
| </div> |
| <div id="search-input-wrap"> |
| <form action="../../search.html" autocomplete="off" class="" method="get" role="search"> |
| <div class="form-group inner-addon left-addon"> |
| <i class="glyphicon glyphicon-search"></i> |
| <input class="form-control" name="q" placeholder="Search" type="text"/> |
| </div> |
| <input name="check_keywords" type="hidden" value="yes"> |
| <input name="area" type="hidden" value="default"/> |
| </input></form> |
| <div id="search-preview"></div> |
| </div> |
| <div id="searchIcon"> |
| <span aria-hidden="true" class="glyphicon glyphicon-search"></span> |
| </div> |
| <!-- <div id="lang-select-wrap"> --> |
| <!-- <label id="lang-select-label"> --> |
| <!-- <\!-- <i class="fa fa-globe"></i> -\-> --> |
| <!-- <span></span> --> |
| <!-- </label> --> |
| <!-- <select id="lang-select"> --> |
| <!-- <option value="en">Eng</option> --> |
| <!-- <option value="zh">中文</option> --> |
| <!-- </select> --> |
| <!-- </div> --> |
| <!-- <a id="mobile-nav-toggle"> |
| <span class="mobile-nav-toggle-bar"></span> |
| <span class="mobile-nav-toggle-bar"></span> |
| <span class="mobile-nav-toggle-bar"></span> |
| </a> --> |
| </div> |
| </div> |
| </div> |
| <script type="text/javascript"> |
| $('body').css('background', 'white'); |
| </script> |
| <div class="container"> |
| <div class="row"> |
| <div aria-label="main navigation" class="sphinxsidebar leftsidebar" role="navigation"> |
| <div class="sphinxsidebarwrapper"> |
| <ul class="current"> |
| <li class="toctree-l1 current"><a class="reference internal" href="../index.html">MXNet APIs</a><ul class="current"> |
| <li class="toctree-l2"><a class="reference internal" href="../c++/index.html">MXNet - C++ API</a></li> |
| <li class="toctree-l2 current"><a class="reference internal" href="index.html">MXNet - Clojure API</a><ul class="current"> |
| <li class="toctree-l3"><a class="reference internal" href="kvstore.html">KVStore API</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="module.html">Module API</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="ndarray.html">NDArray API</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="symbol_in_pictures.html">Symbolic Configuration and Execution in Pictures</a></li> |
| <li class="toctree-l3 current"><a class="current reference internal" href="#">MXNet Clojure Symbolic API</a><ul> |
| <li class="toctree-l4"><a class="reference internal" href="#how-to-compose-symbols">How to Compose Symbols</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#more-complicated-compositions">More Complicated Compositions</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#group-multiple-symbols">Group Multiple Symbols</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#serialization">Serialization</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#executing-symbols">Executing Symbols</a></li> |
| <li class="toctree-l4"><a class="reference internal" href="#next-steps">Next Steps</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l3"><a class="reference internal" href="index.html#tensor-and-matrix-computations">Tensor and Matrix Computations</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="index.html#clojure-api-tutorials">Clojure API Tutorials</a></li> |
| <li class="toctree-l3"><a class="reference internal" href="index.html#related-resources">Related Resources</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l2"><a class="reference internal" href="../julia/index.html">MXNet - Julia API</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../perl/index.html">MXNet - Perl API</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../python/index.html">MXNet - Python API</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../r/index.html">MXNet - R API</a></li> |
| <li class="toctree-l2"><a class="reference internal" href="../scala/index.html">MXNet - Scala API</a></li> |
| </ul> |
| </li> |
| <li class="toctree-l1"><a class="reference internal" href="../../architecture/index.html">MXNet Architecture</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../community/index.html">MXNet Community</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../faq/index.html">MXNet FAQ</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../gluon/index.html">About Gluon</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../install/index.html">Installing MXNet</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../install/index.html#nvidia-jetson-tx-family">Nvidia Jetson TX family</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../install/index.html#source-download">Source Download</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../model_zoo/index.html">MXNet Model Zoo</a></li> |
| <li class="toctree-l1"><a class="reference internal" href="../../tutorials/index.html">Tutorials</a></li> |
| </ul> |
| </div> |
| </div> |
| <div class="content"> |
| <div class="page-tracker"></div> |
| <!--- Licensed to the Apache Software Foundation (ASF) under one --> |
| <!--- or more contributor license agreements. See the NOTICE file --> |
| <!--- distributed with this work for additional information --> |
| <!--- regarding copyright ownership. The ASF licenses this file --> |
| <!--- to you under the Apache License, Version 2.0 (the --> |
| <!--- "License"); you may not use this file except in compliance --> |
| <!--- with the License. You may obtain a copy of the License at --><!--- http://www.apache.org/licenses/LICENSE-2.0 --><!--- Unless required by applicable law or agreed to in writing, --> |
| <!--- software distributed under the License is distributed on an --> |
| <!--- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY --> |
| <!--- KIND, either express or implied. See the License for the --> |
| <!--- specific language governing permissions and limitations --> |
| <!--- under the License. --><div class="section" id="mxnet-clojure-symbolic-api"> |
| <span id="mxnet-clojure-symbolic-api"></span><h1>MXNet Clojure Symbolic API<a class="headerlink" href="#mxnet-clojure-symbolic-api" title="Permalink to this headline">¶</a></h1> |
| <p>Topics:</p> |
| <ul class="simple"> |
| <li><a class="reference external" href="#how-to-compose-symbols">How to Compose Symbols</a></li> |
| <li><a class="reference external" href="#more-complicated-compositions">More Complicated Compositions</a></li> |
| <li><a class="reference external" href="#group-multiple-symbols">Group Multiple Symbols</a></li> |
| <li><a class="reference external" href="#serialization">Serialization</a></li> |
| <li><a class="reference external" href="#executing-symbols">Executing Symbols</a></li> |
| <li><a class="reference external" href="/versions/1.4.1/api/clojure/docs/org.apache.clojure-mxnet.symbol.html">Symbol API Reference</a></li> |
| </ul> |
| <p>We also highly encourage you to read <a class="reference internal" href="symbol_in_pictures.html"><span class="doc">Symbolic Configuration and Execution in Pictures</span></a>.</p> |
| <p>To follow along with this documentation, you can use this namespace to with the following requirements:</p> |
| <div class="highlight-clojure"><div class="highlight"><pre><span></span><span class="p">(</span><span class="kd">ns </span><span class="nv">docs.symbol</span> |
| <span class="p">(</span><span class="ss">:require</span> <span class="p">[</span><span class="nv">org.apache.clojure-mxnet.executor</span> <span class="ss">:as</span> <span class="nv">executor</span><span class="p">]</span> |
| <span class="p">[</span><span class="nv">org.apache.clojure-mxnet.ndarray</span> <span class="ss">:as</span> <span class="nv">ndarray</span><span class="p">]</span> |
| <span class="p">[</span><span class="nv">org.apache.clojure-mxnet.symbol</span> <span class="ss">:as</span> <span class="nv">sym</span><span class="p">]</span> |
| <span class="p">[</span><span class="nv">org.apache.clojure-mxnet.context</span> <span class="ss">:as</span> <span class="nv">context</span><span class="p">]))</span> |
| </pre></div> |
| </div> |
| <div class="section" id="how-to-compose-symbols"> |
| <span id="how-to-compose-symbols"></span><h2>How to Compose Symbols<a class="headerlink" href="#how-to-compose-symbols" title="Permalink to this headline">¶</a></h2> |
| <p>The Symbolic API provides a way to configure computation graphs. |
| You can configure the graphs either at the level of neural network layer operations or as fine-grained operations.</p> |
| <p>The following example configures a two-layer neural network.</p> |
| <div class="highlight-clojure"><div class="highlight"><pre><span></span><span class="p">(</span><span class="k">def </span><span class="nv">data</span> <span class="p">(</span><span class="nf">sym/variable</span> <span class="s">"data"</span><span class="p">))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">fc1</span> <span class="p">(</span><span class="nf">sym/fully-connected</span> <span class="s">"fc1"</span> <span class="p">{</span><span class="ss">:data</span> <span class="nv">data</span> <span class="ss">:num-hidden</span> <span class="mi">128</span><span class="p">}))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">act1</span> <span class="p">(</span><span class="nf">sym/activation</span> <span class="s">"act1"</span> <span class="p">{</span><span class="ss">:data</span> <span class="nv">fc1</span> <span class="ss">:act-type</span> <span class="s">"relu"</span><span class="p">}))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">fc2</span> <span class="p">(</span><span class="nf">sym/fully-connected</span> <span class="s">"fc2"</span> <span class="p">{</span><span class="ss">:data</span> <span class="nv">act1</span> <span class="ss">:num-hidden</span> <span class="mi">64</span><span class="p">}))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">net</span> <span class="p">(</span><span class="nf">sym/softmax-output</span> <span class="s">"out"</span> <span class="p">{</span><span class="ss">:data</span> <span class="nv">fc2</span><span class="p">}))</span> |
| </pre></div> |
| </div> |
| <p>This can also be combined more dynamically with the <code class="docutils literal"><span class="pre">as-></span></code> Clojure threading form.</p> |
| <div class="highlight-clojure"><div class="highlight"><pre><span></span><span class="p">(</span><span class="nf">as-></span> <span class="p">(</span><span class="nf">sym/variable</span> <span class="s">"data"</span><span class="p">)</span> <span class="nv">data</span> |
| <span class="p">(</span><span class="nf">sym/fully-connected</span> <span class="s">"fc1"</span> <span class="p">{</span><span class="ss">:data</span> <span class="nv">data</span> <span class="ss">:num-hidden</span> <span class="mi">128</span><span class="p">})</span> |
| <span class="p">(</span><span class="nf">sym/activation</span> <span class="s">"act1"</span> <span class="p">{</span><span class="ss">:data</span> <span class="nv">data</span> <span class="ss">:act-type</span> <span class="s">"relu"</span><span class="p">})</span> |
| <span class="p">(</span><span class="nf">sym/fully-connected</span> <span class="s">"fc2"</span> <span class="p">{</span><span class="ss">:data</span> <span class="nv">data</span> <span class="ss">:num-hidden</span> <span class="mi">64</span><span class="p">})</span> |
| <span class="p">(</span><span class="nf">sym/softmax-output</span> <span class="s">"out"</span> <span class="p">{</span><span class="ss">:data</span> <span class="nv">data</span><span class="p">}))</span> |
| |
| <span class="nv">net</span> <span class="c1">;=> #object[org.apache.mxnet.Symbol 0x5c78c8c2 "org.apache.mxnet.Symbol@5c78c8c2"] </span> |
| </pre></div> |
| </div> |
| <p>The basic arithmetic operators (plus, minus, div, multiplication) work as expected.</p> |
| <p>The following example creates a computation graph that adds two inputs together.</p> |
| <div class="highlight-clojure"><div class="highlight"><pre><span></span><span class="p">(</span><span class="k">def </span><span class="nv">a</span> <span class="p">(</span><span class="nf">sym/variable</span> <span class="s">"a"</span><span class="p">))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">b</span> <span class="p">(</span><span class="nf">sym/variable</span> <span class="s">"b"</span><span class="p">))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">c</span> <span class="p">(</span><span class="nf">sym/+</span> <span class="nv">a</span> <span class="nv">b</span><span class="p">))</span> |
| </pre></div> |
| </div> |
| </div> |
| <div class="section" id="more-complicated-compositions"> |
| <span id="more-complicated-compositions"></span><h2>More Complicated Compositions<a class="headerlink" href="#more-complicated-compositions" title="Permalink to this headline">¶</a></h2> |
| <p>MXNet provides well-optimized symbols for layers commonly used in deep learning (see src/operator). We can also define new operators in Python. The following example first performs an element-wise add between two symbols, then feeds them to the fully connected operator:</p> |
| <div class="highlight-clojure"><div class="highlight"><pre><span></span><span class="p">(</span><span class="k">def </span><span class="nv">lhs</span> <span class="p">(</span><span class="nf">sym/variable</span> <span class="s">"data1"</span><span class="p">))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">rhs</span> <span class="p">(</span><span class="nf">sym/variable</span> <span class="s">"data2"</span><span class="p">))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">net</span> <span class="p">(</span><span class="nf">sym/fully-connected</span> <span class="s">"fc1"</span> <span class="p">{</span><span class="ss">:data</span> <span class="p">(</span><span class="nf">sym/+</span> <span class="nv">lhs</span> <span class="nv">rhs</span><span class="p">)</span> <span class="ss">:num-hidden</span> <span class="mi">128</span><span class="p">}))</span> |
| <span class="p">(</span><span class="nf">sym/list-arguments</span> <span class="nv">net</span><span class="p">)</span> <span class="c1">;=> ["data1" "data2" "fc1_weight" "fc1_bias"]</span> |
| </pre></div> |
| </div> |
| </div> |
| <div class="section" id="group-multiple-symbols"> |
| <span id="group-multiple-symbols"></span><h2>Group Multiple Symbols<a class="headerlink" href="#group-multiple-symbols" title="Permalink to this headline">¶</a></h2> |
| <p>To construct neural networks with multiple loss layers, we can use <code class="docutils literal"><span class="pre">group</span></code> to group multiple symbols together. The following example groups two outputs:</p> |
| <div class="highlight-clojure"><div class="highlight"><pre><span></span><span class="p">(</span><span class="k">def </span><span class="nv">net</span> <span class="p">(</span><span class="nf">sym/variable</span> <span class="s">"data"</span><span class="p">))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">fc1</span> <span class="p">(</span><span class="nf">sym/fully-connected</span> <span class="p">{</span><span class="ss">:data</span> <span class="nv">net</span> <span class="ss">:num-hidden</span> <span class="mi">128</span><span class="p">}))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">net2</span> <span class="p">(</span><span class="nf">sym/activation</span> <span class="p">{</span><span class="ss">:data</span> <span class="nv">fc1</span> <span class="ss">:act-type</span> <span class="s">"relu"</span><span class="p">}))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">out1</span> <span class="p">(</span><span class="nf">sym/softmax-output</span> <span class="p">{</span><span class="ss">:data</span> <span class="nv">net2</span><span class="p">}))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">out2</span> <span class="p">(</span><span class="nf">sym/linear-regression-output</span> <span class="p">{</span><span class="ss">:data</span> <span class="nv">net2</span><span class="p">}))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">group</span> <span class="p">(</span><span class="nf">sym/group</span> <span class="p">[</span><span class="nv">out1</span> <span class="nv">out2</span><span class="p">]))</span> |
| <span class="p">(</span><span class="nf">sym/list-outputs</span> <span class="nv">group</span><span class="p">)</span> |
| <span class="c1">;=> ["softmaxoutput0_output" "linearregressionoutput0_output"]</span> |
| </pre></div> |
| </div> |
| </div> |
| <div class="section" id="serialization"> |
| <span id="serialization"></span><h2>Serialization<a class="headerlink" href="#serialization" title="Permalink to this headline">¶</a></h2> |
| <p>You can use the <a class="reference external" href="docs/org.apache.clojure-mxnet.symbol.html#var-save"><code class="docutils literal"><span class="pre">save</span></code></a> and <a class="reference external" href="docs/org.apache.clojure-mxnet.symbol.html#var-load"><code class="docutils literal"><span class="pre">load</span></code></a> functions to serialize the Symbol objects. The advantage of using save and load functions is that it is language agnostic and cloud friendly. The symbol is saved in JSON format. You can also get a JSON string directly using mxnet.Symbol.toJson. Refer to API documentation for more details.</p> |
| <p>The following example shows how to save a symbol to a file, load it back, and compare two symbols using a JSON string. You can also save to S3 as well</p> |
| <div class="highlight-clojure"><div class="highlight"><pre><span></span><span class="p">(</span><span class="k">def </span><span class="nv">a</span> <span class="p">(</span><span class="nf">sym/variable</span> <span class="s">"a"</span><span class="p">))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">b</span> <span class="p">(</span><span class="nf">sym/variable</span> <span class="s">"b"</span><span class="p">))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">c</span> <span class="p">(</span><span class="nf">sym/+</span> <span class="nv">a</span> <span class="nv">b</span><span class="p">))</span> |
| <span class="p">(</span><span class="nf">sym/save</span> <span class="nv">c</span> <span class="s">"symbol-c.json"</span><span class="p">)</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">c2</span> <span class="p">(</span><span class="nf">sym/load</span> <span class="s">"symbol-c.json"</span><span class="p">))</span> |
| <span class="p">(</span><span class="nb">= </span><span class="p">(</span><span class="nf">sym/to-json</span> <span class="nv">c</span><span class="p">)</span> <span class="p">(</span><span class="nf">sym/to-json</span> <span class="nv">c2</span><span class="p">))</span> <span class="c1">;=>true</span> |
| </pre></div> |
| </div> |
| </div> |
| <div class="section" id="executing-symbols"> |
| <span id="executing-symbols"></span><h2>Executing Symbols<a class="headerlink" href="#executing-symbols" title="Permalink to this headline">¶</a></h2> |
| <p>To execute symbols, first we need to define the data that they should run on. We can do it by using the bind method, which accepts device context and a dict mapping free variable names to NDArrays as arguments and returns an executor. The executor provides forward method for evaluation and an attribute outputs to get all the results.</p> |
| <div class="highlight-clojure"><div class="highlight"><pre><span></span><span class="p">(</span><span class="k">def </span><span class="nv">a</span> <span class="p">(</span><span class="nf">sym/variable</span> <span class="s">"a"</span><span class="p">))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">b</span> <span class="p">(</span><span class="nf">sym/variable</span> <span class="s">"b"</span><span class="p">))</span> |
| <span class="p">(</span><span class="k">def </span><span class="nv">c</span> <span class="p">(</span><span class="nf">sym/+</span> <span class="nv">a</span> <span class="nv">b</span><span class="p">))</span> |
| |
| <span class="p">(</span><span class="k">def </span><span class="nv">ex</span> <span class="p">(</span><span class="nf">sym/bind</span> <span class="nv">c</span> <span class="p">{</span><span class="s">"a"</span> <span class="p">(</span><span class="nf">ndarray/ones</span> <span class="p">[</span><span class="mi">2</span> <span class="mi">2</span><span class="p">])</span> <span class="s">"b"</span> <span class="p">(</span><span class="nf">ndarray/ones</span> <span class="p">[</span><span class="mi">2</span> <span class="mi">2</span><span class="p">])}))</span> |
| <span class="p">(</span><span class="nb">-> </span><span class="p">(</span><span class="nf">executor/forward</span> <span class="nv">ex</span><span class="p">)</span> |
| <span class="p">(</span><span class="nf">executor/outputs</span><span class="p">)</span> |
| <span class="p">(</span><span class="nf">first</span><span class="p">)</span> |
| <span class="p">(</span><span class="nf">ndarray/->vec</span><span class="p">))</span><span class="c1">;=> [2.0 2.0 2.0 2.0]</span> |
| </pre></div> |
| </div> |
| <p>We can evaluate the same symbol on GPU with different data. |
| <em>To do this you must have the correct native library jar defined as a dependency</em></p> |
| <p><strong>Note In order to execute the following section on a cpu set gpu_device to (cpu)</strong></p> |
| <div class="highlight-clojure"><div class="highlight"><pre><span></span><span class="p">(</span><span class="k">def </span><span class="nv">ex</span> <span class="p">(</span><span class="nf">sym/bind</span> <span class="nv">c</span> <span class="p">(</span><span class="nf">context/gpu</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span><span class="s">"a"</span> <span class="p">(</span><span class="nf">ndarray/ones</span> <span class="p">[</span><span class="mi">2</span> <span class="mi">2</span><span class="p">])</span> <span class="s">"b"</span> <span class="p">(</span><span class="nf">ndarray/ones</span> <span class="p">[</span><span class="mi">2</span> <span class="mi">2</span><span class="p">])}))</span> |
| </pre></div> |
| </div> |
| </div> |
| <div class="section" id="next-steps"> |
| <span id="next-steps"></span><h2>Next Steps<a class="headerlink" href="#next-steps" title="Permalink to this headline">¶</a></h2> |
| <ul class="simple"> |
| <li>See <a class="reference internal" href="ndarray.html"><span class="doc">NDArray API</span></a> for vector/matrix/tensor operations.</li> |
| <li>See <a class="reference internal" href="kvstore.html"><span class="doc">KVStore API</span></a> for multi-GPU and multi-host distributed training.</li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div aria-label="main navigation" class="sphinxsidebar rightsidebar" role="navigation"> |
| <div class="sphinxsidebarwrapper"> |
| <h3><a href="../../index.html">Table Of Contents</a></h3> |
| <ul> |
| <li><a class="reference internal" href="#">MXNet Clojure Symbolic API</a><ul> |
| <li><a class="reference internal" href="#how-to-compose-symbols">How to Compose Symbols</a></li> |
| <li><a class="reference internal" href="#more-complicated-compositions">More Complicated Compositions</a></li> |
| <li><a class="reference internal" href="#group-multiple-symbols">Group Multiple Symbols</a></li> |
| <li><a class="reference internal" href="#serialization">Serialization</a></li> |
| <li><a class="reference internal" href="#executing-symbols">Executing Symbols</a></li> |
| <li><a class="reference internal" href="#next-steps">Next Steps</a></li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div><div class="footer"> |
| <div class="section-disclaimer"> |
| <div class="container"> |
| <div> |
| <img height="60" src="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/image/apache_incubator_logo.png"/> |
| <p> |
| Apache MXNet is an effort undergoing incubation at The Apache Software Foundation (ASF), <strong>sponsored by the <i>Apache Incubator</i></strong>. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF. |
| </p> |
| <p> |
| "Copyright © 2017-2018, The Apache Software Foundation |
| Apache MXNet, MXNet, Apache, the Apache feather, and the Apache MXNet project logo are either registered trademarks or trademarks of the Apache Software Foundation." |
| </p> |
| </div> |
| </div> |
| </div> |
| </div> <!-- pagename != index --> |
| </div> |
| <script crossorigin="anonymous" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> |
| <script src="../../_static/js/sidebar.js" type="text/javascript"></script> |
| <script src="../../_static/js/search.js" type="text/javascript"></script> |
| <script src="../../_static/js/navbar.js" type="text/javascript"></script> |
| <script src="../../_static/js/clipboard.min.js" type="text/javascript"></script> |
| <script src="../../_static/js/copycode.js" type="text/javascript"></script> |
| <script src="../../_static/js/page.js" type="text/javascript"></script> |
| <script src="../../_static/js/docversion.js" type="text/javascript"></script> |
| <script type="text/javascript"> |
| $('body').ready(function () { |
| $('body').css('visibility', 'visible'); |
| }); |
| </script> |
| </body> |
| </html> |