Haskell Artificial Neural Networking library
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

11 lignes
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>