|
- <!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[
- window.onload = function () {pageLoad();setSynopsis("mini_Network.html");};
- //]]>
- </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"> </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 => <a href="Network.html#t:CostFunction">CostFunction</a> -> a -> a -> a -> a</li><li class="src short"><span class="keyword">type</span> <a href="#t:ActivationFunction">ActivationFunction</a> a = a -> a</li><li class="src short"><span class="keyword">type</span> <a href="#t:ActivationFunctionDerivative">ActivationFunctionDerivative</a> a = a -> 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-">(-->)</a> :: Vector a -> Vector a -> <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] -> 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)) => <a href="Network.html#t:Network">Network</a> a -> <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a -> Vector a -> Vector a</li><li class="src short"><a href="#v:outputs">outputs</a> :: (Numeric a, Num (Vector a)) => <a href="Network.html#t:Network">Network</a> a -> <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a -> Vector a -> [Vector a]</li><li class="src short"><a href="#v:rawOutputs">rawOutputs</a> :: (Numeric a, Num (Vector a)) => <a href="Network.html#t:Network">Network</a> a -> <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a -> Vector a -> [(Vector a, Vector a)]</li><li class="src short"><a href="#v:trainShuffled">trainShuffled</a> :: Int -> (<a href="Network.html#t:Network">Network</a> Double -> Int -> String) -> <a href="Network.html#t:Network">Network</a> Double -> <a href="Network.html#t:CostFunction">CostFunction</a> -> <a href="Network.html#t:Lambda">Lambda</a> -> <a href="Network.html#t:Samples">Samples</a> Double -> Int -> Double -> IO (<a href="Network.html#t:Network">Network</a> Double)</li><li class="src short"><a href="#v:trainNTimes">trainNTimes</a> :: Int -> (<a href="Network.html#t:Network">Network</a> Double -> Int -> String) -> <a href="Network.html#t:Network">Network</a> Double -> <a href="Network.html#t:CostFunction">CostFunction</a> -> <a href="Network.html#t:Lambda">Lambda</a> -> <a href="Network.html#t:Samples">Samples</a> Double -> Int -> Double -> <a href="Network.html#t:Network">Network</a> Double</li><li class="src short"><a href="#v:trainSGD">trainSGD</a> :: (Numeric Double, Floating Double) => <a href="Network.html#t:Network">Network</a> Double -> <a href="Network.html#t:CostFunction">CostFunction</a> -> <a href="Network.html#t:Lambda">Lambda</a> -> <a href="Network.html#t:Samples">Samples</a> Double -> Int -> Double -> <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> -> <a href="Network.html#t:CostFunction">CostFunction</a> -> <a href="Network.html#t:Lambda">Lambda</a> -> <a href="Network.html#t:TrainingDataLength">TrainingDataLength</a> -> <a href="Network.html#t:Network">Network</a> Double -> <a href="Network.html#t:Samples">Samples</a> Double -> <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 -> <a href="Network.html#t:CostFunction">CostFunction</a> -> <a href="Network.html#t:Sample">Sample</a> Double -> [<a href="Network.html#t:Layer">Layer</a> Double]</li><li class="src short"><a href="#v:sigmoid">sigmoid</a> :: Floating a => <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a</li><li class="src short"><a href="#v:sigmoid-39-">sigmoid'</a> :: Floating a => <a href="Network.html#t:ActivationFunctionDerivative">ActivationFunctionDerivative</a> a</li><li class="src short"><a href="#v:shuffle">shuffle</a> :: [a] -> IO [a]</li><li class="src short"><a href="#v:saveNetwork">saveNetwork</a> :: (Element a, Binary a) => FilePath -> <a href="Network.html#t:Network">Network</a> a -> IO ()</li><li class="src short"><a href="#v:newFileName">newFileName</a> :: FilePath -> FilePath</li><li class="src short"><a href="#v:loadNetwork">loadNetwork</a> :: (Element a, Binary a) => FilePath -> 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.
- It takes a list of layers
- with a minimum of one (output layer).
- It is usually constructed using the <code><a href="Network.html#v:newNetwork">newNetwork</a></code> function, initializing the matrices
- with some default random values.</p><pre>net <- 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"> </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"> </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) => Show (<a href="Network.html#t:Network">Network</a> a)</span></td><td class="doc empty"> </td></tr><tr><td class="src clearfix"><span class="inst-left">(Element a, Binary a) => Binary (<a href="Network.html#t:Network">Network</a> a)</span></td><td class="doc empty"> </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
- 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"> </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"> </dd><dt class="src"><a name="v:biases" class="def">biases</a> :: Vector a</dt><dd class="doc empty"> </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) => Show (<a href="Network.html#t:Layer">Layer</a> a)</span></td><td class="doc empty"> </td></tr><tr><td class="src clearfix"><span class="inst-left">(Element a, Binary a) => Binary (<a href="Network.html#t:Layer">Layer</a> a)</span></td><td class="doc empty"> </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"> </td></tr><tr><td class="src"><a name="v:CrossEntropyCost" class="def">CrossEntropyCost</a></td><td class="doc empty"> </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"> </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"> </td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:getDelta" class="def">getDelta</a> :: Floating a => <a href="Network.html#t:CostFunction">CostFunction</a> -> a -> a -> a -> a</p><div class="doc"><p>getDelta based on the raw input, the activated input and the desired output
- 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 -> a</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:ActivationFunctionDerivative" class="def">ActivationFunctionDerivative</a> a = a -> 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">(-->)</a> :: Vector a -> Vector a -> <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] -> 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)) => <a href="Network.html#t:Network">Network</a> a -> <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a -> Vector a -> Vector a</p></div><div class="top"><p class="src"><a name="v:outputs" class="def">outputs</a> :: (Numeric a, Num (Vector a)) => <a href="Network.html#t:Network">Network</a> a -> <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a -> Vector a -> [Vector a]</p></div><div class="top"><p class="src"><a name="v:rawOutputs" class="def">rawOutputs</a> :: (Numeric a, Num (Vector a)) => <a href="Network.html#t:Network">Network</a> a -> <a href="Network.html#t:ActivationFunction">ActivationFunction</a> a -> Vector a -> [(Vector a, Vector a)]</p></div><div class="top"><p class="src"><a name="v:trainShuffled" class="def">trainShuffled</a> :: Int -> (<a href="Network.html#t:Network">Network</a> Double -> Int -> String) -> <a href="Network.html#t:Network">Network</a> Double -> <a href="Network.html#t:CostFunction">CostFunction</a> -> <a href="Network.html#t:Lambda">Lambda</a> -> <a href="Network.html#t:Samples">Samples</a> Double -> Int -> Double -> 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
- every training epoch</p><pre>trainShuffled 30 (\n e -> "") 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 -> (<a href="Network.html#t:Network">Network</a> Double -> Int -> String) -> <a href="Network.html#t:Network">Network</a> Double -> <a href="Network.html#t:CostFunction">CostFunction</a> -> <a href="Network.html#t:Lambda">Lambda</a> -> <a href="Network.html#t:Samples">Samples</a> Double -> Int -> Double -> <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) => <a href="Network.html#t:Network">Network</a> Double -> <a href="Network.html#t:CostFunction">CostFunction</a> -> <a href="Network.html#t:Lambda">Lambda</a> -> <a href="Network.html#t:Samples">Samples</a> Double -> Int -> Double -> <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> -> <a href="Network.html#t:CostFunction">CostFunction</a> -> <a href="Network.html#t:Lambda">Lambda</a> -> <a href="Network.html#t:TrainingDataLength">TrainingDataLength</a> -> <a href="Network.html#t:Network">Network</a> Double -> <a href="Network.html#t:Samples">Samples</a> Double -> <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 -> <a href="Network.html#t:CostFunction">CostFunction</a> -> <a href="Network.html#t:Sample">Sample</a> Double -> [<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 => <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 => <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] -> IO [a]</p></div><div class="top"><p class="src"><a name="v:saveNetwork" class="def">saveNetwork</a> :: (Element a, Binary a) => FilePath -> <a href="Network.html#t:Network">Network</a> a -> IO ()</p></div><div class="top"><p class="src"><a name="v:newFileName" class="def">newFileName</a> :: FilePath -> FilePath</p></div><div class="top"><p class="src"><a name="v:loadNetwork" class="def">loadNetwork</a> :: (Element a, Binary a) => FilePath -> 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>
|