diff options
-rw-r--r-- | TODO.rst | 6 | ||||
-rw-r--r-- | nerv/.gitignore | 1 | ||||
-rw-r--r-- | nerv/config.ld | 4 | ||||
-rw-r--r-- | nerv/doc/lua/index.html | 71 | ||||
-rw-r--r-- | nerv/doc/lua/ldoc_pale.css | 304 | ||||
-rw-r--r-- | nerv/doc/lua/modules/layer.affine.html | 145 | ||||
-rw-r--r-- | nerv/doc/lua/modules/matrix.html | 409 | ||||
-rw-r--r-- | nerv/doc/lua/modules/nerv.html | 428 | ||||
-rw-r--r-- | nerv/matrix/init.lua | 9 | ||||
-rw-r--r-- | nerv/nn/network.lua | 80 |
10 files changed, 85 insertions, 1372 deletions
diff --git a/TODO.rst b/TODO.rst new file mode 100644 index 0000000..baeb7ba --- /dev/null +++ b/TODO.rst @@ -0,0 +1,6 @@ +TODO List +--------- + +- NERV user manual +- NERV overview and introduction +- C header file dependency detection in Makefiles diff --git a/nerv/.gitignore b/nerv/.gitignore index 567609b..6b2f08b 100644 --- a/nerv/.gitignore +++ b/nerv/.gitignore @@ -1 +1,2 @@ build/ +doc/lua/ diff --git a/nerv/config.ld b/nerv/config.ld index f60b53f..2cee84a 100644 --- a/nerv/config.ld +++ b/nerv/config.ld @@ -5,4 +5,6 @@ backtick_references = true file = {'./', exclude = {'./lib/luaT'}} dir = 'doc/lua' style = '!pale' -kind_names = {topic = 'Manual',script = 'Programs'} +format = 'markdown' +kind_names = {topic = 'Manual', script = 'Programs'} +backtick_references = false diff --git a/nerv/doc/lua/index.html b/nerv/doc/lua/index.html deleted file mode 100644 index 56212cc..0000000 --- a/nerv/doc/lua/index.html +++ /dev/null @@ -1,71 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> -<head> - <title>NERV documentation</title> - <link rel="stylesheet" href="ldoc_pale.css" type="text/css" /> -</head> -<body> - -<div id="container"> - -<div id="product"> - <div id="product_logo"></div> - <div id="product_name"><big><b></b></big></div> - <div id="product_description"></div> -</div> <!-- id="product" --> - - -<div id="main"> - - -<!-- Menu --> - -<div id="navigation"> -<br/> -<h1>NERV</h1> - - - - -<h2>Modules</h2> -<ul class="$(kind=='Topics' and '' or 'nowrap'"> - <li><a href="modules/nerv.html">nerv</a></li> - <li><a href="modules/layer.affine.html">layer.affine</a></li> - <li><a href="modules/matrix.html">matrix</a></li> -</ul> - -</div> - -<div id="content"> - - - <h2>A Lua-based toolkit for high-performance deep learning</h2> - -<h2>Modules</h2> -<table class="module_list"> - <tr> - <td class="name" nowrap><a href="modules/nerv.html">nerv</a></td> - <td class="summary">NERV: a Lua-based toolkit for high-performance deep learning.</td> - </tr> - <tr> - <td class="name" nowrap><a href="modules/layer.affine.html">layer.affine</a></td> - <td class="summary">Parameter and layer classes related to linear transform.</td> - </tr> - <tr> - <td class="name" nowrap><a href="modules/matrix.html">matrix</a></td> - <td class="summary">Implements a fraction of matrix operations (methods) in Lua, while - others are implemented in C extension.</td> - </tr> -</table> - -</div> <!-- id="content" --> -</div> <!-- id="main" --> -<div id="about"> -<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.3</a></i> -<i style="float:right;">Last updated 2016-01-15 14:56:30 </i> -</div> <!-- id="about" --> -</div> <!-- id="container" --> -</body> -</html> diff --git a/nerv/doc/lua/ldoc_pale.css b/nerv/doc/lua/ldoc_pale.css deleted file mode 100644 index b071110..0000000 --- a/nerv/doc/lua/ldoc_pale.css +++ /dev/null @@ -1,304 +0,0 @@ -/* BEGIN RESET - -Copyright (c) 2010, Yahoo! Inc. All rights reserved. -Code licensed under the BSD License: -http://developer.yahoo.com/yui/license.html -version: 2.8.2r1 -*/ -html { - color: #000; - background: #FFF; -} -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td { - margin: 0; - padding: 0; -} -table { - border-collapse: collapse; - border-spacing: 0; -} -fieldset,img { - border: 0; -} -address,caption,cite,code,dfn,em,strong,th,var,optgroup { - font-style: inherit; - font-weight: inherit; -} -del,ins { - text-decoration: none; -} -li { - list-style: disc; - margin-left: 20px; -} -caption,th { - text-align: left; -} -h1,h2,h3,h4,h5,h6 { - font-size: 100%; - font-weight: bold; -} -q:before,q:after { - content: ''; -} -abbr,acronym { - border: 0; - font-variant: normal; -} -sup { - vertical-align: baseline; -} -sub { - vertical-align: baseline; -} -legend { - color: #000; -} -input,button,textarea,select,optgroup,option { - font-family: inherit; - font-size: inherit; - font-style: inherit; - font-weight: inherit; -} -input,button,textarea,select {*font-size:100%; -} -/* END RESET */ - -body { - margin-left: 1em; - margin-right: 1em; - font-family: arial, helvetica, geneva, sans-serif; - background-color: #ffffff; margin: 0px; -} - -code, tt { font-family: monospace; font-size: 1.1em; } -span.parameter { font-family:monospace; } -span.parameter:after { content:":"; } -span.types:before { content:"("; } -span.types:after { content:")"; } -.type { font-weight: bold; font-style:italic } - -body, p, td, th { font-size: .95em; line-height: 1.2em;} - -p, ul { margin: 10px 0 0 0px;} - -strong { font-weight: bold;} - -em { font-style: italic;} - -h1 { - font-size: 1.5em; - margin: 0 0 20px 0; -} -h2, h3, h4 { margin: 15px 0 10px 0; } -h2 { font-size: 1.25em; } -h3 { font-size: 1.15em; } -h4 { font-size: 1.06em; } - -a:link { font-weight: bold; color: #004080; text-decoration: none; } -a:visited { font-weight: bold; color: #006699; text-decoration: none; } -a:link:hover { text-decoration: underline; } - -hr { - color:#cccccc; - background: #00007f; - height: 1px; -} - -blockquote { margin-left: 3em; } - -ul { list-style-type: disc; } - -p.name { - font-family: "Andale Mono", monospace; - padding-top: 1em; -} - -pre { - background-color: rgb(245, 245, 245); - border: 1px solid #C0C0C0; /* silver */ - padding: 10px; - margin: 10px 0 10px 0; - overflow: auto; - font-family: "Andale Mono", monospace; -} - -pre.example { - font-size: .85em; -} - -table.index { border: 1px #00007f; } -table.index td { text-align: left; vertical-align: top; } - -#container { - margin-left: 1em; - margin-right: 1em; - background-color: #ffffff; -} - -#product { - text-align: center; - border-bottom: 1px solid #cccccc; - background-color: #ffffff; -} - -#product big { - font-size: 2em; -} - -#main { - background-color:#FFFFFF; // #f0f0f0; - //border-left: 2px solid #cccccc; -} - -#navigation { - float: left; - width: 14em; - vertical-align: top; - background-color:#FFFFFF; // #f0f0f0; - border-right: 2px solid #cccccc; - overflow: visible; -} - -#navigation h2 { - background-color:#FFFFFF;//:#e7e7e7; - font-size:1.1em; - color:#000000; - text-align: left; - padding:0.2em; - //border-top:1px solid #dddddd; - border-bottom:1px solid #dddddd; -} - -#navigation ul -{ - font-size:1em; - list-style-type: none; - margin: 1px 1px 10px 1px; -} - -#navigation li { - text-indent: -1em; - display: block; - margin: 3px 0px 0px 22px; -} - -#navigation li li a { - margin: 0px 3px 0px -1em; -} - -#content { - margin-left: 14em; - padding: 1em; - width: 700px; - border-left: 2px solid #cccccc; - // border-right: 2px solid #cccccc; - background-color: #ffffff; -} - -#about { - clear: both; - padding: 5px; - border-top: 2px solid #cccccc; - background-color: #ffffff; -} - -@media print { - body { - font: 12pt "Times New Roman", "TimeNR", Times, serif; - } - a { font-weight: bold; color: #004080; text-decoration: underline; } - - #main { - background-color: #ffffff; - border-left: 0px; - } - - #container { - margin-left: 2%; - margin-right: 2%; - background-color: #ffffff; - } - - #content { - padding: 1em; - background-color: #ffffff; - } - - #navigation { - display: none; - } - pre.example { - font-family: "Andale Mono", monospace; - font-size: 10pt; - page-break-inside: avoid; - } -} - -table.module_list { - border-width: 1px; - border-style: solid; - border-color: #cccccc; - border-collapse: collapse; -} -table.module_list td { - border-width: 1px; - padding: 3px; - border-style: solid; - border-color: #cccccc; -} -table.module_list td.name { background-color: #f0f0f0; ; min-width: 200px; } -table.module_list td.summary { width: 100%; } - -table.function_list { - border-width: 1px; - border-style: solid; - border-color: #cccccc; - border-collapse: collapse; -} -table.function_list td { - border-width: 1px; - padding: 3px; - border-style: solid; - border-color: #cccccc; -} -table.function_list td.name { background-color: #f6f6ff; ; min-width: 200px; } -table.function_list td.summary { width: 100%; } - -dl.table dt, dl.function dt {border-top: 1px solid #ccc; padding-top: 1em;} -dl.table dd, dl.function dd {padding-bottom: 1em; margin: 10px 0 0 20px;} -dl.table h3, dl.function h3 {font-size: .95em;} - -ul.nowrap { - overflow:auto; - whitespace:nowrap; -} - -/* stop sublists from having initial vertical space */ -ul ul { margin-top: 0px; } -ol ul { margin-top: 0px; } -ol ol { margin-top: 0px; } -ul ol { margin-top: 0px; } - -/* make the target distinct; helps when we're navigating to a function */ -a:target + * { - background-color: #FF9; -} - - -/* styles for prettification of source */ -pre .comment { color: #558817; } -pre .constant { color: #a8660d; } -pre .escape { color: #844631; } -pre .keyword { color: #aa5050; font-weight: bold; } -pre .library { color: #0e7c6b; } -pre .marker { color: #512b1e; background: #fedc56; font-weight: bold; } -pre .string { color: #8080ff; } -pre .number { color: #f8660d; } -pre .operator { color: #2239a8; font-weight: bold; } -pre .preprocessor, pre .prepro { color: #a33243; } -pre .global { color: #800080; } -pre .user-keyword { color: #800080; } -pre .prompt { color: #558817; } -pre .url { color: #272fc2; text-decoration: underline; } - diff --git a/nerv/doc/lua/modules/layer.affine.html b/nerv/doc/lua/modules/layer.affine.html deleted file mode 100644 index 817fc37..0000000 --- a/nerv/doc/lua/modules/layer.affine.html +++ /dev/null @@ -1,145 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> -<head> - <title>NERV documentation</title> - <link rel="stylesheet" href="../ldoc_pale.css" type="text/css" /> -</head> -<body> - -<div id="container"> - -<div id="product"> - <div id="product_logo"></div> - <div id="product_name"><big><b></b></big></div> - <div id="product_description"></div> -</div> <!-- id="product" --> - - -<div id="main"> - - -<!-- Menu --> - -<div id="navigation"> -<br/> -<h1>NERV</h1> - -<ul> - <li><a href="../index.html">Index</a></li> -</ul> - -<h2>Contents</h2> -<ul> -<li><a href="#Class_nerv_MatrixParam">Class nerv.MatrixParam </a></li> -<li><a href="#Class_nerv_AffineLayer">Class nerv.AffineLayer </a></li> -</ul> - - -<h2>Modules</h2> -<ul class="$(kind=='Topics' and '' or 'nowrap'"> - <li><a href="../modules/nerv.html">nerv</a></li> - <li><strong>layer.affine</strong></li> - <li><a href="../modules/matrix.html">matrix</a></li> -</ul> - -</div> - -<div id="content"> - -<h1>Module <code>layer.affine</code></h1> -<p>Parameter and layer classes related to linear transform.</p> -<p></p> - - -<h2><a href="#Class_nerv_MatrixParam">Class nerv.MatrixParam </a></h2> -<table class="function_list"> - <tr> - <td class="name" nowrap><a href="#MatrixParam:read">MatrixParam:read (handle)</a></td> - <td class="summary">Read from a file handle.</td> - </tr> -</table> -<h2><a href="#Class_nerv_AffineLayer">Class nerv.AffineLayer </a></h2> -<table class="function_list"> - <tr> - <td class="name" nowrap><a href="#AffineLayer:__init">AffineLayer:__init (id, global_conf, layer_conf)</a></td> - <td class="summary">The constructor.</td> - </tr> -</table> - -<br/> -<br/> - - - <h2 class="section-header has-description"><a name="Class_nerv_MatrixParam"></a>Class nerv.MatrixParam </h2> - - <div class="section-description"> - A parameter that consists of a single matrix - </div> - <dl class="function"> - <dt> - <a name = "MatrixParam:read"></a> - <strong>MatrixParam:read (handle)</strong> - </dt> - <dd> - Read from a file handle. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">handle</span> - the file handle - </li> - </ul> - - - - - -</dd> -</dl> - <h2 class="section-header has-description"><a name="Class_nerv_AffineLayer"></a>Class nerv.AffineLayer </h2> - - <div class="section-description"> - A fully-connected linear transform layer. - </div> - <dl class="function"> - <dt> - <a name = "AffineLayer:__init"></a> - <strong>AffineLayer:__init (id, global_conf, layer_conf)</strong> - </dt> - <dd> - The constructor. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">id</span> - - </li> - <li><span class="parameter">global_conf</span> - - </li> - <li><span class="parameter">layer_conf</span> - - </li> - </ul> - - - - - -</dd> -</dl> - - -</div> <!-- id="content" --> -</div> <!-- id="main" --> -<div id="about"> -<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.3</a></i> -<i style="float:right;">Last updated 2016-01-15 14:56:30 </i> -</div> <!-- id="about" --> -</div> <!-- id="container" --> -</body> -</html> diff --git a/nerv/doc/lua/modules/matrix.html b/nerv/doc/lua/modules/matrix.html deleted file mode 100644 index 2840e59..0000000 --- a/nerv/doc/lua/modules/matrix.html +++ /dev/null @@ -1,409 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> -<head> - <title>NERV documentation</title> - <link rel="stylesheet" href="../ldoc_pale.css" type="text/css" /> -</head> -<body> - -<div id="container"> - -<div id="product"> - <div id="product_logo"></div> - <div id="product_name"><big><b></b></big></div> - <div id="product_description"></div> -</div> <!-- id="product" --> - - -<div id="main"> - - -<!-- Menu --> - -<div id="navigation"> -<br/> -<h1>NERV</h1> - -<ul> - <li><a href="../index.html">Index</a></li> -</ul> - -<h2>Contents</h2> -<ul> -<li><a href="#Class_nerv_Matrix">Class nerv.Matrix </a></li> -<li><a href="#Class_nerv_CuMatrixFloat">Class nerv.CuMatrixFloat </a></li> -<li><a href="#Class_nerv_CuMatrixDouble">Class nerv.CuMatrixDouble </a></li> -<li><a href="#Class_nerv_MMatrix">Class nerv.MMatrix </a></li> -</ul> - - -<h2>Modules</h2> -<ul class="$(kind=='Topics' and '' or 'nowrap'"> - <li><a href="../modules/nerv.html">nerv</a></li> - <li><a href="../modules/layer.affine.html">layer.affine</a></li> - <li><strong>matrix</strong></li> -</ul> - -</div> - -<div id="content"> - -<h1>Module <code>matrix</code></h1> -<p>Implements a fraction of matrix operations (methods) in Lua, while - others are implemented in C extension.</p> -<p></p> - <h3>Info:</h3> - <ul> - <li><strong>Author</strong>: Ted Yin <[email protected]></li> - </ul> - - -<h2><a href="#Class_nerv_Matrix">Class nerv.Matrix </a></h2> -<table class="function_list"> - <tr> - <td class="name" nowrap><a href="#nerv.Matrix:__tostring__">nerv.Matrix:__tostring__ ()</a></td> - <td class="summary">Convert the matrix object to a string.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#nerv.Matrix:generate">nerv.Matrix:generate (gen)</a></td> - <td class="summary">Assign each element in a matrix using the value returned by a callback <code>gen</code>.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#nerv.Matrix:create">nerv.Matrix:create (nrow, ncol)</a></td> - <td class="summary">Create a fresh new matrix of the same matrix type (as <code>self</code>).</td> - </tr> - <tr> - <td class="name" nowrap><a href="#nerv.Matrix:__add__">nerv.Matrix:__add__ (b)</a></td> - <td class="summary">Operator overloading of <code>+</code>.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#nerv.Matrix:__sub__">nerv.Matrix:__sub__ (b)</a></td> - <td class="summary">Operator overloading of <code>-</code>.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#nerv.Matrix:__mul__">nerv.Matrix:__mul__ (b)</a></td> - <td class="summary">Operator overloading of <code>*</code>.</td> - </tr> -</table> -<h2><a href="#Class_nerv_CuMatrixFloat">Class nerv.CuMatrixFloat </a></h2> -<table class="function_list"> - <tr> - <td class="name" nowrap><a href="#nerv.CuMatrixFloat.new_from_host">nerv.CuMatrixFloat.new_from_host (mat)</a></td> - <td class="summary">Create a CUDA matrix copy of the host matrix (in memory)</td> - </tr> - <tr> - <td class="name" nowrap><a href="#nerv.CuMatrixFloat:new_to_host">nerv.CuMatrixFloat:new_to_host ()</a></td> - <td class="summary">Create a host matrix copy of the CUDA matrix</td> - </tr> -</table> -<h2><a href="#Class_nerv_CuMatrixDouble">Class nerv.CuMatrixDouble </a></h2> -<table class="function_list"> - <tr> - <td class="name" nowrap><a href="#nerv.CuMatrixDouble.new_from_host">nerv.CuMatrixDouble.new_from_host (mat)</a></td> - <td class="summary">Create a CUDA matrix copy of the host matrix (in memory)</td> - </tr> - <tr> - <td class="name" nowrap><a href="#nerv.CuMatrixDouble:new_to_host">nerv.CuMatrixDouble:new_to_host ()</a></td> - <td class="summary">Create a host matrix copy of the CUDA matrix</td> - </tr> -</table> -<h2><a href="#Class_nerv_MMatrix">Class nerv.MMatrix </a></h2> -<table class="function_list"> - <tr> - <td class="name" nowrap><a href="#nerv.MMatrix:copy_toh">nerv.MMatrix:copy_toh (b, ...)</a></td> - <td class="summary">A wrapper function for <code>copy_fromh</code></td> - </tr> - <tr> - <td class="name" nowrap><a href="#nerv.MMatrix.print_profile">nerv.MMatrix.print_profile ()</a></td> - <td class="summary">Print profiling info of host matrices</td> - </tr> - <tr> - <td class="name" nowrap><a href="#nerv.MMatrix.clear_profile">nerv.MMatrix.clear_profile ()</a></td> - <td class="summary">Clear profiling info of host matrices</td> - </tr> -</table> - -<br/> -<br/> - - - <h2 class="section-header has-description"><a name="Class_nerv_Matrix"></a>Class nerv.Matrix </h2> - - <div class="section-description"> - The base class for all matrices. - </div> - <dl class="function"> - <dt> - <a name = "nerv.Matrix:__tostring__"></a> - <strong>nerv.Matrix:__tostring__ ()</strong> - </dt> - <dd> - Convert the matrix object to a string. - - - - - - - -</dd> - <dt> - <a name = "nerv.Matrix:generate"></a> - <strong>nerv.Matrix:generate (gen)</strong> - </dt> - <dd> - Assign each element in a matrix using the value returned by a callback <code>gen</code>. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">gen</span> - the callback used to generated the values in the matrix, to which - the indices of row and column will be passed (e.g., <code>gen(i, j)</code>) - </li> - </ul> - - - - - -</dd> - <dt> - <a name = "nerv.Matrix:create"></a> - <strong>nerv.Matrix:create (nrow, ncol)</strong> - </dt> - <dd> - Create a fresh new matrix of the same matrix type (as <code>self</code>). - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">nrow</span> - optional, the number of rows in the created matrix if specified, - otherwise <code>self:nrow()</code> will be used - </li> - <li><span class="parameter">ncol</span> - optional, the number of columns in the created matrix if specified, - otherwise <code>self:ncol()</code> will be used - </li> - </ul> - - - - - -</dd> - <dt> - <a name = "nerv.Matrix:__add__"></a> - <strong>nerv.Matrix:__add__ (b)</strong> - </dt> - <dd> - Operator overloading of <code>+</code>. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">b</span> - - </li> - </ul> - - - - - -</dd> - <dt> - <a name = "nerv.Matrix:__sub__"></a> - <strong>nerv.Matrix:__sub__ (b)</strong> - </dt> - <dd> - Operator overloading of <code>-</code>. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">b</span> - - </li> - </ul> - - - - - -</dd> - <dt> - <a name = "nerv.Matrix:__mul__"></a> - <strong>nerv.Matrix:__mul__ (b)</strong> - </dt> - <dd> - Operator overloading of <code>*</code>. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">b</span> - - </li> - </ul> - - - - - -</dd> -</dl> - <h2 class="section-header has-description"><a name="Class_nerv_CuMatrixFloat"></a>Class nerv.CuMatrixFloat </h2> - - <div class="section-description"> - CUDA float matrices - </div> - <dl class="function"> - <dt> - <a name = "nerv.CuMatrixFloat.new_from_host"></a> - <strong>nerv.CuMatrixFloat.new_from_host (mat)</strong> - </dt> - <dd> - Create a CUDA matrix copy of the host matrix (in memory) - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">mat</span> - the host matrix - </li> - </ul> - - - - - -</dd> - <dt> - <a name = "nerv.CuMatrixFloat:new_to_host"></a> - <strong>nerv.CuMatrixFloat:new_to_host ()</strong> - </dt> - <dd> - Create a host matrix copy of the CUDA matrix - - - - - - - -</dd> -</dl> - <h2 class="section-header has-description"><a name="Class_nerv_CuMatrixDouble"></a>Class nerv.CuMatrixDouble </h2> - - <div class="section-description"> - CUDA double matrices - </div> - <dl class="function"> - <dt> - <a name = "nerv.CuMatrixDouble.new_from_host"></a> - <strong>nerv.CuMatrixDouble.new_from_host (mat)</strong> - </dt> - <dd> - Create a CUDA matrix copy of the host matrix (in memory) - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">mat</span> - the host matrix - </li> - </ul> - - - - - -</dd> - <dt> - <a name = "nerv.CuMatrixDouble:new_to_host"></a> - <strong>nerv.CuMatrixDouble:new_to_host ()</strong> - </dt> - <dd> - Create a host matrix copy of the CUDA matrix - - - - - - - -</dd> -</dl> - <h2 class="section-header has-description"><a name="Class_nerv_MMatrix"></a>Class nerv.MMatrix </h2> - - <div class="section-description"> - The base class for all host (in-memory) matrices - </div> - <dl class="function"> - <dt> - <a name = "nerv.MMatrix:copy_toh"></a> - <strong>nerv.MMatrix:copy_toh (b, ...)</strong> - </dt> - <dd> - A wrapper function for <code>copy_fromh</code> - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">b</span> - - </li> - <li><span class="parameter">...</span> - - </li> - </ul> - - - - - -</dd> - <dt> - <a name = "nerv.MMatrix.print_profile"></a> - <strong>nerv.MMatrix.print_profile ()</strong> - </dt> - <dd> - Print profiling info of host matrices - - - - - - - -</dd> - <dt> - <a name = "nerv.MMatrix.clear_profile"></a> - <strong>nerv.MMatrix.clear_profile ()</strong> - </dt> - <dd> - Clear profiling info of host matrices - - - - - - - -</dd> -</dl> - - -</div> <!-- id="content" --> -</div> <!-- id="main" --> -<div id="about"> -<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.3</a></i> -<i style="float:right;">Last updated 2016-01-15 14:56:30 </i> -</div> <!-- id="about" --> -</div> <!-- id="container" --> -</body> -</html> diff --git a/nerv/doc/lua/modules/nerv.html b/nerv/doc/lua/modules/nerv.html deleted file mode 100644 index 91baf9e..0000000 --- a/nerv/doc/lua/modules/nerv.html +++ /dev/null @@ -1,428 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> -<head> - <title>NERV documentation</title> - <link rel="stylesheet" href="../ldoc_pale.css" type="text/css" /> -</head> -<body> - -<div id="container"> - -<div id="product"> - <div id="product_logo"></div> - <div id="product_name"><big><b></b></big></div> - <div id="product_description"></div> -</div> <!-- id="product" --> - - -<div id="main"> - - -<!-- Menu --> - -<div id="navigation"> -<br/> -<h1>NERV</h1> - -<ul> - <li><a href="../index.html">Index</a></li> -</ul> - -<h2>Contents</h2> -<ul> -<li><a href="#Functions">Functions</a></li> -</ul> - - -<h2>Modules</h2> -<ul class="$(kind=='Topics' and '' or 'nowrap'"> - <li><strong>nerv</strong></li> - <li><a href="../modules/layer.affine.html">layer.affine</a></li> - <li><a href="../modules/matrix.html">matrix</a></li> -</ul> - -</div> - -<div id="content"> - -<h1>Module <code>nerv</code></h1> -<p>NERV: a Lua-based toolkit for high-performance deep learning.</p> -<p> - This file contains misc utility functions of NERV and finally initializes - NERV by including <code>init.lua</code> of other basic modules.</p> - <h3>Info:</h3> - <ul> - <li><strong>Author</strong>: Ted Yin <[email protected]></li> - </ul> - - -<h2><a href="#Functions">Functions</a></h2> -<table class="function_list"> - <tr> - <td class="name" nowrap><a href="#error_method_not_implemented">error_method_not_implemented ()</a></td> - <td class="summary">Dummy function.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#sprintf">sprintf (fmt, ...)</a></td> - <td class="summary">Format a string just like <a href="../modules/nerv.html#sprintf">sprintf</a> in C.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#printf">printf (fmt, ...)</a></td> - <td class="summary">Print a formatted string to stdout.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#error">error (fmt, ...)</a></td> - <td class="summary">Raise an global error with the formatted message.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#info">info (fmt, ...)</a></td> - <td class="summary">Print a notification message that begins with "info" and a timestamp.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#warning">warning (fmt, ...)</a></td> - <td class="summary">Print a warning message that begins with "warning" and a timestamp.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#class">class (tname, parenttname)</a></td> - <td class="summary">Create a class (Torch-compatible).</td> - </tr> - <tr> - <td class="name" nowrap><a href="#table.tostring">table.tostring (tbl)</a></td> - <td class="summary">Get the string representation of a table, which can be executed as a valid - piece of Lua code.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#get_type">get_type (tname)</a></td> - <td class="summary">Get the class by name.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#is_type">is_type (obj, tname)</a></td> - <td class="summary">Check if the object is of the certain class.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#dirname">dirname (filename)</a></td> - <td class="summary">Strip last component from file name.</td> - </tr> - <tr> - <td class="name" nowrap><a href="#include">include (filename)</a></td> - <td class="summary">Include a script file (chunk) into the current script.</td> - </tr> -</table> - -<br/> -<br/> - - - <h2 class="section-header "><a name="Functions"></a>Functions</h2> - - <dl class="function"> - <dt> - <a name = "error_method_not_implemented"></a> - <strong>error_method_not_implemented ()</strong> - </dt> - <dd> - Dummy function. - Display a friendly error message when user attempts to invoke a - non-implemented function. - - - - - - - -</dd> - <dt> - <a name = "sprintf"></a> - <strong>sprintf (fmt, ...)</strong> - </dt> - <dd> - Format a string just like <a href="../modules/nerv.html#sprintf">sprintf</a> in C. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">fmt</span> - the format string - </li> - <li><span class="parameter">...</span> - args, the data to be formatted - </li> - </ul> - - <h3>Returns:</h3> - <ol> - - the formatted string - </ol> - - - - -</dd> - <dt> - <a name = "printf"></a> - <strong>printf (fmt, ...)</strong> - </dt> - <dd> - Print a formatted string to stdout. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">fmt</span> - the format string - </li> - <li><span class="parameter">...</span> - args, the data to be formatted - </li> - </ul> - - - - - -</dd> - <dt> - <a name = "error"></a> - <strong>error (fmt, ...)</strong> - </dt> - <dd> - Raise an global error with the formatted message. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">fmt</span> - the format string - </li> - <li><span class="parameter">...</span> - args, the data to be formatted - </li> - </ul> - - - - - -</dd> - <dt> - <a name = "info"></a> - <strong>info (fmt, ...)</strong> - </dt> - <dd> - Print a notification message that begins with "info" and a timestamp. - Instead of using <a href="../modules/nerv.html#printf">nerv.printf</a>, normal users should use this to print any - notification information. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">fmt</span> - the format string - </li> - <li><span class="parameter">...</span> - args, the data to be formatted - </li> - </ul> - - - - - -</dd> - <dt> - <a name = "warning"></a> - <strong>warning (fmt, ...)</strong> - </dt> - <dd> - Print a warning message that begins with "warning" and a timestamp. - Instead of using <a href="../modules/nerv.html#printf">nerv.printf</a>, normal users should use this to print any - warnings. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">fmt</span> - the format string - </li> - <li><span class="parameter">...</span> - args, the data to be formatted - </li> - </ul> - - - - - -</dd> - <dt> - <a name = "class"></a> - <strong>class (tname, parenttname)</strong> - </dt> - <dd> - Create a class (Torch-compatible). - Use this to create a class in NERV. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">tname</span> - the class name - </li> - <li><span class="parameter">parenttname</span> - the parent class name (from which it inherits) - </li> - </ul> - - <h3>Returns:</h3> - <ol> - - the created class - </ol> - - - - -</dd> - <dt> - <a name = "table.tostring"></a> - <strong>table.tostring (tbl)</strong> - </dt> - <dd> - Get the string representation of a table, which can be executed as a valid - piece of Lua code. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">tbl</span> - the table - </li> - </ul> - - <h3>Returns:</h3> - <ol> - - the string representation which will result in a Lua table entity - when evaluated - </ol> - - - - -</dd> - <dt> - <a name = "get_type"></a> - <strong>get_type (tname)</strong> - </dt> - <dd> - Get the class by name. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">tname</span> - the name of the class - </li> - </ul> - - <h3>Returns:</h3> - <ol> - - the class entity - </ol> - - - - -</dd> - <dt> - <a name = "is_type"></a> - <strong>is_type (obj, tname)</strong> - </dt> - <dd> - Check if the object is of the certain class. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">obj</span> - the object ("class instance") - </li> - <li><span class="parameter">tname</span> - the class name ("type name") - </li> - </ul> - - - - - -</dd> - <dt> - <a name = "dirname"></a> - <strong>dirname (filename)</strong> - </dt> - <dd> - Strip last component from file name. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">filename</span> - the path to a file - </li> - </ul> - - <h3>Returns:</h3> - <ol> - - the path to the containing directory - </ol> - - - - -</dd> - <dt> - <a name = "include"></a> - <strong>include (filename)</strong> - </dt> - <dd> - Include a script file (chunk) into the current script. - An analogy to <code>#include</code> in C. Note that the effect is the same as executing - <code>dofile(filename)</code> at the current line. - - - <h3>Parameters:</h3> - <ul> - <li><span class="parameter">filename</span> - the path to a file - </li> - </ul> - - <h3>Returns:</h3> - <ol> - - all values returned by the chunk - </ol> - - - - -</dd> -</dl> - - -</div> <!-- id="content" --> -</div> <!-- id="main" --> -<div id="about"> -<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.3</a></i> -<i style="float:right;">Last updated 2016-01-15 14:56:30 </i> -</div> <!-- id="about" --> -</div> <!-- id="container" --> -</body> -</html> diff --git a/nerv/matrix/init.lua b/nerv/matrix/init.lua index 722c780..5d0544a 100644 --- a/nerv/matrix/init.lua +++ b/nerv/matrix/init.lua @@ -37,10 +37,6 @@ function nerv.Matrix:__tostring__() return table.concat(strt) end ---- Assign each element in a matrix using the value returned by a callback `gen`. --- @param gen the callback used to generated the values in the matrix, to which --- the indices of row and column will be passed (e.g., `gen(i, j)`) - function nerv.Matrix:_generate(gen) if (self:dim() == 2) then for i = 0, self:nrow() - 1 do @@ -51,11 +47,14 @@ function nerv.Matrix:_generate(gen) end else for j = 0, self:ncol() - 1 do - self[j] = gen(j) + self[j] = gen(j) end end end +--- Assign each element in a matrix using the value returned by a callback `gen`. +-- @param gen the callback used to generated the values in the matrix, to which +-- the indices of row and column will be passed (e.g., `gen(i, j)`) function nerv.Matrix:generate(gen) local tmp if nerv.is_type(self, 'nerv.CuMatrixFloat') then diff --git a/nerv/nn/network.lua b/nerv/nn/network.lua index cf6a4d3..19fa9d3 100644 --- a/nerv/nn/network.lua +++ b/nerv/nn/network.lua @@ -1,5 +1,43 @@ +--- Implements the concept of computable but opaque networks built ("compiled") +-- from nested layers +-- @author Qi Liu <[email protected]> +-- @author Ted Yin <[email protected]> + +--- The class describing a computable but opaque network built from nested +-- layers. +-- @type nerv.Network + local network = nerv.class('nerv.Network') +--- The constructor. +-- @param id the identifier of the network (currently having no effects) +-- @param global_conf a table describing the computation state and providing +-- with some global settings +-- +-- The following fields in `global_conf` will be used: +-- +-- * `use_cpu`: whether to use CPU for the computation +-- * `mmat_type`: the class used for creating matrices in CPU computation +-- * `cumat_type` (if `use_cpu = false`): the class used for creating matrices +-- in GPU computation +-- +-- The following fields in `global_conf` will be altered: +-- +-- * `mask`: an array of `chunk_size` length containing column binary vectors +-- indicating whether each frame in a *batch matrix* (i.e. one matrix in a BPTT +-- chunk/"mini-batch") contains a valid data (1 indicates data, 0 indicates +-- holes) +-- +-- @param network_conf a table providing with settings dedicated for the +-- network. Available fields includes: +-- +-- * `network`: a `nerv.Layer` instance describing the structure of the network +-- to be compiled +-- * `clip`: a `number` value indicating the cliping threshold (i.e. preserve +-- the values within [-clip, +clip]) +-- * `nn_act_default`: a `number` value indicating the value used for filling +-- "holes" in activation values of a batch matrix (0 by default) + function network:__init(id, global_conf, network_conf) self.id = id self.network = network_conf.network @@ -150,6 +188,11 @@ function network:compile(layer) return socket end +--- Initialize the network for training. +-- To be called before all the epochs, will resolve the structure of the +-- network and allocate the memory for storing temporary values +-- @param batch_size The size of a batch matrix +-- @param chunk_size The size of a BPTT chunk function network:init(batch_size, chunk_size) self.batch_size = batch_size self.chunk_size = chunk_size @@ -167,6 +210,8 @@ function network:init(batch_size, chunk_size) end end +--- Initialize the internal state of the network for the new epoch. +-- To be called before each new epoch function network:epoch_init() self.timestamp = 0 for i = 1, #self.layers do @@ -457,15 +502,29 @@ function network:set_err_output(err_output) end end ---[[ - [info] is a table that contains information of current mini-batch. These fields must be contained: - [input], [output] : matrix array which stores the network input and output - [seq_length] : a table contains the length of every sequences - [new_seq]: a table contains the batch number of new sequences - [do_train]: a bool value indicates do train or not - if [do_train] is true, these fileds also must be contained: - [err_input], [err_output] : matrix array which stores the network err_input and err_output ---]] +--- Initialize the internal state of the network for the new mini-batch (a BPTT chunk). +-- To be called before each propagation/back-propagation +-- @param info a table containing information needed for the current mini-batch computation. The following fields must be supplied: +-- +-- * `input`: an array containing `chunk_size` number of row-major batch +-- matrices with `batch_size` rows +-- * `output`: similar to `input`, but the matrices have different number of +-- columns (depending on the width of the output, which is typically 1 for +-- criteria, i.e. single column indicating the error), used to hold the output of the network +-- * `seq_length` : a table containing the length (number of frames) of each sequence (utterance) +-- * `new_seq`: a table containing the indices of batch matrix rows that are the +-- first frames of a sequence +-- * `do_train`: a bool value indicating whether to update the network +-- +-- If `do_train` is true, two additional fields are required: +-- +-- * `err_input`: an array with the same structure as `output` but containg the initial +-- values for computing errors in back-propagation (when the width of the +-- output is 1, `gconf.mask` is typically used here to ignore the invalid +-- values produced by "holes" in the mini-batch). +-- * `err_output`: an array with the same structure as `input`. Although we +-- are mostly not interested in its values, just allocate this to unify +-- the computation and ease the implementation function network:mini_batch_init(info) self.info = info self:set_input(self.info.input) @@ -573,6 +632,7 @@ function network:mini_batch_init(info) end end +--- Perform a propagation. function network:propagate() for i = 1, #self.queue do local t, id = self.queue[i].chunk, self.queue[i].id @@ -590,6 +650,7 @@ function network:propagate() end end +--- Perform a backward propagation to calculate gradients used for update. function network:back_propagate() for i = #self.queue, 1, -1 do local t, id = self.queue[i].chunk, self.queue[i].id @@ -614,6 +675,7 @@ function network:back_propagate() end end +--- Update the parameters bound to each layer. function network:update() for i = 1, #self.layers do self.layers[i]:update() |