<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>singa-incubating-1.0.0 Release Notes · Apache SINGA</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;!--- 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 &quot;License&quot;); 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 &quot;AS IS&quot; 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.  --&gt;"/><meta name="docsearch:version" content="3.0.0"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="singa-incubating-1.0.0 Release Notes · Apache SINGA"/><meta property="og:type" content="website"/><meta property="og:url" content="https://singa.apache.org/"/><meta property="og:description" content="&lt;!--- 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 &quot;License&quot;); 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 &quot;AS IS&quot; 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.  --&gt;"/><meta property="og:image" content="https://singa.apache.org/img/singa_twitter_banner.jpeg"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://singa.apache.org/img/singa_twitter_banner.jpeg"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/atom-one-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://singa.apache.org/blog/atom.xml" title="Apache SINGA Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://singa.apache.org/blog/feed.xml" title="Apache SINGA Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script src="https://unpkg.com/vanilla-back-to-top@7.1.14/dist/vanilla-back-to-top.min.js"></script><script>
        document.addEventListener('DOMContentLoaded', function() {
          addBackToTop(
            {"zIndex":100}
          )
        });
        </script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/singa.png" alt="Apache SINGA"/></a><a href="/versions"><h3>3.0.0</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/docs/3.0.0/installation" target="_self">Docs</a></li><li class=""><a href="/docs/3.0.0/source-repository" target="_self">Community</a></li><li class=""><a href="/blog/" target="_self">News</a></li><li class=""><a href="https://apache-singa.readthedocs.io/en/latest/" target="_self">API</a></li><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li><li class=""><a href="https://github.com/apache/singa" target="_self">GitHub</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/apache/singa-doc/blob/master/docs-site/docs/releases/RELEASE_NOTES_1.0.0.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">singa-incubating-1.0.0 Release Notes</h1></header><article><div><span><!--- 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.  -->
<p>SINGA is a general distributed deep learning platform for training big deep
learning models over large datasets. It is designed with an intuitive
programming model based on the layer abstraction. SINGA supports a wide variety
of popular deep learning models.</p>
<p>This release includes following features:</p>
<ul>
<li>Core abstractions including Tensor and Device
<ul>
<li>[SINGA-207] Update Tensor functions for matrices</li>
<li>[SINGA-205] Enable slice and concatenate operations for Tensor objects</li>
<li>[SINGA-197] Add CNMem as a submodule in lib/</li>
<li>[SINGA-196] Rename class Blob to Block</li>
<li>[SINGA-194] Add a Platform singleton</li>
<li>[SINGA-175] Add memory management APIs and implement a subclass using CNMeM</li>
<li>[SINGA-173] OpenCL Implementation</li>
<li>[SINGA-171] Create CppDevice and CudaDevice</li>
<li>[SINGA-168] Implement Cpp Math functions APIs</li>
<li>[SINGA-162] Overview of features for V1.x</li>
<li>[SINGA-165] Add cross-platform timer API to singa</li>
<li>[SINGA-167] Add Tensor Math function APIs</li>
<li>[SINGA-166] light built-in logging for making glog optional</li>
<li>[SINGA-164] Add the base Tensor class</li>
</ul></li>
</ul>
<ul>
<li>IO components for file read/write, network and data pre-processing
<ul>
<li>[SINGA-233] New communication interface</li>
<li>[SINGA-215] Implement Image Transformation for Image Pre-processing</li>
<li>[SINGA-214] Add LMDBReader and LMDBWriter for LMDB</li>
<li>[SINGA-213] Implement Encoder and Decoder for CSV</li>
<li>[SINGA-211] Add TextFileReader and TextFileWriter for CSV files</li>
<li>[SINGA-210] Enable checkpoint and resume for v1.0</li>
<li>[SINGA-208] Add DataIter base class and a simple implementation</li>
<li>[SINGA-203] Add OpenCV detection for cmake compilation</li>
<li>[SINGA-202] Add reader and writer for binary file</li>
<li>[SINGA-200] Implement Encoder and Decoder for data pre-processing</li>
</ul></li>
</ul>
<ul>
<li>Module components including layer classes, training algorithms and Python
binding
<ul>
<li>[SINGA-235] Unify the engines for cudnn and singa layers</li>
<li>[SINGA-230] OpenCL Convolution layer and Pooling layer</li>
<li>[SINGA-222] Fixed bugs in IO</li>
<li>[SINGA-218] Implementation for RNN CUDNN version</li>
<li>[SINGA-204] Support the training of feed-forward neural nets</li>
<li>[SINGA-199] Implement Python classes for SGD optimizers</li>
<li>[SINGA-198] Change Layer::Setup API to include input Tensor shapes</li>
<li>[SINGA-193] Add Python layers</li>
<li>[SINGA-192] Implement optimization algorithms for SINGA v1 (nesterove,
adagrad, rmsprop)</li>
<li>[SINGA-191] Add &quot;autotune&quot; for CudnnConvolution Layer</li>
<li>[SINGA-190] Add prelu layer and flatten layer</li>
<li>[SINGA-189] Generate python outputs of proto files</li>
<li>[SINGA-188] Add Dense layer</li>
<li>[SINGA-187] Add popular parameter initialization methods</li>
<li>[SINGA-186] Create Python Tensor class</li>
<li>[SINGA-184] Add Cross Entropy loss computation</li>
<li>[SINGA-183] Add the base classes for optimizer, constraint and regularizer</li>
<li>[SINGA-180] Add Activation layer and Softmax layer</li>
<li>[SINGA-178] Add Convolution layer and Pooling layer</li>
<li>[SINGA-176] Add loss and metric base classes</li>
<li>[SINGA-174] Add Batch Normalization layer and Local Response Nomalization
layer.</li>
<li>[SINGA-170] Add Dropout layer and CudnnDropout layer.</li>
<li>[SINGA-169] Add base Layer class for V1.0</li>
</ul></li>
</ul>
<ul>
<li><p>Examples</p>
<ul>
<li>[SINGA-232] Alexnet on Imagenet</li>
<li>[SINGA-231] Batchnormlized VGG model for cifar-10</li>
<li>[SINGA-228] Add Cpp Version of Convolution and Pooling layer</li>
<li>[SINGA-227] Add Split and Merge Layer and add ResNet Implementation</li>
</ul></li>
<li><p>Documentation</p>
<ul>
<li>[SINGA-239] Transfer documentation files of v0.3.0 to github</li>
<li>[SINGA-238] RBM on mnist</li>
<li>[SINGA-225] Documentation for installation and Cifar10 example</li>
<li>[SINGA-223] Use Sphinx to create the website</li>
</ul></li>
<li><p>Tools for compilation and some utility code</p>
<ul>
<li>[SINGA-229] Complete install targets</li>
<li>[SINGA-221] Support for Travis-CI</li>
<li>[SINGA-217] build python package with setup.py</li>
<li>[SINGA-216] add jenkins for CI support</li>
<li>[SINGA-212] Disable the compilation of libcnmem if USE_CUDA is OFF</li>
<li>[SINGA-195] Channel for sending training statistics</li>
<li>[SINGA-185] Add CBLAS and GLOG detection for singav1</li>
<li>[SINGA-181] Add NVCC supporting for .cu files</li>
<li>[SINGA-177] Add fully cmake supporting for the compilation of singa_v1</li>
<li>[SINGA-172] Add CMake supporting for Cuda and Cudnn libs</li>
</ul></li>
</ul>
</span></div></article></div><div class="docLastUpdate"><em>Last updated on 02/04/2020</em></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/singa-logo-square.png" alt="Apache SINGA" width="66" height="58"/></a><div><h5>Docs</h5><a href="/docs/installation">Getting Started</a><a href="/docs/device">Guides</a><a href="/en/https://apache-singa.readthedocs.io/en/latest/">API Reference</a><a href="/docs/examples">Examples</a><a href="/docs/download-singa">Development</a></div><div><h5>Community</h5><a href="/en/users.html">User Showcase</a><a href="/docs/history-singa">SINGA History</a><a href="/docs/team-list">SINGA Team</a><a href="/blog">SINGA News</a><a href="https://github.com/apache/singa">GitHub</a><div class="social"><a class="github-button" href="https://github.com/apache/singa" data-count-href="/apache/singa/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">apache/singa-doc</a></div><div class="social"><a href="https://twitter.com/ApacheSINGA" class="twitter-follow-button">Follow @ApacheSINGA</a></div></div><div><h5>Apache Software Foundation</h5><a href="https://apache.org/" target="_blank" rel="noreferrer noopener">Foundation</a><a href="http://www.apache.org/licenses/" target="_blank" rel="noreferrer noopener">License</a><a href="http://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noreferrer noopener">Sponsorship</a><a href="http://www.apache.org/foundation/thanks.html" target="_blank" rel="noreferrer noopener">Thanks</a><a href="http://www.apache.org/events/current-event" target="_blank" rel="noreferrer noopener">Events</a><a href="http://www.apache.org/security/" target="_blank" rel="noreferrer noopener">Security</a></div></section><div style="width:100%;text-align:center"><a href="https://apache.org/" target="_blank" rel="noreferrer noopener" class="ApacheOpenSource"><img src="/img/asf_logo_wide.svg" alt="Apache Open Source"/></a><section class="copyright" style="max-width:60%;margin:0 auto">Copyright © 2021
   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.</section></div></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script><script>
                document.addEventListener('keyup', function(e) {
                  if (e.target !== document.body) {
                    return;
                  }
                  // keyCode for '/' (slash)
                  if (e.keyCode === 191) {
                    const search = document.getElementById('search_input_react');
                    search && search.focus();
                  }
                });
              </script><script>
              var search = docsearch({
                
                apiKey: '45202133606c0b5fa6d21cddc4725dd8',
                indexName: 'apache_singa',
                inputSelector: '#search_input_react',
                algoliaOptions: {"facetFilters":["language:en","version:3.0.0"]}
              });
            </script></body></html>