Files
C-Plus-Plus/d2/d58/neural__network_8cpp.html
2025-05-19 11:38:33 +00:00

523 lines
36 KiB
HTML

<!-- HTML header for doxygen 1.12.0-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.13.2"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>TheAlgorithms/C++: machine_learning/neural_network.cpp File Reference</title>
<link rel="icon" href="../../favicon.svg" type="image/x-icon" />
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@xpack-3rd-party/doxygen-awesome-css@2.2.0-1/doxygen-awesome-darkmode-toggle.js"></script>
<script type="text/javascript">
DoxygenAwesomeDarkModeToggle.init()
</script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
window.MathJax = {
options: {
ignoreHtmlClass: 'tex2jax_ignore',
processHtmlClass: 'tex2jax_process'
},
loader: {
load: ['[tex]/ams']
},
tex: {
macros: {},
packages: ['base','configmacros','ams']
}
};
</script>
<script type="text/javascript" id="MathJax-script" async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
<link href="../../doxygen-awesome.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../project_logo.png"/></td>
<td id="projectalign">
<div id="projectname">TheAlgorithms/C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">All the algorithms implemented in C++</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.13.2 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
</script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(1); });
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
<script type="text/javascript" src="../../menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('../../',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('d2/d58/neural__network_8cpp.html','../../'); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#namespaces">Namespaces</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle"><div class="title">neural_network.cpp File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Implementation of [Multilayer Perceptron] (<a href="https://en.wikipedia.org/wiki/Multilayer_perceptron">https://en.wikipedia.org/wiki/Multilayer_perceptron</a>).
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;algorithm&gt;</code><br />
<code>#include &lt;cassert&gt;</code><br />
<code>#include &lt;chrono&gt;</code><br />
<code>#include &lt;cmath&gt;</code><br />
<code>#include &lt;fstream&gt;</code><br />
<code>#include &lt;iostream&gt;</code><br />
<code>#include &lt;sstream&gt;</code><br />
<code>#include &lt;string&gt;</code><br />
<code>#include &lt;valarray&gt;</code><br />
<code>#include &lt;vector&gt;</code><br />
<code>#include &quot;<a class="el" href="../../d8/d95/vector__ops_8hpp_source.html">vector_ops.hpp</a>&quot;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for neural_network.cpp:</div>
<div class="dyncontent">
<div class="center"><div class="zoom"><iframe scrolling="no" frameborder="0" src="../../d2/d23/neural__network_8cpp__incl.svg" width="100%" height="449"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div></div>
</div>
</div>
<p><a href="../../d2/d58/neural__network_8cpp_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../dc/d93/classmachine__learning_1_1neural__network_1_1layers_1_1_dense_layer.html">machine_learning::neural_network::layers::DenseLayer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d4/df4/classmachine__learning_1_1neural__network_1_1_neural_network.html">machine_learning::neural_network::NeuralNetwork</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
Namespaces</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d8/d77/namespacemachine__learning.html">machine_learning</a></td></tr>
<tr class="memdesc:d8/d77/namespacemachine__learning"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a href="https://en.wikipedia.org/wiki/A*_search_algorithm" target="_blank">A* search algorithm</a> <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d0/d2e/namespaceneural__network.html">neural_network</a></td></tr>
<tr class="memdesc:d0/d2e/namespaceneural__network"><td class="mdescLeft">&#160;</td><td class="mdescRight">Neural Network or Multilayer Perceptron. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d39/namespaceactivations.html">activations</a></td></tr>
<tr class="memdesc:d5/d39/namespaceactivations"><td class="mdescLeft">&#160;</td><td class="mdescRight">Various activation functions used in Neural network. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d3/d17/namespaceutil__functions.html">util_functions</a></td></tr>
<tr class="memdesc:d3/d17/namespaceutil__functions"><td class="mdescLeft">&#160;</td><td class="mdescRight">Various utility functions used in Neural network. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="../../d5/d2c/namespacelayers.html">layers</a></td></tr>
<tr class="memdesc:d5/d2c/namespacelayers"><td class="mdescLeft">&#160;</td><td class="mdescRight">This namespace contains layers used in MLP. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a23aa9d32bcbcd65cfc85f0a41e2afadc" id="r_a23aa9d32bcbcd65cfc85f0a41e2afadc"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a23aa9d32bcbcd65cfc85f0a41e2afadc">machine_learning::neural_network::activations::sigmoid</a> (const double &amp;x)</td></tr>
<tr class="separator:a23aa9d32bcbcd65cfc85f0a41e2afadc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a76eb66212d577f948a457b6e29d87c46" id="r_a76eb66212d577f948a457b6e29d87c46"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a76eb66212d577f948a457b6e29d87c46">machine_learning::neural_network::activations::dsigmoid</a> (const double &amp;x)</td></tr>
<tr class="separator:a76eb66212d577f948a457b6e29d87c46"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af8f264600754602b6a9ea19cc690e50e" id="r_af8f264600754602b6a9ea19cc690e50e"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af8f264600754602b6a9ea19cc690e50e">machine_learning::neural_network::activations::relu</a> (const double &amp;x)</td></tr>
<tr class="separator:af8f264600754602b6a9ea19cc690e50e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa69e95a34054d7989bf446f96b2ffaf9" id="r_aa69e95a34054d7989bf446f96b2ffaf9"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa69e95a34054d7989bf446f96b2ffaf9">machine_learning::neural_network::activations::drelu</a> (const double &amp;x)</td></tr>
<tr class="separator:aa69e95a34054d7989bf446f96b2ffaf9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a371aa7dd5d5add0143d1756bb0a1b32f" id="r_a371aa7dd5d5add0143d1756bb0a1b32f"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a371aa7dd5d5add0143d1756bb0a1b32f">machine_learning::neural_network::activations::tanh</a> (const double &amp;x)</td></tr>
<tr class="separator:a371aa7dd5d5add0143d1756bb0a1b32f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a5e874b9774aa5362dbcf288828b95c" id="r_a2a5e874b9774aa5362dbcf288828b95c"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2a5e874b9774aa5362dbcf288828b95c">machine_learning::neural_network::activations::dtanh</a> (const double &amp;x)</td></tr>
<tr class="separator:a2a5e874b9774aa5362dbcf288828b95c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45d3e30406712ada3d9713ece3c1b153" id="r_a45d3e30406712ada3d9713ece3c1b153"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a45d3e30406712ada3d9713ece3c1b153">machine_learning::neural_network::util_functions::square</a> (const double &amp;x)</td></tr>
<tr class="separator:a45d3e30406712ada3d9713ece3c1b153"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a32c00da08f2cf641dd336270f6e3c407" id="r_a32c00da08f2cf641dd336270f6e3c407"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a32c00da08f2cf641dd336270f6e3c407">machine_learning::neural_network::util_functions::identity_function</a> (const double &amp;x)</td></tr>
<tr class="separator:a32c00da08f2cf641dd336270f6e3c407"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8dca7b867074164d5f45b0f3851269d" id="r_aa8dca7b867074164d5f45b0f3851269d"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa8dca7b867074164d5f45b0f3851269d">test</a> ()</td></tr>
<tr class="separator:aa8dca7b867074164d5f45b0f3851269d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4" id="r_ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
<tr class="memdesc:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Main function. <br /></td></tr>
<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Implementation of [Multilayer Perceptron] (<a href="https://en.wikipedia.org/wiki/Multilayer_perceptron">https://en.wikipedia.org/wiki/Multilayer_perceptron</a>). </p>
<dl class="section author"><dt>Author</dt><dd><a href="https://github.com/imdeep2905" target="_blank">Deep Raval</a></dd></dl>
<p>A multilayer perceptron (MLP) is a class of feedforward artificial neural network (ANN). The term MLP is used ambiguously, sometimes loosely to any feedforward ANN, sometimes strictly to refer to networks composed of multiple layers of perceptrons (with threshold activation). Multilayer perceptrons are sometimes colloquially referred to as "vanilla" neural networks, especially when they have a single hidden layer.</p>
<p>An MLP consists of at least three layers of nodes: an input layer, a hidden layer and an output layer. Except for the input nodes, each node is a neuron that uses a nonlinear activation function. MLP utilizes a supervised learning technique called backpropagation for training. Its multiple layers and non-linear activation distinguish MLP from a linear perceptron. It can distinguish data that is not linearly separable.</p>
<p>See <a href="https://en.wikipedia.org/wiki/Backpropagation" target="_blank">Backpropagation</a> for training algorithm.</p>
<dl class="section note"><dt>Note</dt><dd>This implementation uses mini-batch gradient descent as optimizer and MSE as loss function. Bias is also not included. </dd></dl>
<p class="definition">Definition in file <a class="el" href="../../d2/d58/neural__network_8cpp_source.html">neural_network.cpp</a>.</p>
</div><h2 class="groupheader">Function Documentation</h2>
<a id="aa69e95a34054d7989bf446f96b2ffaf9" name="aa69e95a34054d7989bf446f96b2ffaf9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa69e95a34054d7989bf446f96b2ffaf9">&#9670;&#160;</a></span>drelu()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double machine_learning::neural_network::activations::drelu </td>
<td>(</td>
<td class="paramtype">const double &amp;</td> <td class="paramname"><span class="paramname"><em>x</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Derivative of relu function </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Value </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>derivative of relu(x) </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../d2/d58/neural__network_8cpp_source.html#l00081">81</a> of file <a class="el" href="../../d2/d58/neural__network_8cpp_source.html">neural_network.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 81</span>{ <span class="keywordflow">return</span> x &gt;= 0.0 ? 1.0 : 0.0; }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a76eb66212d577f948a457b6e29d87c46" name="a76eb66212d577f948a457b6e29d87c46"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a76eb66212d577f948a457b6e29d87c46">&#9670;&#160;</a></span>dsigmoid()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double machine_learning::neural_network::activations::dsigmoid </td>
<td>(</td>
<td class="paramtype">const double &amp;</td> <td class="paramname"><span class="paramname"><em>x</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Derivative of sigmoid function </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Value </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Returns derivative of sigmoid(x) </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../d2/d58/neural__network_8cpp_source.html#l00067">67</a> of file <a class="el" href="../../d2/d58/neural__network_8cpp_source.html">neural_network.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 67</span>{ <span class="keywordflow">return</span> x * (1 - x); }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a2a5e874b9774aa5362dbcf288828b95c" name="a2a5e874b9774aa5362dbcf288828b95c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2a5e874b9774aa5362dbcf288828b95c">&#9670;&#160;</a></span>dtanh()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double machine_learning::neural_network::activations::dtanh </td>
<td>(</td>
<td class="paramtype">const double &amp;</td> <td class="paramname"><span class="paramname"><em>x</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Derivative of Sigmoid function </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Value </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Returns derivative of tanh(x) </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../d2/d58/neural__network_8cpp_source.html#l00095">95</a> of file <a class="el" href="../../d2/d58/neural__network_8cpp_source.html">neural_network.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 95</span>{ <span class="keywordflow">return</span> 1 - x * x; }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a32c00da08f2cf641dd336270f6e3c407" name="a32c00da08f2cf641dd336270f6e3c407"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a32c00da08f2cf641dd336270f6e3c407">&#9670;&#160;</a></span>identity_function()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double machine_learning::neural_network::util_functions::identity_function </td>
<td>(</td>
<td class="paramtype">const double &amp;</td> <td class="paramname"><span class="paramname"><em>x</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Identity function </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Value </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Returns x </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../d2/d58/neural__network_8cpp_source.html#l00112">112</a> of file <a class="el" href="../../d2/d58/neural__network_8cpp_source.html">neural_network.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 112</span>{ <span class="keywordflow">return</span> x; }</div>
</div><!-- fragment -->
</div>
</div>
<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&#160;</a></span>main()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int main </td>
<td>(</td>
<td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Main function. </p>
<dl class="section return"><dt>Returns</dt><dd>0 on exit </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../d2/d58/neural__network_8cpp_source.html#l00833">833</a> of file <a class="el" href="../../d2/d58/neural__network_8cpp_source.html">neural_network.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 833</span> {</div>
<div class="line"><span class="lineno"> 834</span> <span class="comment">// Testing</span></div>
<div class="line"><span class="lineno"> 835</span> <a class="code hl_function" href="#aa8dca7b867074164d5f45b0f3851269d">test</a>();</div>
<div class="line"><span class="lineno"> 836</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><span class="lineno"> 837</span>}</div>
<div class="ttc" id="aneural__network_8cpp_html_aa8dca7b867074164d5f45b0f3851269d"><div class="ttname"><a href="#aa8dca7b867074164d5f45b0f3851269d">test</a></div><div class="ttdeci">static void test()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/d58/neural__network_8cpp_source.html#l00805">neural_network.cpp:805</a></div></div>
</div><!-- fragment -->
</div>
</div>
<a id="af8f264600754602b6a9ea19cc690e50e" name="af8f264600754602b6a9ea19cc690e50e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af8f264600754602b6a9ea19cc690e50e">&#9670;&#160;</a></span>relu()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double machine_learning::neural_network::activations::relu </td>
<td>(</td>
<td class="paramtype">const double &amp;</td> <td class="paramname"><span class="paramname"><em>x</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Relu function </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Value </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>relu(x) </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../d2/d58/neural__network_8cpp_source.html#l00074">74</a> of file <a class="el" href="../../d2/d58/neural__network_8cpp_source.html">neural_network.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 74</span>{ <span class="keywordflow">return</span> std::max(0.0, x); }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a23aa9d32bcbcd65cfc85f0a41e2afadc" name="a23aa9d32bcbcd65cfc85f0a41e2afadc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a23aa9d32bcbcd65cfc85f0a41e2afadc">&#9670;&#160;</a></span>sigmoid()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double machine_learning::neural_network::activations::sigmoid </td>
<td>(</td>
<td class="paramtype">const double &amp;</td> <td class="paramname"><span class="paramname"><em>x</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Sigmoid function </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Value </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Returns sigmoid(x) </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../d2/d58/neural__network_8cpp_source.html#l00060">60</a> of file <a class="el" href="../../d2/d58/neural__network_8cpp_source.html">neural_network.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 60</span>{ <span class="keywordflow">return</span> 1.0 / (1.0 + std::exp(-x)); }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a45d3e30406712ada3d9713ece3c1b153" name="a45d3e30406712ada3d9713ece3c1b153"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a45d3e30406712ada3d9713ece3c1b153">&#9670;&#160;</a></span>square()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double machine_learning::neural_network::util_functions::square </td>
<td>(</td>
<td class="paramtype">const double &amp;</td> <td class="paramname"><span class="paramname"><em>x</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Square function </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Value </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Returns x * x </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../d2/d58/neural__network_8cpp_source.html#l00106">106</a> of file <a class="el" href="../../d2/d58/neural__network_8cpp_source.html">neural_network.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 106</span>{ <span class="keywordflow">return</span> x * x; }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a371aa7dd5d5add0143d1756bb0a1b32f" name="a371aa7dd5d5add0143d1756bb0a1b32f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a371aa7dd5d5add0143d1756bb0a1b32f">&#9670;&#160;</a></span>tanh()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double machine_learning::neural_network::activations::tanh </td>
<td>(</td>
<td class="paramtype">const double &amp;</td> <td class="paramname"><span class="paramname"><em>x</em></span></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Tanh function </p><dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">X</td><td>Value </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Returns tanh(x) </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../d2/d58/neural__network_8cpp_source.html#l00088">88</a> of file <a class="el" href="../../d2/d58/neural__network_8cpp_source.html">neural_network.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 88</span>{ <span class="keywordflow">return</span> 2 / (1 + std::exp(-2 * x)) - 1; }</div>
</div><!-- fragment -->
</div>
</div>
<a id="aa8dca7b867074164d5f45b0f3851269d" name="aa8dca7b867074164d5f45b0f3851269d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8dca7b867074164d5f45b0f3851269d">&#9670;&#160;</a></span>test()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void test </td>
<td>(</td>
<td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel static">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Function to test neural network </p><dl class="section return"><dt>Returns</dt><dd>none </dd></dl>
<p class="definition">Definition at line <a class="el" href="../../d2/d58/neural__network_8cpp_source.html#l00805">805</a> of file <a class="el" href="../../d2/d58/neural__network_8cpp_source.html">neural_network.cpp</a>.</p>
<div class="fragment"><div class="line"><span class="lineno"> 805</span> {</div>
<div class="line"><span class="lineno"> 806</span> <span class="comment">// Creating network with 3 layers for &quot;iris.csv&quot;</span></div>
<div class="line"><span class="lineno"> 807</span> <a class="code hl_class" href="../../d4/df4/classmachine__learning_1_1neural__network_1_1_neural_network.html">machine_learning::neural_network::NeuralNetwork</a> myNN =</div>
<div class="line"><span class="lineno"> 808</span> <a class="code hl_class" href="../../d4/df4/classmachine__learning_1_1neural__network_1_1_neural_network.html">machine_learning::neural_network::NeuralNetwork</a>({</div>
<div class="line"><span class="lineno"> 809</span> {4, <span class="stringliteral">&quot;none&quot;</span>}, <span class="comment">// First layer with 3 neurons and &quot;none&quot; as activation</span></div>
<div class="line"><span class="lineno"> 810</span> {6,</div>
<div class="line"><span class="lineno"> 811</span> <span class="stringliteral">&quot;relu&quot;</span>}, <span class="comment">// Second layer with 6 neurons and &quot;relu&quot; as activation</span></div>
<div class="line"><span class="lineno"> 812</span> {3, <span class="stringliteral">&quot;sigmoid&quot;</span>} <span class="comment">// Third layer with 3 neurons and &quot;sigmoid&quot; as</span></div>
<div class="line"><span class="lineno"> 813</span> <span class="comment">// activation</span></div>
<div class="line"><span class="lineno"> 814</span> });</div>
<div class="line"><span class="lineno"> 815</span> <span class="comment">// Printing summary of model</span></div>
<div class="line"><span class="lineno"> 816</span> myNN.<a class="code hl_function" href="../../d4/df4/classmachine__learning_1_1neural__network_1_1_neural_network.html#a61d30113d13304c664057118b92a5931">summary</a>();</div>
<div class="line"><span class="lineno"> 817</span> <span class="comment">// Training Model</span></div>
<div class="line"><span class="lineno"> 818</span> myNN.<a class="code hl_function" href="../../d4/df4/classmachine__learning_1_1neural__network_1_1_neural_network.html#a5172a6791b9bd24f4232bab8d6b81fff">fit_from_csv</a>(<span class="stringliteral">&quot;iris.csv&quot;</span>, <span class="keyword">true</span>, 100, 0.3, <span class="keyword">false</span>, 2, 32, <span class="keyword">true</span>);</div>
<div class="line"><span class="lineno"> 819</span> <span class="comment">// Testing predictions of model</span></div>
<div class="line"><span class="lineno"> 820</span> assert(<a class="code hl_function" href="../../d8/d77/namespacemachine__learning.html#a50480fccfb39de20ca47f1bf51ecb6ec">machine_learning::argmax</a>(</div>
<div class="line"><span class="lineno"> 821</span> myNN.<a class="code hl_function" href="../../d4/df4/classmachine__learning_1_1neural__network_1_1_neural_network.html#a3b9eac1824d365dce715fb17c33cb96f">single_predict</a>({{5, 3.4, 1.6, 0.4}})) == 0);</div>
<div class="line"><span class="lineno"> 822</span> assert(<a class="code hl_function" href="../../d8/d77/namespacemachine__learning.html#a50480fccfb39de20ca47f1bf51ecb6ec">machine_learning::argmax</a>(</div>
<div class="line"><span class="lineno"> 823</span> myNN.<a class="code hl_function" href="../../d4/df4/classmachine__learning_1_1neural__network_1_1_neural_network.html#a3b9eac1824d365dce715fb17c33cb96f">single_predict</a>({{6.4, 2.9, 4.3, 1.3}})) == 1);</div>
<div class="line"><span class="lineno"> 824</span> assert(<a class="code hl_function" href="../../d8/d77/namespacemachine__learning.html#a50480fccfb39de20ca47f1bf51ecb6ec">machine_learning::argmax</a>(</div>
<div class="line"><span class="lineno"> 825</span> myNN.<a class="code hl_function" href="../../d4/df4/classmachine__learning_1_1neural__network_1_1_neural_network.html#a3b9eac1824d365dce715fb17c33cb96f">single_predict</a>({{6.2, 3.4, 5.4, 2.3}})) == 2);</div>
<div class="line"><span class="lineno"> 826</span> <span class="keywordflow">return</span>;</div>
<div class="line"><span class="lineno"> 827</span>}</div>
<div class="ttc" id="aclassmachine__learning_1_1neural__network_1_1_neural_network_html"><div class="ttname"><a href="../../d4/df4/classmachine__learning_1_1neural__network_1_1_neural_network.html">machine_learning::neural_network::NeuralNetwork</a></div><div class="ttdef"><b>Definition</b> <a href="../../d2/d58/neural__network_8cpp_source.html#l00247">neural_network.cpp:247</a></div></div>
<div class="ttc" id="aclassmachine__learning_1_1neural__network_1_1_neural_network_html_a3b9eac1824d365dce715fb17c33cb96f"><div class="ttname"><a href="../../d4/df4/classmachine__learning_1_1neural__network_1_1_neural_network.html#a3b9eac1824d365dce715fb17c33cb96f">machine_learning::neural_network::NeuralNetwork::single_predict</a></div><div class="ttdeci">std::vector&lt; std::valarray&lt; double &gt; &gt; single_predict(const std::vector&lt; std::valarray&lt; double &gt; &gt; &amp;X)</div><div class="ttdef"><b>Definition</b> <a href="../../d2/d58/neural__network_8cpp_source.html#l00451">neural_network.cpp:451</a></div></div>
<div class="ttc" id="aclassmachine__learning_1_1neural__network_1_1_neural_network_html_a5172a6791b9bd24f4232bab8d6b81fff"><div class="ttname"><a href="../../d4/df4/classmachine__learning_1_1neural__network_1_1_neural_network.html#a5172a6791b9bd24f4232bab8d6b81fff">machine_learning::neural_network::NeuralNetwork::fit_from_csv</a></div><div class="ttdeci">void fit_from_csv(const std::string &amp;file_name, const bool &amp;last_label, const int &amp;epochs, const double &amp;learning_rate, const bool &amp;normalize, const int &amp;slip_lines=1, const size_t &amp;batch_size=32, const bool &amp;shuffle=true)</div><div class="ttdef"><b>Definition</b> <a href="../../d2/d58/neural__network_8cpp_source.html#l00587">neural_network.cpp:587</a></div></div>
<div class="ttc" id="aclassmachine__learning_1_1neural__network_1_1_neural_network_html_a61d30113d13304c664057118b92a5931"><div class="ttname"><a href="../../d4/df4/classmachine__learning_1_1neural__network_1_1_neural_network.html#a61d30113d13304c664057118b92a5931">machine_learning::neural_network::NeuralNetwork::summary</a></div><div class="ttdeci">void summary()</div><div class="ttdef"><b>Definition</b> <a href="../../d2/d58/neural__network_8cpp_source.html#l00773">neural_network.cpp:773</a></div></div>
<div class="ttc" id="anamespacemachine__learning_html_a50480fccfb39de20ca47f1bf51ecb6ec"><div class="ttname"><a href="../../d8/d77/namespacemachine__learning.html#a50480fccfb39de20ca47f1bf51ecb6ec">machine_learning::argmax</a></div><div class="ttdeci">size_t argmax(const std::vector&lt; std::valarray&lt; T &gt; &gt; &amp;A)</div><div class="ttdef"><b>Definition</b> <a href="../../d8/d95/vector__ops_8hpp_source.html#l00307">vector_ops.hpp:307</a></div></div>
</div><!-- fragment -->
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="../../dir_3343723ae086de42ee4ca9774da3a13f.html">machine_learning</a></li><li class="navelem"><a class="el" href="../../d2/d58/neural__network_8cpp.html">neural_network.cpp</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.2 </li>
</ul>
</div>
</body>
</html>