Haskell Artificial Neural Networking library
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

11 строки
17KB

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Network</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
  2. window.onload = function () {pageLoad();setSynopsis("mini_Network.html");};
  3. //]]>
  4. </script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption empty">&nbsp;</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">Network</p></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">data</span> <a href="#t:Network">Network</a> a = <a href="#v:Network">Network</a> {<ul class="subs"><li><a href="#v:layers">layers</a> :: [<a href="Network.html#t:Layer">Layer</a> a]</li></ul>}</li><li class="src short"><span class="keyword">data</span> <a href="#t:Layer">Layer</a> a = <a href="#v:Layer">Layer</a> {<ul class="subs"><li><a href="#v:weights">weights</a> :: Matrix a</li><li><a href="#v:biases">biases</a> :: Vector a</li></ul>}</li><li class="src short"><span class="keyword">data</span> <a href="#t:CostFunction">CostFunction</a><ul class="subs"><li>= <a href="#v:QuadraticCost">QuadraticCost</a></li><li>| <a href="#v:CrossEntropyCost">CrossEntropyCost</a></li></ul></li><li class="src short"><a href="#v:getDelta">getDelta</a> :: Floating a =&gt; <a href="Network.html#t:CostFunction">CostFunction</a> -&gt; a -&gt; a -&gt; a -&gt; a</li><li class="src short"><span class="keyword">type</span> <a href="#t:ActivationFunction">ActivationFunction</a> a = a -&gt; a</li><li class="src short"><span class="keyword">type</span> <a href="#t:ActivationFunctionDerivative">ActivationFunctionDerivative</a> a = a -&gt; a</li><li class="src short"><span class="keyword">type</span> <a href="#t:Sample">Sample</a> a = (Vector a, Vector a)</li><li class="src short"><span class="keyword">type</span> <a href="#t:Samples">Samples</a> a = [<a href="Network.html#t:Sample">Sample</a> a]</li><li class="src short"><a href="#v:-45--45--62-">(--&gt;)</a> :: Vector a -&gt; Vector a -&gt; <a href="Network.html#t:Sample">Sample</a> a</li><li class="src short"><span class="keyword">type</span> <a href="#t:LearningRate">LearningRate</a> = Double</li><li class="src short"><span class="keyword">type</span> <a href="#t:Lambda">Lambda</a> = Double</li><li class="src short"><span class="keyword">type</span> <a href="#t:TrainingDataLength">TrainingDataLength</a> = Int</li><li class="src short"><a href="#v:newNetwork">newNetwork</a> :: [Int] -&gt; IO (<a href="Network.html#t:Network">Network</a> Double)</li><li class="src short"><a href="#v:output">output</a> :: (Numeric a, Num (Vector a)) =&gt; <a href="Network.html#t:Network">Network</a> a -&gt; <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a -&gt; Vector a -&gt; Vector a</li><li class="src short"><a href="#v:outputs">outputs</a> :: (Numeric a, Num (Vector a)) =&gt; <a href="Network.html#t:Network">Network</a> a -&gt; <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a -&gt; Vector a -&gt; [Vector a]</li><li class="src short"><a href="#v:rawOutputs">rawOutputs</a> :: (Numeric a, Num (Vector a)) =&gt; <a href="Network.html#t:Network">Network</a> a -&gt; <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a -&gt; Vector a -&gt; [(Vector a, Vector a)]</li><li class="src short"><a href="#v:trainShuffled">trainShuffled</a> :: Int -&gt; (<a href="Network.html#t:Network">Network</a> Double -&gt; Int -&gt; String) -&gt; <a href="Network.html#t:Network">Network</a> Double -&gt; <a href="Network.html#t:CostFunction">CostFunction</a> -&gt; <a href="Network.html#t:Lambda">Lambda</a> -&gt; <a href="Network.html#t:Samples">Samples</a> Double -&gt; Int -&gt; Double -&gt; IO (<a href="Network.html#t:Network">Network</a> Double)</li><li class="src short"><a href="#v:trainNTimes">trainNTimes</a> :: Int -&gt; (<a href="Network.html#t:Network">Network</a> Double -&gt; Int -&gt; String) -&gt; <a href="Network.html#t:Network">Network</a> Double -&gt; <a href="Network.html#t:CostFunction">CostFunction</a> -&gt; <a href="Network.html#t:Lambda">Lambda</a> -&gt; <a href="Network.html#t:Samples">Samples</a> Double -&gt; Int -&gt; Double -&gt; <a href="Network.html#t:Network">Network</a> Double</li><li class="src short"><a href="#v:trainSGD">trainSGD</a> :: (Numeric Double, Floating Double) =&gt; <a href="Network.html#t:Network">Network</a> Double -&gt; <a href="Network.html#t:CostFunction">CostFunction</a> -&gt; <a href="Network.html#t:Lambda">Lambda</a> -&gt; <a href="Network.html#t:Samples">Samples</a> Double -&gt; Int -&gt; Double -&gt; <a href="Network.html#t:Network">Network</a> Double</li><li class="src short"><a href="#v:update">update</a> :: <a href="Network.html#t:LearningRate">LearningRate</a> -&gt; <a href="Network.html#t:CostFunction">CostFunction</a> -&gt; <a href="Network.html#t:Lambda">Lambda</a> -&gt; <a href="Network.html#t:TrainingDataLength">TrainingDataLength</a> -&gt; <a href="Network.html#t:Network">Network</a> Double -&gt; <a href="Network.html#t:Samples">Samples</a> Double -&gt; <a href="Network.html#t:Network">Network</a> Double</li><li class="src short"><a href="#v:backprop">backprop</a> :: <a href="Network.html#t:Network">Network</a> Double -&gt; <a href="Network.html#t:CostFunction">CostFunction</a> -&gt; <a href="Network.html#t:Sample">Sample</a> Double -&gt; [<a href="Network.html#t:Layer">Layer</a> Double]</li><li class="src short"><a href="#v:sigmoid">sigmoid</a> :: Floating a =&gt; <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a</li><li class="src short"><a href="#v:sigmoid-39-">sigmoid'</a> :: Floating a =&gt; <a href="Network.html#t:ActivationFunctionDerivative">ActivationFunctionDerivative</a> a</li><li class="src short"><a href="#v:shuffle">shuffle</a> :: [a] -&gt; IO [a]</li><li class="src short"><a href="#v:saveNetwork">saveNetwork</a> :: (Element a, Binary a) =&gt; FilePath -&gt; <a href="Network.html#t:Network">Network</a> a -&gt; IO ()</li><li class="src short"><a href="#v:newFileName">newFileName</a> :: FilePath -&gt; FilePath</li><li class="src short"><a href="#v:loadNetwork">loadNetwork</a> :: (Element a, Binary a) =&gt; FilePath -&gt; IO (<a href="Network.html#t:Network">Network</a> a)</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Network" class="def">Network</a> a</p><div class="doc"><p>The generic feedforward network type, a binary instance is implemented.
  5. It takes a list of layers
  6. with a minimum of one (output layer).
  7. It is usually constructed using the <code><a href="Network.html#v:newNetwork">newNetwork</a></code> function, initializing the matrices
  8. with some default random values.</p><pre>net &lt;- newNetwork [2, 3, 4]</pre></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Network" class="def">Network</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:layers" class="def">layers</a> :: [<a href="Network.html#t:Layer">Layer</a> a]</dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:Network" class="caption collapser" onclick="toggleSection('i:Network')">Instances</p><div id="section.i:Network" class="show"><table><tr><td class="src clearfix"><span class="inst-left">(Show a, Element a) =&gt; Show (<a href="Network.html#t:Network">Network</a> a)</span></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src clearfix"><span class="inst-left">(Element a, Binary a) =&gt; Binary (<a href="Network.html#t:Network">Network</a> a)</span></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Layer" class="def">Layer</a> a</p><div class="doc"><p>One layer of a network, storing the weights matrix and the biases vector
  9. of this layer.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Layer" class="def">Layer</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:weights" class="def">weights</a> :: Matrix a</dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:biases" class="def">biases</a> :: Vector a</dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:Layer" class="caption collapser" onclick="toggleSection('i:Layer')">Instances</p><div id="section.i:Layer" class="show"><table><tr><td class="src clearfix"><span class="inst-left">(Show a, Element a) =&gt; Show (<a href="Network.html#t:Layer">Layer</a> a)</span></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src clearfix"><span class="inst-left">(Element a, Binary a) =&gt; Binary (<a href="Network.html#t:Layer">Layer</a> a)</span></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:CostFunction" class="def">CostFunction</a></p><div class="doc"><p>Cost Function Enum</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:QuadraticCost" class="def">QuadraticCost</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CrossEntropyCost" class="def">CrossEntropyCost</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:CostFunction" class="caption collapser" onclick="toggleSection('i:CostFunction')">Instances</p><div id="section.i:CostFunction" class="show"><table><tr><td class="src clearfix"><span class="inst-left">Eq <a href="Network.html#t:CostFunction">CostFunction</a></span></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src clearfix"><span class="inst-left">Show <a href="Network.html#t:CostFunction">CostFunction</a></span></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:getDelta" class="def">getDelta</a> :: Floating a =&gt; <a href="Network.html#t:CostFunction">CostFunction</a> -&gt; a -&gt; a -&gt; a -&gt; a</p><div class="doc"><p>getDelta based on the raw input, the activated input and the desired output
  10. results in different values depending on the CostFunction type.</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:ActivationFunction" class="def">ActivationFunction</a> a = a -&gt; a</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:ActivationFunctionDerivative" class="def">ActivationFunctionDerivative</a> a = a -&gt; a</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Sample" class="def">Sample</a> a = (Vector a, Vector a)</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Samples" class="def">Samples</a> a = [<a href="Network.html#t:Sample">Sample</a> a]</p></div><div class="top"><p class="src"><a name="v:-45--45--62-" class="def">(--&gt;)</a> :: Vector a -&gt; Vector a -&gt; <a href="Network.html#t:Sample">Sample</a> a</p><div class="doc"><p>A simple synonym for the (,) operator, used to create samples very intuitively.</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:LearningRate" class="def">LearningRate</a> = Double</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Lambda" class="def">Lambda</a> = Double</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TrainingDataLength" class="def">TrainingDataLength</a> = Int</p></div><div class="top"><p class="src"><a name="v:newNetwork" class="def">newNetwork</a> :: [Int] -&gt; IO (<a href="Network.html#t:Network">Network</a> Double)</p></div><div class="top"><p class="src"><a name="v:output" class="def">output</a> :: (Numeric a, Num (Vector a)) =&gt; <a href="Network.html#t:Network">Network</a> a -&gt; <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a -&gt; Vector a -&gt; Vector a</p></div><div class="top"><p class="src"><a name="v:outputs" class="def">outputs</a> :: (Numeric a, Num (Vector a)) =&gt; <a href="Network.html#t:Network">Network</a> a -&gt; <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a -&gt; Vector a -&gt; [Vector a]</p></div><div class="top"><p class="src"><a name="v:rawOutputs" class="def">rawOutputs</a> :: (Numeric a, Num (Vector a)) =&gt; <a href="Network.html#t:Network">Network</a> a -&gt; <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a -&gt; Vector a -&gt; [(Vector a, Vector a)]</p></div><div class="top"><p class="src"><a name="v:trainShuffled" class="def">trainShuffled</a> :: Int -&gt; (<a href="Network.html#t:Network">Network</a> Double -&gt; Int -&gt; String) -&gt; <a href="Network.html#t:Network">Network</a> Double -&gt; <a href="Network.html#t:CostFunction">CostFunction</a> -&gt; <a href="Network.html#t:Lambda">Lambda</a> -&gt; <a href="Network.html#t:Samples">Samples</a> Double -&gt; Int -&gt; Double -&gt; IO (<a href="Network.html#t:Network">Network</a> Double)</p><div class="doc"><p>The most used training function, randomly shuffling the training set before
  11. every training epoch</p><pre>trainShuffled 30 (\n e -&gt; &quot;&quot;) net CrossEntropyCost 0.5 trainData 10 0.1</pre></div></div><div class="top"><p class="src"><a name="v:trainNTimes" class="def">trainNTimes</a> :: Int -&gt; (<a href="Network.html#t:Network">Network</a> Double -&gt; Int -&gt; String) -&gt; <a href="Network.html#t:Network">Network</a> Double -&gt; <a href="Network.html#t:CostFunction">CostFunction</a> -&gt; <a href="Network.html#t:Lambda">Lambda</a> -&gt; <a href="Network.html#t:Samples">Samples</a> Double -&gt; Int -&gt; Double -&gt; <a href="Network.html#t:Network">Network</a> Double</p></div><div class="top"><p class="src"><a name="v:trainSGD" class="def">trainSGD</a> :: (Numeric Double, Floating Double) =&gt; <a href="Network.html#t:Network">Network</a> Double -&gt; <a href="Network.html#t:CostFunction">CostFunction</a> -&gt; <a href="Network.html#t:Lambda">Lambda</a> -&gt; <a href="Network.html#t:Samples">Samples</a> Double -&gt; Int -&gt; Double -&gt; <a href="Network.html#t:Network">Network</a> Double</p></div><div class="top"><p class="src"><a name="v:update" class="def">update</a> :: <a href="Network.html#t:LearningRate">LearningRate</a> -&gt; <a href="Network.html#t:CostFunction">CostFunction</a> -&gt; <a href="Network.html#t:Lambda">Lambda</a> -&gt; <a href="Network.html#t:TrainingDataLength">TrainingDataLength</a> -&gt; <a href="Network.html#t:Network">Network</a> Double -&gt; <a href="Network.html#t:Samples">Samples</a> Double -&gt; <a href="Network.html#t:Network">Network</a> Double</p></div><div class="top"><p class="src"><a name="v:backprop" class="def">backprop</a> :: <a href="Network.html#t:Network">Network</a> Double -&gt; <a href="Network.html#t:CostFunction">CostFunction</a> -&gt; <a href="Network.html#t:Sample">Sample</a> Double -&gt; [<a href="Network.html#t:Layer">Layer</a> Double]</p></div><div class="top"><p class="src"><a name="v:sigmoid" class="def">sigmoid</a> :: Floating a =&gt; <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a</p></div><div class="top"><p class="src"><a name="v:sigmoid-39-" class="def">sigmoid'</a> :: Floating a =&gt; <a href="Network.html#t:ActivationFunctionDerivative">ActivationFunctionDerivative</a> a</p></div><div class="top"><p class="src"><a name="v:shuffle" class="def">shuffle</a> :: [a] -&gt; IO [a]</p></div><div class="top"><p class="src"><a name="v:saveNetwork" class="def">saveNetwork</a> :: (Element a, Binary a) =&gt; FilePath -&gt; <a href="Network.html#t:Network">Network</a> a -&gt; IO ()</p></div><div class="top"><p class="src"><a name="v:newFileName" class="def">newFileName</a> :: FilePath -&gt; FilePath</p></div><div class="top"><p class="src"><a name="v:loadNetwork" class="def">loadNetwork</a> :: (Element a, Binary a) =&gt; FilePath -&gt; IO (<a href="Network.html#t:Network">Network</a> a)</p></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.1</p></div></body></html>