blob: a232907dc54d76b25fd71c86607f5fd46116f0b0 [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>前馈网络 &mdash; singa 2.0.0 documentation</title>
<script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../',
VERSION:'2.0.0',
LANGUAGE:'None',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</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="../_static/js/theme.js"></script>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="初始化器(Initializer)" href="initializer.html" />
<link rel="prev" title="层(Layer)" href="layer.html" />
<link href="../_static/style.css" rel="stylesheet" type="text/css">
<!--link href="../_static/fontawesome-all.min.css" rel="stylesheet" type="text/css"-->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css"
integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">
<style>
.fa:hover {
opacity: 0.7;
}
.fab:hover {
opacity: 0.7;
}
</style>
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> singa
<img src="../_static/singa.png" class="logo" alt="Logo"/>
</a>
<div class="version">
latest
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="index.html">文档</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="installation.html">安装</a></li>
<li class="toctree-l2"><a class="reference internal" href="software_stack.html">软件架构</a></li>
<li class="toctree-l2"><a class="reference internal" href="device.html">设备(Device)</a></li>
<li class="toctree-l2"><a class="reference internal" href="tensor.html">张量(Tensor)</a></li>
<li class="toctree-l2"><a class="reference internal" href="layer.html">层(Layer)</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">前馈网络</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#class-singa-net-feedforwardnet-loss-none-metric-none">class singa.net.FeedForwardNet(loss=None, metric=None)</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#to-device-dev">to_device(dev)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#add-lyr-src-none">add(lyr, src=None)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#param-values">param_values()</a></li>
<li class="toctree-l4"><a class="reference internal" href="#param-specs">param_specs()</a></li>
<li class="toctree-l4"><a class="reference internal" href="#param-names">param_names()</a></li>
<li class="toctree-l4"><a class="reference internal" href="#train-x-y">train(x, y)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#evaluate-x-y">evaluate(x, y)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#predict-x">predict(x)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#topo-sort-layers-src-of-layer">topo_sort(layers, src_of_layer)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#forward-flag-x-output">forward(flag, x, output=[])</a></li>
<li class="toctree-l4"><a class="reference internal" href="#backward">backward()</a></li>
<li class="toctree-l4"><a class="reference internal" href="#save-f-buffer-size-10-use-pickle-false">save(f, buffer_size=10, use_pickle=False)</a></li>
<li class="toctree-l4"><a class="reference internal" href="#load-f-buffer-size-10-use-pickle-false">load(f, buffer_size=10, use_pickle=False)</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="initializer.html">初始化器(Initializer)</a></li>
<li class="toctree-l2"><a class="reference internal" href="loss.html">损失(Loss)</a></li>
<li class="toctree-l2"><a class="reference internal" href="metric.html">度量(Metric)</a></li>
<li class="toctree-l2"><a class="reference internal" href="optimizer.html">优化器(Optimizer)</a></li>
<li class="toctree-l2"><a class="reference internal" href="data.html">数据(Data)</a></li>
<li class="toctree-l2"><a class="reference internal" href="image_tool.html">图像工具</a></li>
<li class="toctree-l2"><a class="reference internal" href="snapshot.html">Snapshot</a></li>
<li class="toctree-l2"><a class="reference internal" href="utils.html">Utils</a></li>
<li class="toctree-l2"><a class="reference internal" href="model_zoo/index.html">模型库</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../downloads.html">下载 SINGA</a></li>
</ul>
<p class="caption"><span class="caption-text">开发</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../develop/schedule.html">开发时间表</a></li>
<li class="toctree-l1"><a class="reference internal" href="../develop/how-contribute.html">如何贡献给 SINGA</a></li>
<li class="toctree-l1"><a class="reference internal" href="../develop/contribute-code.html">如何贡献代码</a></li>
</ul>
<p class="caption"><span class="caption-text">社区</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../community/source-repository.html">源代码库</a></li>
<li class="toctree-l1"><a class="reference internal" href="../community/mail-lists.html">项目邮件列表</a></li>
<li class="toctree-l1"><a class="reference internal" href="../community/issue-tracking.html">问题追踪</a></li>
<li class="toctree-l1"><a class="reference internal" href="../community/team-list.html">SINGA团队</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">singa</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html">Docs</a> &raquo;</li>
<li><a href="index.html">文档</a> &raquo;</li>
<li>前馈网络</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="id1">
<h1>前馈网络<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h1>
<p>Neural net类用层来创建网络并提供可以获取网络信息(比如:参数)的函数。</p>
<p>示例用法:</p>
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">singa</span> <span class="kn">import</span> <span class="n">net</span> <span class="k">as</span> <span class="n">ffnet</span>
<span class="kn">from</span> <span class="nn">singa</span> <span class="kn">import</span> <span class="n">metric</span>
<span class="kn">from</span> <span class="nn">singa</span> <span class="kn">import</span> <span class="n">loss</span>
<span class="kn">from</span> <span class="nn">singa</span> <span class="kn">import</span> <span class="n">layer</span>
<span class="kn">from</span> <span class="nn">singa</span> <span class="kn">import</span> <span class="n">device</span>
<span class="c1"># create net and add layers</span>
<span class="n">net</span> <span class="o">=</span> <span class="n">ffnet</span><span class="o">.</span><span class="n">FeedForwardNet</span><span class="p">(</span><span class="n">loss</span><span class="o">.</span><span class="n">SoftmaxCrossEntropy</span><span class="p">(),</span> <span class="n">metric</span><span class="o">.</span><span class="n">Accuracy</span><span class="p">())</span>
<span class="n">net</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">layer</span><span class="o">.</span><span class="n">Conv2D</span><span class="p">(</span><span class="s1">&#39;conv1&#39;</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">input_sample_shape</span><span class="o">=</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">32</span><span class="p">,</span><span class="mi">32</span><span class="p">,)))</span>
<span class="n">net</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">layer</span><span class="o">.</span><span class="n">Activation</span><span class="p">(</span><span class="s1">&#39;relu1&#39;</span><span class="p">))</span>
<span class="n">net</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">layer</span><span class="o">.</span><span class="n">MaxPooling2D</span><span class="p">(</span><span class="s1">&#39;pool1&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span>
<span class="n">net</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">layer</span><span class="o">.</span><span class="n">Flatten</span><span class="p">(</span><span class="s1">&#39;flat&#39;</span><span class="p">))</span>
<span class="n">net</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">layer</span><span class="o">.</span><span class="n">Dense</span><span class="p">(</span><span class="s1">&#39;dense&#39;</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
<span class="c1"># init parameters</span>
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">net</span><span class="o">.</span><span class="n">param_values</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">p</span><span class="o">.</span><span class="n">set_value</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">p</span><span class="o">.</span><span class="n">gaussian</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">0.01</span><span class="p">)</span>
<span class="c1"># move net onto gpu</span>
<span class="n">dev</span> <span class="o">=</span> <span class="n">device</span><span class="o">.</span><span class="n">create_cuda_gpu</span><span class="p">()</span>
<span class="n">net</span><span class="o">.</span><span class="n">to_device</span><span class="p">(</span><span class="n">dev</span><span class="p">)</span>
<span class="c1"># training (skipped)</span>
<span class="c1"># do prediction after training</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">tensor</span><span class="o">.</span><span class="n">Tensor</span><span class="p">((</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">32</span><span class="p">,</span> <span class="mi">32</span><span class="p">),</span> <span class="n">dev</span><span class="p">)</span>
<span class="n">x</span><span class="o">.</span><span class="n">uniform</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">net</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="k">print</span> <span class="n">tensor</span><span class="o">.</span><span class="n">to_numpy</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
</pre></div>
</div>
<hr class="docutils" />
<div class="section" id="class-singa-net-feedforwardnet-loss-none-metric-none">
<h2>class singa.net.FeedForwardNet(loss=None, metric=None)<a class="headerlink" href="#class-singa-net-feedforwardnet-loss-none-metric-none" title="Permalink to this headline"></a></h2>
<p>基类:<code class="docutils literal"><span class="pre">object</span></code></p>
<div class="section" id="to-device-dev">
<h3>to_device(dev)<a class="headerlink" href="#to-device-dev" title="Permalink to this headline"></a></h3>
<p>将网络移至指定设备上,包括所有参数和中间数据。</p>
</div>
<hr class="docutils" />
<div class="section" id="add-lyr-src-none">
<h3>add(lyr, src=None)<a class="headerlink" href="#add-lyr-src-none" title="Permalink to this headline"></a></h3>
<p>添加一个层到层列表中。</p>
<p>该功能将从src层获取样本形状以设置新添加的层。 对于第一层,它被设置在外部。 调用函数应确保层顺序的正确性。 如果src是None,最后一层是src层。 如果有多个src图层,则src是src层的列表。</p>
<p><strong>参数:</strong></p>
<ul class="simple">
<li><strong>lyr (Layer)</strong> – 待添加的层</li>
<li><strong>src (Layer)</strong> – lyr层的父层</li>
</ul>
</div>
<hr class="docutils" />
<div class="section" id="param-values">
<h3>param_values()<a class="headerlink" href="#param-values" title="Permalink to this headline"></a></h3>
<p>返回所有参数的tensor列表。</p>
</div>
<hr class="docutils" />
<div class="section" id="param-specs">
<h3>param_specs()<a class="headerlink" href="#param-specs" title="Permalink to this headline"></a></h3>
<p>返回所有参数的ParamSpec列表。</p>
</div>
<hr class="docutils" />
<div class="section" id="param-names">
<h3>param_names()<a class="headerlink" href="#param-names" title="Permalink to this headline"></a></h3>
<p>返回所有参数名列表。。</p>
</div>
<hr class="docutils" />
<div class="section" id="train-x-y">
<h3>train(x, y)<a class="headerlink" href="#train-x-y" title="Permalink to this headline"></a></h3>
<p>运行一次BP。
目前仅支持单输出层、单损失函数及度量方法的网络。 TODO(wangwei) 考虑多损失函数和多度量值。</p>
<p><strong>参数:</strong></p>
<ul class="simple">
<li><strong>x</strong> – 输入数据,一个输入tensor或字典:层名-&gt;tensor</li>
<li><strong>y</strong> – 输入数据的标签,一个tensor</li>
</ul>
<p><strong>返回值:</strong> 参数梯度,损失函数和度量值</p>
</div>
<hr class="docutils" />
<div class="section" id="evaluate-x-y">
<h3>evaluate(x, y)<a class="headerlink" href="#evaluate-x-y" title="Permalink to this headline"></a></h3>
<p>根据给定数据评估损失函数和度量值。目前仅支持单输出层、单损失函数及度量方法的网络。TODO(wangwei) 考虑多损失函数和多度量值。</p>
<p><strong>参数:</strong></p>
<ul class="simple">
<li><strong>x</strong> – 输入数据,单个tensor或一个字典: 层名 -&gt; tensor</li>
<li><strong>y</strong> – 输入数据的标签,单个tensor.</li>
</ul>
</div>
<hr class="docutils" />
<div class="section" id="predict-x">
<h3>predict(x)<a class="headerlink" href="#predict-x" title="Permalink to this headline"></a></h3>
<p>向前经每个层传递数据到输出层并获得输出值。
目前仅支持单输出层的网络。</p>
<p><strong>参数:</strong></p>
<ul class="simple">
<li><strong>x</strong> - 输入数据,单个tesnor或一个字典: 层名 -&gt; tensor</li>
</ul>
<p><strong>返回值:</strong> 单个输出tensor作为预测结果</p>
</div>
<hr class="docutils" />
<div class="section" id="topo-sort-layers-src-of-layer">
<h3>topo_sort(layers, src_of_layer)<a class="headerlink" href="#topo-sort-layers-src-of-layer" title="Permalink to this headline"></a></h3>
<p>对所有层进行拓扑排序。
对于多输入层,将会保留输入层的顺序。</p>
<p><strong>参数:</strong></p>
<ul class="simple">
<li><strong>layers</strong> – 层列表;同个层(如slice层)的多个输出层应该以正确的顺序加入,此功能将不会改变其顺序。</li>
<li><strong>src_of_layer</strong> – 字典: src层名 -&gt; src层列表</li>
</ul>
<p><strong>返回值:</strong> 排序后层列表</p>
</div>
<hr class="docutils" />
<div class="section" id="forward-flag-x-output">
<h3>forward(flag, x, output=[])<a class="headerlink" href="#forward-flag-x-output" title="Permalink to this headline"></a></h3>
<p>将输入经过每个层向前传递。
如果一个层具有来自其他层和来自x的输入,则来自x的数据在来自其他层的数据之前被排序,例如,如果层1-&gt;层2并且x [‘layer2’]具有数据,则输入层2展平,即[x [&#8216;layer2&#8216;],层1的输出]</p>
<p><strong>参数:</strong></p>
<ul class="simple">
<li><strong>flag</strong> – True代表训练;False代表评估;也可以是model_pb2.kTrain或model_pb2.kEval或者其他未来可能使用的值。</li>
<li><strong>x</strong> – 一个tensor或一个字典:层名 -&gt; tensor</li>
<li><strong>output(list)</strong> – 层名列表,将会和默认输出一起作为返回值</li>
</ul>
<p><strong>返回值:</strong> 如果只有一个输出层,返回输出tensor;否则返回字典:层名-&gt;输出tensor</p>
</div>
<hr class="docutils" />
<div class="section" id="backward">
<h3>backward()<a class="headerlink" href="#backward" title="Permalink to this headline"></a></h3>
<p>运行向后传递</p>
<p><strong>返回值:</strong> 所有参数的梯度tensor列表。</p>
</div>
<hr class="docutils" />
<div class="section" id="save-f-buffer-size-10-use-pickle-false">
<h3>save(f, buffer_size=10, use_pickle=False)<a class="headerlink" href="#save-f-buffer-size-10-use-pickle-false" title="Permalink to this headline"></a></h3>
<p>用io/snapshot保存模型参数。</p>
<p><strong>参数:</strong></p>
<ul class="simple">
<li><strong>f</strong> – 文件名</li>
<li><strong>buffer_size</strong> – 输入输出的大小(MB),默认为10MB;请确保它比任何一个参数对象要大。</li>
<li><strong>use_pickle(boolean)</strong> – 如果为真,将使用pickle保存;否则,将用protobuf做序列化,会占用较少空间。</li>
</ul>
</div>
<hr class="docutils" />
<div class="section" id="load-f-buffer-size-10-use-pickle-false">
<h3>load(f, buffer_size=10, use_pickle=False)<a class="headerlink" href="#load-f-buffer-size-10-use-pickle-false" title="Permalink to this headline"></a></h3>
<p>用io/snapshot加载模型参数。请参照save()的参数描述。</p>
<hr class="docutils" />
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="initializer.html" class="btn btn-neutral float-right" title="初始化器(Initializer)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="layer.html" class="btn btn-neutral float-left" title="层(Layer)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2019 The Apache Software Foundation. All rights reserved. Apache SINGA, Apache, the Apache feather logo, and the Apache SINGA project logos are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book"> singa </span>
v: latest
<span class="fa fa-caret-down"></span>
</span>
<div class="rst-other-versions">
<dl>
<dt>Languages</dt>
<dd><a href="../../index.html">English</a></dd>
<dd><a href=".././index.html">中文</a></dd>
</dl>
<dl>
<dt>Versions</dt>
<dd><a href="http://singa.apache.org/v0.3.0/">0.3</a></dd>
<dd><a href="http://singa.apache.org/v1.1.0/">1.1</a></dd>
</dl>
</div>
<a href="http://www.apache.org"
style="color:lightblue;padding: 5px; font-size: 10px; text-align: center; text-decoration: none; margin: 5px 2px;">Foundation</a>
<a href="http://www.apache.org/events/current-event"
style="color:lightblue;padding: 5px; font-size: 10px; text-align: center; text-decoration: none; margin: 5px 2px;">Events</a>
<a href="http://www.apache.org/foundation/thanks.html"
style="color:lightblue;padding: 5px; font-size: 10px; text-align: center; text-decoration: none; margin: 5px 2px;">Thanks</a>
<a href="http://www.apache.org/foundation/sponsorship.html"
style="color:lightblue;padding: 5px; font-size: 10px; text-align: center; text-decoration: none; margin: 5px 2px;">Sponsorship</a>
<a href="http://www.apache.org/licenses/"
style="color:lightblue;padding: 5px; font-size: 10px; text-align: center; text-decoration: none; margin: 5px 2px;">License</a>
<br>
<a href="https://github.com/apache/singa" class="fa fa-github"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
<a href="https://aws.amazon.com/marketplace/seller-profile?id=5bcac385-12c4-4802-aec7-351e09b77b4c" class="fab fa-aws"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
<a href="https://hub.docker.com/r/apache/singa/" class="fab fa-docker"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
<a href="https://www.linkedin.com/groups/13550034" class="fa fa-linkedin"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
<a href="https://twitter.com/ApacheSinga" class="fa fa-twitter"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
<a href="https://www.facebook.com/Apache-SINGA-347284219056544/" class="fa fa-facebook"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
<a href="https://www.researchgate.net/project/Apache-SINGA" class="fab fa-researchgate"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
</div>
<a href="https://github.com/apache/singa">
<img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
src="https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png" alt="Fork me on GitHub">
</a>
</body>
</html>