blob: f29d481c5f5059211c735d2f5eebc543a0070c26 [file] [log] [blame]
<!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="Develop a Neural Network with MXNet in Five Minutes" 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="Develop a Neural Network with MXNet in Five Minutes" property="og:description"/>
<title>Develop a Neural Network with MXNet in Five Minutes — 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="R Tutorials"/>
<link href="mnistCompetition.html" rel="next" title="Handwritten Digits Classification Competition"/>
<link href="classifyRealImageWithPretrainedModel.html" rel="prev" title="Classify Images with a PreTrained Model"/>
<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.7.0/">1.7.0</a></li><li><a href=/versions/1.6.0/>1.6.0</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.0/>1.6.0</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>
<li class="toctree-l1"><a class="reference internal" href="../../api/index.html">MXNet APIs</a></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="../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="develop-a-neural-network-with-mxnet-in-five-minutes">
<span id="develop-a-neural-network-with-mxnet-in-five-minutes"></span><h1>Develop a Neural Network with MXNet in Five Minutes<a class="headerlink" href="#develop-a-neural-network-with-mxnet-in-five-minutes" title="Permalink to this headline"></a></h1>
<p>This tutorial is designed for new users of the <code class="docutils literal"><span class="pre">mxnet</span></code> package for R. It shows how to construct a neural network to do regression in 5 minutes. It shows how to perform classification and regression tasks, respectively. The data we use is in the <code class="docutils literal"><span class="pre">mlbench</span></code> package. Instructions to install R and MXNet’s R package in different environments can be found <a class="reference external" href="/versions/1.4.1/install/index.html?platform=Linux&amp;language=R&amp;processor=CPU">here</a>.</p>
<div class="section" id="classification">
<span id="classification"></span><h2>Classification<a class="headerlink" href="#classification" title="Permalink to this headline"></a></h2>
<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="c1">## Loading required package: mlbench</span>
</pre></div>
</div>
<div class="highlight-r"><div class="highlight"><pre><span></span> <span class="nf">if </span><span class="p">(</span><span class="o">!</span><span class="nf">require</span><span class="p">(</span><span class="n">mlbench</span><span class="p">))</span> <span class="p">{</span>
<span class="nf">install.packages</span><span class="p">(</span><span class="s">'mlbench'</span><span class="p">)</span>
<span class="p">}</span>
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="c1">## Loading required package: mxnet</span>
</pre></div>
</div>
<div class="highlight-r"><div class="highlight"><pre><span></span> <span class="nf">require</span><span class="p">(</span><span class="n">mxnet</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="c1">## Loading required datasets</span>
</pre></div>
</div>
<div class="highlight-r"><div class="highlight"><pre><span></span> <span class="nf">data</span><span class="p">(</span><span class="n">Sonar</span><span class="p">,</span> <span class="n">package</span><span class="o">=</span><span class="s">"mlbench"</span><span class="p">)</span>
<span class="n">Sonar[</span><span class="p">,</span><span class="m">61</span><span class="n">]</span> <span class="o">=</span> <span class="nf">as.numeric</span><span class="p">(</span><span class="n">Sonar[</span><span class="p">,</span><span class="m">61</span><span class="n">]</span><span class="p">)</span><span class="m">-1</span>
<span class="n">train.ind</span> <span class="o">=</span> <span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="o">:</span><span class="m">50</span><span class="p">,</span> <span class="m">100</span><span class="o">:</span><span class="m">150</span><span class="p">)</span>
<span class="n">train.x</span> <span class="o">=</span> <span class="nf">data.matrix</span><span class="p">(</span><span class="n">Sonar[train.ind</span><span class="p">,</span> <span class="m">1</span><span class="o">:</span><span class="m">60</span><span class="n">]</span><span class="p">)</span>
<span class="n">train.y</span> <span class="o">=</span> <span class="n">Sonar[train.ind</span><span class="p">,</span> <span class="m">61</span><span class="n">]</span>
<span class="n">test.x</span> <span class="o">=</span> <span class="nf">data.matrix</span><span class="p">(</span><span class="n">Sonar[</span><span class="o">-</span><span class="n">train.ind</span><span class="p">,</span> <span class="m">1</span><span class="o">:</span><span class="m">60</span><span class="n">]</span><span class="p">)</span>
<span class="n">test.y</span> <span class="o">=</span> <span class="n">Sonar[</span><span class="o">-</span><span class="n">train.ind</span><span class="p">,</span> <span class="m">61</span><span class="n">]</span>
</pre></div>
</div>
<p>We are going to use a multi-layer perceptron as our classifier. In <code class="docutils literal"><span class="pre">mxnet</span></code>, we have a function called <code class="docutils literal"><span class="pre">mx.mlp</span></code> for building a general multi-layer neural network to do classification or regression.</p>
<p><code class="docutils literal"><span class="pre">mx.mlp</span></code> requires the following parameters:</p>
<ul class="simple">
<li>Training data and label</li>
<li>Number of hidden nodes in each hidden layer</li>
<li>Number of nodes in the output layer</li>
<li>Type of the activation</li>
<li>Type of the output loss</li>
<li>The device to train (GPU or CPU)</li>
<li>Other parameters for <code class="docutils literal"><span class="pre">mx.model.FeedForward.create</span></code></li>
</ul>
<p>The following code shows an example usage of <code class="docutils literal"><span class="pre">mx.mlp</span></code>:</p>
<div class="highlight-r"><div class="highlight"><pre><span></span> <span class="nf">mx.set.seed</span><span class="p">(</span><span class="m">0</span><span class="p">)</span>
<span class="n">model</span> <span class="o"><-</span> <span class="nf">mx.mlp</span><span class="p">(</span><span class="n">train.x</span><span class="p">,</span> <span class="n">train.y</span><span class="p">,</span> <span class="n">hidden_node</span><span class="o">=</span><span class="m">10</span><span class="p">,</span> <span class="n">out_node</span><span class="o">=</span><span class="m">2</span><span class="p">,</span> <span class="n">out_activation</span><span class="o">=</span><span class="s">"softmax"</span><span class="p">,</span>
<span class="n">num.round</span><span class="o">=</span><span class="m">20</span><span class="p">,</span> <span class="n">array.batch.size</span><span class="o">=</span><span class="m">15</span><span class="p">,</span> <span class="n">learning.rate</span><span class="o">=</span><span class="m">0.07</span><span class="p">,</span> <span class="n">momentum</span><span class="o">=</span><span class="m">0.9</span><span class="p">,</span>
<span class="n">eval.metric</span><span class="o">=</span><span class="n">mx.metric.accuracy</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="c1">## Auto detect layout of input matrix, use rowmajor..</span>
<span class="c1">## Start training with 1 devices</span>
<span class="c1">## [1] Train-accuracy=0.488888888888889</span>
<span class="c1">## [2] Train-accuracy=0.514285714285714</span>
<span class="c1">## [3] Train-accuracy=0.514285714285714</span>
<span class="c1">## [4] Train-accuracy=0.514285714285714</span>
<span class="c1">## [5] Train-accuracy=0.514285714285714</span>
<span class="c1">## [6] Train-accuracy=0.523809523809524</span>
<span class="c1">## [7] Train-accuracy=0.619047619047619</span>
<span class="c1">## [8] Train-accuracy=0.695238095238095</span>
<span class="c1">## [9] Train-accuracy=0.695238095238095</span>
<span class="c1">## [10] Train-accuracy=0.761904761904762</span>
<span class="c1">## [11] Train-accuracy=0.828571428571429</span>
<span class="c1">## [12] Train-accuracy=0.771428571428571</span>
<span class="c1">## [13] Train-accuracy=0.742857142857143</span>
<span class="c1">## [14] Train-accuracy=0.733333333333333</span>
<span class="c1">## [15] Train-accuracy=0.771428571428571</span>
<span class="c1">## [16] Train-accuracy=0.847619047619048</span>
<span class="c1">## [17] Train-accuracy=0.857142857142857</span>
<span class="c1">## [18] Train-accuracy=0.838095238095238</span>
<span class="c1">## [19] Train-accuracy=0.838095238095238</span>
<span class="c1">## [20] Train-accuracy=0.838095238095238</span>
</pre></div>
</div>
<p>Note that <code class="docutils literal"><span class="pre">mx.set.seed</span></code> controls the random process in <code class="docutils literal"><span class="pre">mxnet</span></code>. You can see the accuracy in each round during training. It’s also easy to make predictions and evaluate.</p>
<p>To get an idea of what is happening, view the computation graph from R:</p>
<div class="highlight-{r}"><div class="highlight"><pre><span></span> graph.viz(model$symbol)
</pre></div>
</div>
<p><a class="reference external" href="https://github.com/dmlc/mxnet"><img src="https://raw.githubusercontent.com/dmlc/web-data/master/mxnet/knitr/graph.computation.png"/></a></p>
<div class="highlight-r"><div class="highlight"><pre><span></span> <span class="n">preds</span> <span class="o">=</span> <span class="nf">predict</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">test.x</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="c1">## Auto detect layout of input matrix, use rowmajor.</span>
</pre></div>
</div>
<div class="highlight-r"><div class="highlight"><pre><span></span> <span class="n">pred.label</span> <span class="o">=</span> <span class="nf">max.col</span><span class="p">(</span><span class="nf">t</span><span class="p">(</span><span class="n">preds</span><span class="p">))</span><span class="m">-1</span>
<span class="nf">table</span><span class="p">(</span><span class="n">pred.label</span><span class="p">,</span> <span class="n">test.y</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="c1">## test.y</span>
<span class="c1">## pred.label 0 1</span>
<span class="c1">## 0 24 14</span>
<span class="c1">## 1 36 33</span>
</pre></div>
</div>
<p>Note for that for multi-class predictions, mxnet outputs <code class="docutils literal"><span class="pre">nclass</span></code> x <code class="docutils literal"><span class="pre">nexamples</span></code>, with each row corresponding to the probability of the class.</p>
</div>
<div class="section" id="regression">
<span id="regression"></span><h2>Regression<a class="headerlink" href="#regression" title="Permalink to this headline"></a></h2>
<p>Again, let us preprocess the data:</p>
<div class="highlight-r"><div class="highlight"><pre><span></span> <span class="nf">data</span><span class="p">(</span><span class="n">BostonHousing</span><span class="p">,</span> <span class="n">package</span><span class="o">=</span><span class="s">"mlbench"</span><span class="p">)</span>
<span class="n">train.ind</span> <span class="o">=</span> <span class="nf">seq</span><span class="p">(</span><span class="m">1</span><span class="p">,</span> <span class="m">506</span><span class="p">,</span> <span class="m">3</span><span class="p">)</span>
<span class="n">train.x</span> <span class="o">=</span> <span class="nf">data.matrix</span><span class="p">(</span><span class="n">BostonHousing[train.ind</span><span class="p">,</span> <span class="m">-14</span><span class="n">]</span><span class="p">)</span>
<span class="n">train.y</span> <span class="o">=</span> <span class="n">BostonHousing[train.ind</span><span class="p">,</span> <span class="m">14</span><span class="n">]</span>
<span class="n">test.x</span> <span class="o">=</span> <span class="nf">data.matrix</span><span class="p">(</span><span class="n">BostonHousing[</span><span class="o">-</span><span class="n">train.ind</span><span class="p">,</span> <span class="m">-14</span><span class="n">]</span><span class="p">)</span>
<span class="n">test.y</span> <span class="o">=</span> <span class="n">BostonHousing[</span><span class="o">-</span><span class="n">train.ind</span><span class="p">,</span> <span class="m">14</span><span class="n">]</span>
</pre></div>
</div>
<p>Although we can use <code class="docutils literal"><span class="pre">mx.mlp</span></code> again to do regression by changing the <code class="docutils literal"><span class="pre">out_activation</span></code>, this time we are going to introduce a flexible way to configure neural networks in <code class="docutils literal"><span class="pre">mxnet</span></code>. Configuration is done by the “Symbol” system in <code class="docutils literal"><span class="pre">mxnet</span></code>. The Symbol system takes care of the links among nodes, activation, dropout ratio, etc. Configure a multi-layer neural network as follows:</p>
<div class="highlight-r"><div class="highlight"><pre><span></span> <span class="c1"># Define the input data</span>
<span class="n">data</span> <span class="o"><-</span> <span class="nf">mx.symbol.Variable</span><span class="p">(</span><span class="s">"data"</span><span class="p">)</span>
<span class="c1"># A fully connected hidden layer</span>
<span class="c1"># data: input source</span>
<span class="c1"># num_hidden: number of neurons in this hidden layer</span>
<span class="n">fc1</span> <span class="o"><-</span> <span class="nf">mx.symbol.FullyConnected</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">num_hidden</span><span class="o">=</span><span class="m">1</span><span class="p">)</span>
<span class="c1"># Use linear regression for the output layer</span>
<span class="n">lro</span> <span class="o"><-</span> <span class="nf">mx.symbol.LinearRegressionOutput</span><span class="p">(</span><span class="n">fc1</span><span class="p">)</span>
</pre></div>
</div>
<p>What matters for a regression task is mainly the last function. It enables the new network to optimize for squared loss. Now let’s train on this simple data set. In this configuration, we dropped the hidden layer so that the input layer is directly connected to the output layer.</p>
<p>Next, make prediction with this structure and other parameters with <code class="docutils literal"><span class="pre">mx.model.FeedForward.create</span></code>:</p>
<div class="highlight-r"><div class="highlight"><pre><span></span> <span class="nf">mx.set.seed</span><span class="p">(</span><span class="m">0</span><span class="p">)</span>
<span class="n">model</span> <span class="o"><-</span> <span class="nf">mx.model.FeedForward.create</span><span class="p">(</span><span class="n">lro</span><span class="p">,</span> <span class="n">X</span><span class="o">=</span><span class="n">train.x</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">train.y</span><span class="p">,</span>
<span class="n">ctx</span><span class="o">=</span><span class="nf">mx.cpu</span><span class="p">(),</span> <span class="n">num.round</span><span class="o">=</span><span class="m">50</span><span class="p">,</span> <span class="n">array.batch.size</span><span class="o">=</span><span class="m">20</span><span class="p">,</span>
<span class="n">learning.rate</span><span class="o">=</span><span class="m">2e-6</span><span class="p">,</span> <span class="n">momentum</span><span class="o">=</span><span class="m">0.9</span><span class="p">,</span> <span class="n">eval.metric</span><span class="o">=</span><span class="n">mx.metric.rmse</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="c1">## Auto detect layout of input matrix, use rowmajor.</span>
<span class="c1">## Start training with 1 devices</span>
<span class="c1">## [1] Train-rmse=16.063282524034</span>
<span class="c1">## [2] Train-rmse=12.2792375712573</span>
<span class="c1">## [3] Train-rmse=11.1984634005885</span>
<span class="c1">## [4] Train-rmse=10.2645236892904</span>
<span class="c1">## [5] Train-rmse=9.49711005504284</span>
<span class="c1">## [6] Train-rmse=9.07733734175182</span>
<span class="c1">## [7] Train-rmse=9.07884450847991</span>
<span class="c1">## [8] Train-rmse=9.10463850277417</span>
<span class="c1">## [9] Train-rmse=9.03977049028532</span>
<span class="c1">## [10] Train-rmse=8.96870685004475</span>
<span class="c1">## [11] Train-rmse=8.93113287361574</span>
<span class="c1">## [12] Train-rmse=8.89937257821847</span>
<span class="c1">## [13] Train-rmse=8.87182096922953</span>
<span class="c1">## [14] Train-rmse=8.84476075083586</span>
<span class="c1">## [15] Train-rmse=8.81464673014974</span>
<span class="c1">## [16] Train-rmse=8.78672567900196</span>
<span class="c1">## [17] Train-rmse=8.76265872846474</span>
<span class="c1">## [18] Train-rmse=8.73946101419974</span>
<span class="c1">## [19] Train-rmse=8.71651926303267</span>
<span class="c1">## [20] Train-rmse=8.69457600919277</span>
<span class="c1">## [21] Train-rmse=8.67354928674563</span>
<span class="c1">## [22] Train-rmse=8.65328755392436</span>
<span class="c1">## [23] Train-rmse=8.63378039680078</span>
<span class="c1">## [24] Train-rmse=8.61488162586984</span>
<span class="c1">## [25] Train-rmse=8.5965105183022</span>
<span class="c1">## [26] Train-rmse=8.57868133563275</span>
<span class="c1">## [27] Train-rmse=8.56135851937663</span>
<span class="c1">## [28] Train-rmse=8.5444819772098</span>
<span class="c1">## [29] Train-rmse=8.52802114610432</span>
<span class="c1">## [30] Train-rmse=8.5119504512622</span>
<span class="c1">## [31] Train-rmse=8.49624261719241</span>
<span class="c1">## [32] Train-rmse=8.48087453238701</span>
<span class="c1">## [33] Train-rmse=8.46582689119887</span>
<span class="c1">## [34] Train-rmse=8.45107881002491</span>
<span class="c1">## [35] Train-rmse=8.43661331401712</span>
<span class="c1">## [36] Train-rmse=8.42241575909639</span>
<span class="c1">## [37] Train-rmse=8.40847217331365</span>
<span class="c1">## [38] Train-rmse=8.39476931796395</span>
<span class="c1">## [39] Train-rmse=8.38129658373974</span>
<span class="c1">## [40] Train-rmse=8.36804269059018</span>
<span class="c1">## [41] Train-rmse=8.35499817678397</span>
<span class="c1">## [42] Train-rmse=8.34215505742154</span>
<span class="c1">## [43] Train-rmse=8.32950441908131</span>
<span class="c1">## [44] Train-rmse=8.31703985777311</span>
<span class="c1">## [45] Train-rmse=8.30475363906755</span>
<span class="c1">## [46] Train-rmse=8.29264031506106</span>
<span class="c1">## [47] Train-rmse=8.28069372820073</span>
<span class="c1">## [48] Train-rmse=8.26890902770415</span>
<span class="c1">## [49] Train-rmse=8.25728089053853</span>
<span class="c1">## [50] Train-rmse=8.24580511500735</span>
</pre></div>
</div>
<p>It’s also easy to make a prediction and evaluate it:</p>
<div class="highlight-r"><div class="highlight"><pre><span></span> <span class="n">preds</span> <span class="o">=</span> <span class="nf">predict</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">test.x</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="c1">## Auto detect layout of input matrix, use rowmajor..</span>
</pre></div>
</div>
<div class="highlight-r"><div class="highlight"><pre><span></span> <span class="nf">sqrt</span><span class="p">(</span><span class="nf">mean</span><span class="p">((</span><span class="n">preds</span><span class="o">-</span><span class="n">test.y</span><span class="p">)</span><span class="n">^2</span><span class="p">))</span>
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="c1">## [1] 7.800502</span>
</pre></div>
</div>
<p>Currently, we have four predefined metrics: “accuracy”, “rmse”, “mae”, and “rmsle”. MXNet provides the interface for defining your own metrics:</p>
<div class="highlight-r"><div class="highlight"><pre><span></span> <span class="n">demo.metric.mae</span> <span class="o"><-</span> <span class="nf">mx.metric.custom</span><span class="p">(</span><span class="s">"mae"</span><span class="p">,</span> <span class="nf">function</span><span class="p">(</span><span class="n">label</span><span class="p">,</span> <span class="n">pred</span><span class="p">)</span> <span class="p">{</span>
<span class="n">pred</span> <span class="o"><-</span> <span class="nf">mx.nd.reshape</span><span class="p">(</span><span class="n">pred</span><span class="p">,</span> <span class="n">shape</span> <span class="o">=</span> <span class="m">0</span><span class="p">)</span>
<span class="n">res</span> <span class="o"><-</span> <span class="nf">mx.nd.mean</span><span class="p">(</span><span class="nf">mx.nd.abs</span><span class="p">(</span><span class="n">label</span><span class="o">-</span><span class="n">pred</span><span class="p">))</span>
<span class="nf">return</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
<span class="p">})</span>
</pre></div>
</div>
<p>This is an example of the mean absolute error metric. Simply plug it into the training function:</p>
<div class="highlight-r"><div class="highlight"><pre><span></span> <span class="nf">mx.set.seed</span><span class="p">(</span><span class="m">0</span><span class="p">)</span>
<span class="n">model</span> <span class="o"><-</span> <span class="nf">mx.model.FeedForward.create</span><span class="p">(</span><span class="n">lro</span><span class="p">,</span> <span class="n">X</span><span class="o">=</span><span class="n">train.x</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">train.y</span><span class="p">,</span>
<span class="n">ctx</span><span class="o">=</span><span class="nf">mx.cpu</span><span class="p">(),</span> <span class="n">num.round</span><span class="o">=</span><span class="m">50</span><span class="p">,</span> <span class="n">array.batch.size</span><span class="o">=</span><span class="m">20</span><span class="p">,</span>
<span class="n">learning.rate</span><span class="o">=</span><span class="m">2e-6</span><span class="p">,</span> <span class="n">momentum</span><span class="o">=</span><span class="m">0.9</span><span class="p">,</span> <span class="n">eval.metric</span><span class="o">=</span><span class="n">demo.metric.mae</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-default"><div class="highlight"><pre><span></span> <span class="c1">## Auto detect layout of input matrix, use rowmajor.</span>
<span class="c1">## Start training with 1 devices</span>
<span class="c1">## [1] Train-mae=14.953625731998</span>
<span class="c1">## [2] Train-mae=11.4802955521478</span>
<span class="c1">## [3] Train-mae=8.50700579749213</span>
<span class="c1">## [4] Train-mae=7.30591265360514</span>
<span class="c1">## [5] Train-mae=7.38049803839789</span>
<span class="c1">## [6] Train-mae=7.36036252975464</span>
<span class="c1">## [7] Train-mae=7.06519222259521</span>
<span class="c1">## [8] Train-mae=6.9962231847975</span>
<span class="c1">## [9] Train-mae=6.96296903822157</span>
<span class="c1">## [10] Train-mae=6.9046172036065</span>
<span class="c1">## [11] Train-mae=6.87867620256212</span>
<span class="c1">## [12] Train-mae=6.85872554779053</span>
<span class="c1">## [13] Train-mae=6.81936407089233</span>
<span class="c1">## [14] Train-mae=6.79135354359945</span>
<span class="c1">## [15] Train-mae=6.77438741260105</span>
<span class="c1">## [16] Train-mae=6.75365140702989</span>
<span class="c1">## [17] Train-mae=6.73369296391805</span>
<span class="c1">## [18] Train-mae=6.71600982877943</span>
<span class="c1">## [19] Train-mae=6.69932826360067</span>
<span class="c1">## [20] Train-mae=6.6852519777086</span>
<span class="c1">## [21] Train-mae=6.67343420452542</span>
<span class="c1">## [22] Train-mae=6.66315894656711</span>
<span class="c1">## [23] Train-mae=6.65314838621351</span>
<span class="c1">## [24] Train-mae=6.64388704299927</span>
<span class="c1">## [25] Train-mae=6.63480265935262</span>
<span class="c1">## [26] Train-mae=6.62583245171441</span>
<span class="c1">## [27] Train-mae=6.61697626113892</span>
<span class="c1">## [28] Train-mae=6.60842116673787</span>
<span class="c1">## [29] Train-mae=6.60040124257406</span>
<span class="c1">## [30] Train-mae=6.59264140658908</span>
<span class="c1">## [31] Train-mae=6.58551020092434</span>
<span class="c1">## [32] Train-mae=6.57864215638902</span>
<span class="c1">## [33] Train-mae=6.57178926467896</span>
<span class="c1">## [34] Train-mae=6.56495311525133</span>
<span class="c1">## [35] Train-mae=6.55813185373942</span>
<span class="c1">## [36] Train-mae=6.5513252152337</span>
<span class="c1">## [37] Train-mae=6.54453214009603</span>
<span class="c1">## [38] Train-mae=6.53775374094645</span>
<span class="c1">## [39] Train-mae=6.53098879920112</span>
<span class="c1">## [40] Train-mae=6.52423816257053</span>
<span class="c1">## [41] Train-mae=6.51764053768582</span>
<span class="c1">## [42] Train-mae=6.51121346155802</span>
<span class="c1">## [43] Train-mae=6.5047902001275</span>
<span class="c1">## [44] Train-mae=6.49837123023139</span>
<span class="c1">## [45] Train-mae=6.49216641320123</span>
<span class="c1">## [46] Train-mae=6.48598252402412</span>
<span class="c1">## [47] Train-mae=6.4798010720147</span>
<span class="c1">## [48] Train-mae=6.47362396452162</span>
<span class="c1">## [49] Train-mae=6.46745183732775</span>
<span class="c1">## [50] Train-mae=6.46128723356459</span>
</pre></div>
</div>
<p>Congratulations! You’ve learned the basics for using MXNet in R. To learn how to use MXNet’s advanced features, see the other tutorials.</p>
</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>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference external" href="/versions/1.4.1/tutorials/r/classifyRealImageWithPretrainedModel.html">Classify Real-World Images with Pre-trained Model</a></li>
<li class="toctree-l1"><a class="reference external" href="/versions/1.4.1/tutorials/r/mnistCompetition.html">Handwritten Digits Classification Competition</a></li>
<li class="toctree-l1"><a class="reference external" href="/versions/1.4.1/tutorials/r/charRnnModel.html">Character Language Model using RNN</a></li>
</ul>
</div>
</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="#">Develop a Neural Network with MXNet in Five Minutes</a><ul>
<li><a class="reference internal" href="#classification">Classification</a></li>
<li><a class="reference internal" href="#regression">Regression</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>