From 26b3a6a4a6c984e16eb256153ef37c8d022002ae Mon Sep 17 00:00:00 2001 From: mhjensen Date: Wed, 18 Sep 2019 22:11:35 +0200 Subject: [PATCH] Updating slides --- doc/pub/LogReg/html/._LogReg-bs000.html | 8 +- doc/pub/LogReg/html/._LogReg-bs001.html | 6 +- doc/pub/LogReg/html/._LogReg-bs002.html | 6 +- doc/pub/LogReg/html/._LogReg-bs003.html | 12 +- doc/pub/LogReg/html/._LogReg-bs004.html | 6 +- doc/pub/LogReg/html/._LogReg-bs005.html | 18 +- doc/pub/LogReg/html/._LogReg-bs006.html | 80 +- doc/pub/LogReg/html/._LogReg-bs007.html | 5 +- doc/pub/LogReg/html/._LogReg-bs008.html | 5 +- doc/pub/LogReg/html/._LogReg-bs009.html | 5 +- doc/pub/LogReg/html/._LogReg-bs010.html | 5 +- doc/pub/LogReg/html/._LogReg-bs011.html | 5 +- doc/pub/LogReg/html/._LogReg-bs012.html | 5 +- doc/pub/LogReg/html/._LogReg-bs013.html | 5 +- doc/pub/LogReg/html/._LogReg-bs014.html | 5 +- doc/pub/LogReg/html/._LogReg-bs015.html | 7 +- doc/pub/LogReg/html/._LogReg-bs016.html | 87 +- doc/pub/LogReg/html/LogReg-bs.html | 8 +- doc/pub/LogReg/html/LogReg-reveal.html | 100 +- doc/pub/LogReg/html/LogReg-solarized.html | 100 +- doc/pub/LogReg/html/LogReg.html | 100 +- doc/pub/LogReg/ipynb/LogReg.ipynb | 115 +- doc/pub/LogReg/ipynb/ipynb-LogReg-src.tar.gz | Bin 210 -> 210 bytes doc/pub/LogReg/pdf/LogReg-minted.pdf | Bin 224245 -> 224492 bytes doc/pub/NeuralNet/html/._NeuralNet-bs000.html | 5 +- doc/pub/NeuralNet/html/._NeuralNet-bs001.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs002.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs003.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs004.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs005.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs006.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs007.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs008.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs009.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs010.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs011.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs012.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs013.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs014.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs015.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs016.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs017.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs018.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs019.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs020.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs021.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs022.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs023.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs024.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs025.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs026.html | 3 +- doc/pub/NeuralNet/html/._NeuralNet-bs027.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs028.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs029.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs030.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs031.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs032.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs033.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs034.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs035.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs036.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs037.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs038.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs039.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs040.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs041.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs042.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs043.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs044.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs045.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs046.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs047.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs048.html | 20 +- doc/pub/NeuralNet/html/._NeuralNet-bs049.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs050.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs051.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs052.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs053.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs054.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs055.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs056.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs057.html | 26 +- doc/pub/NeuralNet/html/._NeuralNet-bs058.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs059.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs060.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs061.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs062.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs063.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs064.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs065.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs066.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs067.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs068.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs069.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs070.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs071.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs072.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs073.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs074.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs075.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs076.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs077.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs078.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs079.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs080.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs081.html | 32 +- doc/pub/NeuralNet/html/._NeuralNet-bs082.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs083.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs084.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs085.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs086.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs087.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs088.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs089.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs090.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs091.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs092.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs093.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs094.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs095.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs096.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs097.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs098.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs099.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs100.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs101.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs102.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs103.html | 1 + doc/pub/NeuralNet/html/._NeuralNet-bs104.html | 1 + doc/pub/NeuralNet/html/NeuralNet-bs.html | 5 +- doc/pub/NeuralNet/html/NeuralNet-reveal.html | 83 +- .../NeuralNet/html/NeuralNet-solarized.html | 82 +- doc/pub/NeuralNet/html/NeuralNet.html | 82 +- doc/pub/NeuralNet/html/reveal.js/.gitignore | 7 +- doc/pub/NeuralNet/html/reveal.js/.travis.yml | 6 +- doc/pub/NeuralNet/html/reveal.js/LICENSE | 2 +- doc/pub/NeuralNet/html/reveal.js/README.md | 592 +++---- doc/pub/NeuralNet/html/reveal.js/bower.json | 6 +- .../html/reveal.js/css/print/paper.css | 7 +- .../html/reveal.js/css/print/pdf.css | 97 +- .../NeuralNet/html/reveal.js/css/reveal.scss | 588 ++----- .../html/reveal.js/css/theme/README.md | 6 +- .../reveal.js/css/theme/source/black.scss | 4 +- .../reveal.js/css/theme/source/white.scss | 4 +- doc/pub/NeuralNet/html/reveal.js/index.html | 390 ++++- doc/pub/NeuralNet/html/reveal.js/js/reveal.js | 1419 ++++------------- .../html/reveal.js/lib/css/zenburn.css | 119 +- .../html/reveal.js/lib/js/head.min.js | 17 +- doc/pub/NeuralNet/html/reveal.js/package.json | 42 +- .../reveal.js/plugin/highlight/highlight.js | 55 +- .../reveal.js/plugin/markdown/example.html | 7 - .../html/reveal.js/plugin/markdown/example.md | 5 - .../reveal.js/plugin/markdown/markdown.js | 57 +- .../html/reveal.js/plugin/markdown/marked.js | 2 +- .../html/reveal.js/plugin/math/math.js | 7 +- .../html/reveal.js/plugin/multiplex/client.js | 2 +- .../html/reveal.js/plugin/multiplex/index.js | 38 +- .../html/reveal.js/plugin/multiplex/master.js | 61 +- .../reveal.js/plugin/notes-server/client.js | 7 +- .../reveal.js/plugin/notes-server/index.js | 31 +- .../reveal.js/plugin/notes-server/notes.html | 241 +-- .../html/reveal.js/plugin/notes/notes.html | 417 +---- .../html/reveal.js/plugin/notes/notes.js | 45 +- .../reveal.js/plugin/print-pdf/print-pdf.js | 75 +- .../html/reveal.js/plugin/search/search.js | 72 +- .../html/reveal.js/plugin/zoom-js/zoom.js | 40 +- .../html/reveal.js/test/examples/math.html | 2 +- .../test/examples/slide-backgrounds.html | 2 +- .../html/reveal.js/test/test-markdown.html | 2 +- .../NeuralNet/html/reveal.js/test/test.html | 3 +- doc/pub/NeuralNet/html/reveal.js/test/test.js | 10 +- doc/pub/NeuralNet/ipynb/NeuralNet.ipynb | 697 +++----- .../ipynb/ipynb-NeuralNet-src.tar.gz | Bin 88051 -> 88051 bytes doc/pub/NeuralNet/pdf/NeuralNet-minted.pdf | Bin 626150 -> 539810 bytes doc/src/LogisticRegression/LogReg.do.txt | 92 +- doc/src/NeuralNet/test.py~ | 335 ---- 176 files changed, 2460 insertions(+), 4282 deletions(-) delete mode 100644 doc/src/NeuralNet/test.py~ diff --git a/doc/pub/LogReg/html/._LogReg-bs000.html b/doc/pub/LogReg/html/._LogReg-bs000.html index 893f7e0c6..f34204f18 100644 --- a/doc/pub/LogReg/html/._LogReg-bs000.html +++ b/doc/pub/LogReg/html/._LogReg-bs000.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -142,7 +144,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Sep 16, 2019

    +

    Sep 18, 2019


    @@ -159,7 +161,7 @@ MathJax.Hub.Config({

  • 9
  • 10
  • ...
  • -
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs001.html b/doc/pub/LogReg/html/._LogReg-bs001.html index f23dc78c2..c05eb5ea9 100644 --- a/doc/pub/LogReg/html/._LogReg-bs001.html +++ b/doc/pub/LogReg/html/._LogReg-bs001.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -176,7 +178,7 @@ failure etc.
  • 10
  • 11
  • ...
  • -
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs002.html b/doc/pub/LogReg/html/._LogReg-bs002.html index e468c1a6d..840803a49 100644 --- a/doc/pub/LogReg/html/._LogReg-bs002.html +++ b/doc/pub/LogReg/html/._LogReg-bs002.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -154,7 +156,7 @@ models, as we will see later.
  • 11
  • 12
  • ...
  • -
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs003.html b/doc/pub/LogReg/html/._LogReg-bs003.html index e2d495a52..7ad920f8b 100644 --- a/doc/pub/LogReg/html/._LogReg-bs003.html +++ b/doc/pub/LogReg/html/._LogReg-bs003.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -138,7 +140,11 @@ primary goal is to identify the classes to which new unseen samples belong.

    -Let us specialize to the case of two classes only, with outputs \( y_i=0 \) and \( y_i=1 \). Our outcomes could represent the status of a credit card user who could default or not on her/his credit card debt. That is +Let us specialize to the case of two classes only, with outputs +\( y_i=0 \) and \( y_i=1 \). Our outcomes could represent the status of a +credit card user that could default or not on her/his credit card +debt. That is + $$ y_i = \begin{bmatrix} 0 & \mathrm{no}\\ 1 & \mathrm{yes} \end{bmatrix}. $$ @@ -162,7 +168,7 @@ $$

  • 12
  • 13
  • ...
  • -
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs004.html b/doc/pub/LogReg/html/._LogReg-bs004.html index 4b0292fa7..c372ae939 100644 --- a/doc/pub/LogReg/html/._LogReg-bs004.html +++ b/doc/pub/LogReg/html/._LogReg-bs004.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -161,7 +163,7 @@ where \( \hat{y} \) is a vector representing the possible outcomes, \( \hat{X} \
  • 13
  • 14
  • ...
  • -
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs005.html b/doc/pub/LogReg/html/._LogReg-bs005.html index 694bd95ab..4b4948a3f 100644 --- a/doc/pub/LogReg/html/._LogReg-bs005.html +++ b/doc/pub/LogReg/html/._LogReg-bs005.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -129,10 +131,7 @@ MathJax.Hub.Config({ The main problem with our function is that it takes values on the entire real axis. In the case of logistic regression, however, the labels \( y_i \) are discrete -variables. - -

    -The table shows an example where we have a followed a group of students during a whole semester, with the aim to see if there are correlations between the number of hours they study and the number of hours they sleep. The output \( y_i \) is labelled as either \( 0 \) (a a grade below average) and \( 1 \), the latter corresponding to a grade above average. +variables. A typical example is the credit card data discussed below here, where we can set the state of defaulting the debt to \( y_i=1 \) and not to \( y_i=0 \) for one the persons in the data set (see the full example below).

    One simple way to get a discrete output is to have sign @@ -143,13 +142,6 @@ literature. This model is extremely simple. However, in many cases it is more favorable to use a ``soft" classifier that outputs the probability of a given category. This leads us to the logistic function. -

    -The code for plotting the perceptron can be seen here. This si nothing but the standard Heaviside step function. -

    - - -

    
    -

    @@ -171,7 +163,7 @@ The code for plotting the perceptron can be seen here. This si nothing but the s

  • 14
  • 15
  • ...
  • -
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs006.html b/doc/pub/LogReg/html/._LogReg-bs006.html index 7ec6b80f2..657d08d63 100644 --- a/doc/pub/LogReg/html/._LogReg-bs006.html +++ b/doc/pub/LogReg/html/._LogReg-bs006.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -141,11 +143,81 @@ p(t) = \frac{1}{1+\mathrm \exp{-t}}=\frac{\exp{t}}{1+\mathrm \exp{t}}. $$ Note that \( 1-p(t)= p(-t) \). -The following code plots the logistic function. +The following code plots the logistic function, the step function and other functions we will encounter from here and on. +

    -

    
    +
    """The sigmoid function (or the logistic curve) is a
    +function that takes any real number, z, and outputs a number (0,1).
    +It is useful in neural networks for assigning weights on a relative scale.
    +The value z is the weighted sum of parameters involved in the learning algorithm."""
    +
    +import numpy
    +import matplotlib.pyplot as plt
    +import math as mt
    +
    +z = numpy.arange(-5, 5, .1)
    +sigma_fn = numpy.vectorize(lambda z: 1/(1+numpy.exp(-z)))
    +sigma = sigma_fn(z)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, sigma)
    +ax.set_ylim([-0.1, 1.1])
    +ax.set_xlim([-5,5])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('sigmoid function')
    +
    +plt.show()
    +
    +"""Step Function"""
    +z = numpy.arange(-5, 5, .02)
    +step_fn = numpy.vectorize(lambda z: 1.0 if z >= 0.0 else 0.0)
    +step = step_fn(z)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, step)
    +ax.set_ylim([-0.5, 1.5])
    +ax.set_xlim([-5,5])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('step function')
    +
    +plt.show()
    +
    +"""Sine Function"""
    +z = numpy.arange(-2*mt.pi, 2*mt.pi, 0.1)
    +t = numpy.sin(z)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, t)
    +ax.set_ylim([-1.0, 1.0])
    +ax.set_xlim([-2*mt.pi,2*mt.pi])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('sine function')
    +
    +plt.show()
    +"""Plots a graph of the squashing function used by a rectified linear
    +unit"""
    +z = numpy.arange(-2, 2, .1)
    +zero = numpy.zeros(len(z))
    +y = numpy.max([zero, z], axis=0)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, y)
    +ax.set_ylim([-2.0, 2.0])
    +ax.set_xlim([-2.0, 2.0])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('Rectified linear unit')
    +
    +plt.show()
     

    @@ -168,6 +240,8 @@ The following code plots the logistic function.

  • 14
  • 15
  • 16
  • +
  • ...
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs007.html b/doc/pub/LogReg/html/._LogReg-bs007.html index 35f605577..3e9d8aa5e 100644 --- a/doc/pub/LogReg/html/._LogReg-bs007.html +++ b/doc/pub/LogReg/html/._LogReg-bs007.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -163,6 +165,7 @@ $$
  • 14
  • 15
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs008.html b/doc/pub/LogReg/html/._LogReg-bs008.html index 62f4afddc..edf49abce 100644 --- a/doc/pub/LogReg/html/._LogReg-bs008.html +++ b/doc/pub/LogReg/html/._LogReg-bs008.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -164,6 +166,7 @@ $$
  • 14
  • 15
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs009.html b/doc/pub/LogReg/html/._LogReg-bs009.html index af1c8886f..d84c6e902 100644 --- a/doc/pub/LogReg/html/._LogReg-bs009.html +++ b/doc/pub/LogReg/html/._LogReg-bs009.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -162,6 +164,7 @@ in practice we often supplement the cross-entropy with additional regularization
  • 14
  • 15
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs010.html b/doc/pub/LogReg/html/._LogReg-bs010.html index f22f85bb5..e6b64d96f 100644 --- a/doc/pub/LogReg/html/._LogReg-bs010.html +++ b/doc/pub/LogReg/html/._LogReg-bs010.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -163,6 +165,7 @@ $$
  • 14
  • 15
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs011.html b/doc/pub/LogReg/html/._LogReg-bs011.html index c597e5e18..5849f6046 100644 --- a/doc/pub/LogReg/html/._LogReg-bs011.html +++ b/doc/pub/LogReg/html/._LogReg-bs011.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -163,6 +165,7 @@ $$
  • 14
  • 15
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs012.html b/doc/pub/LogReg/html/._LogReg-bs012.html index fa36cbbe8..ee466cb80 100644 --- a/doc/pub/LogReg/html/._LogReg-bs012.html +++ b/doc/pub/LogReg/html/._LogReg-bs012.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -155,6 +157,7 @@ $$
  • 14
  • 15
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs013.html b/doc/pub/LogReg/html/._LogReg-bs013.html index ceaac8a45..fdcfdddd3 100644 --- a/doc/pub/LogReg/html/._LogReg-bs013.html +++ b/doc/pub/LogReg/html/._LogReg-bs013.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -166,6 +168,7 @@ and the model is specified in term of \( K-1 \) so-called log-odds or
  • 14
  • 15
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs014.html b/doc/pub/LogReg/html/._LogReg-bs014.html index 3d41d9272..0336adf6a 100644 --- a/doc/pub/LogReg/html/._LogReg-bs014.html +++ b/doc/pub/LogReg/html/._LogReg-bs014.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -177,6 +179,7 @@ methods.
  • 14
  • 15
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/._LogReg-bs015.html b/doc/pub/LogReg/html/._LogReg-bs015.html index c4732d14a..b73820234 100644 --- a/doc/pub/LogReg/html/._LogReg-bs015.html +++ b/doc/pub/LogReg/html/._LogReg-bs015.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -178,7 +180,6 @@ MathJax.Hub.Config({ main()

    -

    diff --git a/doc/pub/LogReg/html/._LogReg-bs016.html b/doc/pub/LogReg/html/._LogReg-bs016.html index 289c14c61..da6c50b43 100644 --- a/doc/pub/LogReg/html/._LogReg-bs016.html +++ b/doc/pub/LogReg/html/._LogReg-bs016.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Logistic Regression @@ -54,18 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A _scikit-learn_ example', 2, None, '___sec14'), - ('A simple classification problem', 2, None, '___sec15'), - ('The two-dimensional Ising model, Predicting phase transition ' - 'of the two-dimensional Ising model', - 2, - None, - '___sec16'), - ('Reading in the data', 2, None, '___sec17'), - ('Logistic regression', 2, None, '___sec18'), - ('Exploring the logistic regression', 2, None, '___sec19'), - ('Accuracy of a classification model', 2, None, '___sec20'), - ('Analyzing the results', 2, None, '___sec21')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -117,14 +108,8 @@ MathJax.Hub.Config({
  • Extending to more predictors
  • Including more classes
  • The Softmax function
  • -
  • A scikit-learn example
  • -
  • A simple classification problem
  • -
  • The two-dimensional Ising model, Predicting phase transition of the two-dimensional Ising model
  • -
  • Reading in the data
  • -
  • Logistic regression
  • -
  • Exploring the logistic regression
  • -
  • Accuracy of a classification model
  • -
  • Analyzing the results
  • +
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -140,61 +125,8 @@ MathJax.Hub.Config({ -

    A simple classification problem

    -

    +

    The Credit Card example

    - -
    import numpy as np
    -from sklearn import datasets, linear_model
    -import matplotlib.pyplot as plt
    -
    -
    -def generate_data():
    -    np.random.seed(0)
    -    X, y = datasets.make_moons(200, noise=0.20)
    -    return X, y
    -
    -
    -def visualize(X, y, clf):
    -    # plt.scatter(X[:, 0], X[:, 1], s=40, c=y, cmap=plt.cm.Spectral)
    -    # plt.show()
    -    plot_decision_boundary(lambda x: clf.predict(x), X, y)
    -    plt.title("Logistic Regression")
    -
    -
    -def plot_decision_boundary(pred_func, X, y):
    -    # Set min and max values and give it some padding
    -    x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
    -    y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
    -    h = 0.01
    -    # Generate a grid of points with distance h between them
    -    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    -    # Predict the function value for the whole gid
    -    Z = pred_func(np.c_[xx.ravel(), yy.ravel()])
    -    Z = Z.reshape(xx.shape)
    -    # Plot the contour and training examples
    -    plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral)
    -    plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral)
    -    plt.show()
    -
    -
    -def classify(X, y):
    -    clf = linear_model.LogisticRegressionCV()
    -    clf.fit(X, y)
    -    return clf
    -
    -
    -def main():
    -    X, y = generate_data()
    -    # visualize(X, y)
    -    clf = classify(X, y)
    -    visualize(X, y, clf)
    -
    -
    -if __name__ == "__main__":
    -    main()
    -
    -

    diff --git a/doc/pub/LogReg/html/LogReg-bs.html b/doc/pub/LogReg/html/LogReg-bs.html index 893f7e0c6..f34204f18 100644 --- a/doc/pub/LogReg/html/LogReg-bs.html +++ b/doc/pub/LogReg/html/LogReg-bs.html @@ -55,7 +55,8 @@ Automatically generated HTML file from DocOnce source ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -108,6 +109,7 @@ MathJax.Hub.Config({
  • Including more classes
  • The Softmax function
  • A simple classification problem
  • +
  • The Credit Card example
  • @@ -142,7 +144,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Sep 16, 2019

    +

    Sep 18, 2019


    @@ -159,7 +161,7 @@ MathJax.Hub.Config({

  • 9
  • 10
  • ...
  • -
  • 16
  • +
  • 17
  • »
  • diff --git a/doc/pub/LogReg/html/LogReg-reveal.html b/doc/pub/LogReg/html/LogReg-reveal.html index e08e16e67..c37caa86a 100644 --- a/doc/pub/LogReg/html/LogReg-reveal.html +++ b/doc/pub/LogReg/html/LogReg-reveal.html @@ -148,7 +148,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

     
    -

    Sep 16, 2019

    +

    Sep 18, 2019


    @@ -226,7 +226,11 @@ primary goal is to identify the classes to which new unseen samples belong.

    -Let us specialize to the case of two classes only, with outputs \( y_i=0 \) and \( y_i=1 \). Our outcomes could represent the status of a credit card user who could default or not on her/his credit card debt. That is +Let us specialize to the case of two classes only, with outputs +\( y_i=0 \) and \( y_i=1 \). Our outcomes could represent the status of a +credit card user that could default or not on her/his credit card +debt. That is +

     
    $$ y_i = \begin{bmatrix} 0 & \mathrm{no}\\ 1 & \mathrm{yes} \end{bmatrix}. @@ -265,10 +269,7 @@ where \( \hat{y} \) is a vector representing the possible outcomes, \( \hat{X} \ The main problem with our function is that it takes values on the entire real axis. In the case of logistic regression, however, the labels \( y_i \) are discrete -variables. - -

    -The table shows an example where we have a followed a group of students during a whole semester, with the aim to see if there are correlations between the number of hours they study and the number of hours they sleep. The output \( y_i \) is labelled as either \( 0 \) (a a grade below average) and \( 1 \), the latter corresponding to a grade above average. +variables. A typical example is the credit card data discussed below here, where we can set the state of defaulting the debt to \( y_i=1 \) and not to \( y_i=0 \) for one the persons in the data set (see the full example below).

    One simple way to get a discrete output is to have sign @@ -278,14 +279,6 @@ We will encounter this model in our first demonstration of neural networks. Hist literature. This model is extremely simple. However, in many cases it is more favorable to use a ``soft" classifier that outputs the probability of a given category. This leads us to the logistic function. - -

    -The code for plotting the perceptron can be seen here. This si nothing but the standard Heaviside step function. -

    - - -

    
    -
    @@ -310,11 +303,81 @@ $$

     
    Note that \( 1-p(t)= p(-t) \). -The following code plots the logistic function. +The following code plots the logistic function, the step function and other functions we will encounter from here and on. +

    -

    
    +
    """The sigmoid function (or the logistic curve) is a
    +function that takes any real number, z, and outputs a number (0,1).
    +It is useful in neural networks for assigning weights on a relative scale.
    +The value z is the weighted sum of parameters involved in the learning algorithm."""
    +
    +import numpy
    +import matplotlib.pyplot as plt
    +import math as mt
    +
    +z = numpy.arange(-5, 5, .1)
    +sigma_fn = numpy.vectorize(lambda z: 1/(1+numpy.exp(-z)))
    +sigma = sigma_fn(z)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, sigma)
    +ax.set_ylim([-0.1, 1.1])
    +ax.set_xlim([-5,5])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('sigmoid function')
    +
    +plt.show()
    +
    +"""Step Function"""
    +z = numpy.arange(-5, 5, .02)
    +step_fn = numpy.vectorize(lambda z: 1.0 if z >= 0.0 else 0.0)
    +step = step_fn(z)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, step)
    +ax.set_ylim([-0.5, 1.5])
    +ax.set_xlim([-5,5])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('step function')
    +
    +plt.show()
    +
    +"""Sine Function"""
    +z = numpy.arange(-2*mt.pi, 2*mt.pi, 0.1)
    +t = numpy.sin(z)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, t)
    +ax.set_ylim([-1.0, 1.0])
    +ax.set_xlim([-2*mt.pi,2*mt.pi])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('sine function')
    +
    +plt.show()
    +"""Plots a graph of the squashing function used by a rectified linear
    +unit"""
    +z = numpy.arange(-2, 2, .1)
    +zero = numpy.zeros(len(z))
    +y = numpy.max([zero, z], axis=0)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, y)
    +ax.set_ylim([-2.0, 2.0])
    +ax.set_xlim([-2.0, 2.0])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('Rectified linear unit')
    +
    +plt.show()
     
    @@ -606,6 +669,11 @@ methods. +
    +

    The Credit Card example

    +
    + +
    diff --git a/doc/pub/LogReg/html/LogReg-solarized.html b/doc/pub/LogReg/html/LogReg-solarized.html index 10c862c1a..4d1e3b263 100644 --- a/doc/pub/LogReg/html/LogReg-solarized.html +++ b/doc/pub/LogReg/html/LogReg-solarized.html @@ -49,7 +49,8 @@ div { text-align: justify; text-justify: inter-word; } ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -91,7 +92,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Sep 16, 2019

    +

    Sep 18, 2019


    @@ -163,7 +164,11 @@ primary goal is to identify the classes to which new unseen samples belong.

    -Let us specialize to the case of two classes only, with outputs \( y_i=0 \) and \( y_i=1 \). Our outcomes could represent the status of a credit card user who could default or not on her/his credit card debt. That is +Let us specialize to the case of two classes only, with outputs +\( y_i=0 \) and \( y_i=1 \). Our outcomes could represent the status of a +credit card user that could default or not on her/his credit card +debt. That is + $$ y_i = \begin{bmatrix} 0 & \mathrm{no}\\ 1 & \mathrm{yes} \end{bmatrix}. $$ @@ -198,10 +203,7 @@ where \( \hat{y} \) is a vector representing the possible outcomes, \( \hat{X} \ The main problem with our function is that it takes values on the entire real axis. In the case of logistic regression, however, the labels \( y_i \) are discrete -variables. - -

    -The table shows an example where we have a followed a group of students during a whole semester, with the aim to see if there are correlations between the number of hours they study and the number of hours they sleep. The output \( y_i \) is labelled as either \( 0 \) (a a grade below average) and \( 1 \), the latter corresponding to a grade above average. +variables. A typical example is the credit card data discussed below here, where we can set the state of defaulting the debt to \( y_i=1 \) and not to \( y_i=0 \) for one the persons in the data set (see the full example below).

    One simple way to get a discrete output is to have sign @@ -212,13 +214,6 @@ literature. This model is extremely simple. However, in many cases it is more favorable to use a ``soft" classifier that outputs the probability of a given category. This leads us to the logistic function. -

    -The code for plotting the perceptron can be seen here. This si nothing but the standard Heaviside step function. -

    - - -

    
    -











    @@ -240,11 +235,81 @@ p(t) = \frac{1}{1+\mathrm \exp{-t}}=\frac{\exp{t}}{1+\mathrm \exp{t}}. $$ Note that \( 1-p(t)= p(-t) \). -The following code plots the logistic function. +The following code plots the logistic function, the step function and other functions we will encounter from here and on. +

    -

    
    +
    """The sigmoid function (or the logistic curve) is a
    +function that takes any real number, z, and outputs a number (0,1).
    +It is useful in neural networks for assigning weights on a relative scale.
    +The value z is the weighted sum of parameters involved in the learning algorithm."""
    +
    +import numpy
    +import matplotlib.pyplot as plt
    +import math as mt
    +
    +z = numpy.arange(-5, 5, .1)
    +sigma_fn = numpy.vectorize(lambda z: 1/(1+numpy.exp(-z)))
    +sigma = sigma_fn(z)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, sigma)
    +ax.set_ylim([-0.1, 1.1])
    +ax.set_xlim([-5,5])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('sigmoid function')
    +
    +plt.show()
    +
    +"""Step Function"""
    +z = numpy.arange(-5, 5, .02)
    +step_fn = numpy.vectorize(lambda z: 1.0 if z >= 0.0 else 0.0)
    +step = step_fn(z)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, step)
    +ax.set_ylim([-0.5, 1.5])
    +ax.set_xlim([-5,5])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('step function')
    +
    +plt.show()
    +
    +"""Sine Function"""
    +z = numpy.arange(-2*mt.pi, 2*mt.pi, 0.1)
    +t = numpy.sin(z)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, t)
    +ax.set_ylim([-1.0, 1.0])
    +ax.set_xlim([-2*mt.pi,2*mt.pi])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('sine function')
    +
    +plt.show()
    +"""Plots a graph of the squashing function used by a rectified linear
    +unit"""
    +z = numpy.arange(-2, 2, .1)
    +zero = numpy.zeros(len(z))
    +y = numpy.max([zero, z], axis=0)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, y)
    +ax.set_ylim([-2.0, 2.0])
    +ax.set_xlim([-2.0, 2.0])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('Rectified linear unit')
    +
    +plt.show()
     











    @@ -499,6 +564,9 @@ methods. main()

    +









    + +

    The Credit Card example

    diff --git a/doc/pub/LogReg/html/LogReg.html b/doc/pub/LogReg/html/LogReg.html index a9f4c031e..89b4d6d0d 100644 --- a/doc/pub/LogReg/html/LogReg.html +++ b/doc/pub/LogReg/html/LogReg.html @@ -54,7 +54,8 @@ div { text-align: justify; text-justify: inter-word; } ('Extending to more predictors', 2, None, '___sec11'), ('Including more classes', 2, None, '___sec12'), ('The Softmax function', 2, None, '___sec13'), - ('A simple classification problem', 2, None, '___sec14')]} + ('A simple classification problem', 2, None, '___sec14'), + ('The Credit Card example', 2, None, '___sec15')]} end of tocinfo --> @@ -96,7 +97,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Sep 16, 2019

    +

    Sep 18, 2019


    @@ -168,7 +169,11 @@ primary goal is to identify the classes to which new unseen samples belong.

    -Let us specialize to the case of two classes only, with outputs \( y_i=0 \) and \( y_i=1 \). Our outcomes could represent the status of a credit card user who could default or not on her/his credit card debt. That is +Let us specialize to the case of two classes only, with outputs +\( y_i=0 \) and \( y_i=1 \). Our outcomes could represent the status of a +credit card user that could default or not on her/his credit card +debt. That is + $$ y_i = \begin{bmatrix} 0 & \mathrm{no}\\ 1 & \mathrm{yes} \end{bmatrix}. $$ @@ -203,10 +208,7 @@ where \( \hat{y} \) is a vector representing the possible outcomes, \( \hat{X} \ The main problem with our function is that it takes values on the entire real axis. In the case of logistic regression, however, the labels \( y_i \) are discrete -variables. - -

    -The table shows an example where we have a followed a group of students during a whole semester, with the aim to see if there are correlations between the number of hours they study and the number of hours they sleep. The output \( y_i \) is labelled as either \( 0 \) (a a grade below average) and \( 1 \), the latter corresponding to a grade above average. +variables. A typical example is the credit card data discussed below here, where we can set the state of defaulting the debt to \( y_i=1 \) and not to \( y_i=0 \) for one the persons in the data set (see the full example below).

    One simple way to get a discrete output is to have sign @@ -217,13 +219,6 @@ literature. This model is extremely simple. However, in many cases it is more favorable to use a ``soft" classifier that outputs the probability of a given category. This leads us to the logistic function. -

    -The code for plotting the perceptron can be seen here. This si nothing but the standard Heaviside step function. -

    - - -

    
    -











    @@ -245,11 +240,81 @@ p(t) = \frac{1}{1+\mathrm \exp{-t}}=\frac{\exp{t}}{1+\mathrm \exp{t}}. $$ Note that \( 1-p(t)= p(-t) \). -The following code plots the logistic function. +The following code plots the logistic function, the step function and other functions we will encounter from here and on. +

    -

    
    +
    """The sigmoid function (or the logistic curve) is a
    +function that takes any real number, z, and outputs a number (0,1).
    +It is useful in neural networks for assigning weights on a relative scale.
    +The value z is the weighted sum of parameters involved in the learning algorithm."""
    +
    +import numpy
    +import matplotlib.pyplot as plt
    +import math as mt
    +
    +z = numpy.arange(-5, 5, .1)
    +sigma_fn = numpy.vectorize(lambda z: 1/(1+numpy.exp(-z)))
    +sigma = sigma_fn(z)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, sigma)
    +ax.set_ylim([-0.1, 1.1])
    +ax.set_xlim([-5,5])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('sigmoid function')
    +
    +plt.show()
    +
    +"""Step Function"""
    +z = numpy.arange(-5, 5, .02)
    +step_fn = numpy.vectorize(lambda z: 1.0 if z >= 0.0 else 0.0)
    +step = step_fn(z)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, step)
    +ax.set_ylim([-0.5, 1.5])
    +ax.set_xlim([-5,5])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('step function')
    +
    +plt.show()
    +
    +"""Sine Function"""
    +z = numpy.arange(-2*mt.pi, 2*mt.pi, 0.1)
    +t = numpy.sin(z)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, t)
    +ax.set_ylim([-1.0, 1.0])
    +ax.set_xlim([-2*mt.pi,2*mt.pi])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('sine function')
    +
    +plt.show()
    +"""Plots a graph of the squashing function used by a rectified linear
    +unit"""
    +z = numpy.arange(-2, 2, .1)
    +zero = numpy.zeros(len(z))
    +y = numpy.max([zero, z], axis=0)
    +
    +fig = plt.figure()
    +ax = fig.add_subplot(111)
    +ax.plot(z, y)
    +ax.set_ylim([-2.0, 2.0])
    +ax.set_xlim([-2.0, 2.0])
    +ax.grid(True)
    +ax.set_xlabel('z')
    +ax.set_title('Rectified linear unit')
    +
    +plt.show()
     











    @@ -504,6 +569,9 @@ methods. main()

    +









    + +

    The Credit Card example

    diff --git a/doc/pub/LogReg/ipynb/LogReg.ipynb b/doc/pub/LogReg/ipynb/LogReg.ipynb index 986079ce9..f6d6e81d0 100644 --- a/doc/pub/LogReg/ipynb/LogReg.ipynb +++ b/doc/pub/LogReg/ipynb/LogReg.ipynb @@ -10,7 +10,7 @@ " \n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", "\n", - "Date: **Sep 16, 2019**\n", + "Date: **Sep 18, 2019**\n", "\n", "Copyright 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", "\n", @@ -74,7 +74,10 @@ "primary goal is to identify the classes to which new unseen samples\n", "belong.\n", "\n", - "Let us specialize to the case of two classes only, with outputs $y_i=0$ and $y_i=1$. Our outcomes could represent the status of a credit card user who could default or not on her/his credit card debt. That is" + "Let us specialize to the case of two classes only, with outputs\n", + "$y_i=0$ and $y_i=1$. Our outcomes could represent the status of a\n", + "credit card user that could default or not on her/his credit card\n", + "debt. That is" ] }, { @@ -125,10 +128,7 @@ "The main problem with our function is that it \n", "takes values on the entire real axis. In the case of\n", "logistic regression, however, the labels $y_i$ are discrete\n", - "variables. \n", - "\n", - "The table shows an example where we have a followed a group of students during a whole semester, with the aim to see if there are correlations between the number of hours they study and the number of hours they sleep. The output $y_i$ is labelled as either $0$ (a a grade below average) and $1$, the latter corresponding to a grade above average. \n", - "\n", + "variables. A typical example is the credit card data discussed below here, where we can set the state of defaulting the debt to $y_i=1$ and not to $y_i=0$ for one the persons in the data set (see the full example below).\n", "\n", "One simple way to get a discrete output is to have sign\n", "functions that map the output of a linear regressor to values $\\{0,1\\}$,\n", @@ -138,13 +138,7 @@ "favorable to use a ``soft\" classifier that outputs\n", "the probability of a given category. This leads us to the logistic function.\n", "\n", - "The code for plotting the perceptron can be seen here. This si nothing but the standard [Heaviside step function](https://en.wikipedia.org/wiki/Heaviside_step_function)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ + "\n", "## The logistic function\n", "\n", "The perceptron is an example of a ``hard classification\" model. We\n", @@ -173,7 +167,89 @@ "metadata": {}, "source": [ "Note that $1-p(t)= p(-t)$.\n", - "The following code plots the logistic function." + "The following code plots the logistic function, the step function and other functions we will encounter from here and on." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "\"\"\"The sigmoid function (or the logistic curve) is a\n", + "function that takes any real number, z, and outputs a number (0,1).\n", + "It is useful in neural networks for assigning weights on a relative scale.\n", + "The value z is the weighted sum of parameters involved in the learning algorithm.\"\"\"\n", + "\n", + "import numpy\n", + "import matplotlib.pyplot as plt\n", + "import math as mt\n", + "\n", + "z = numpy.arange(-5, 5, .1)\n", + "sigma_fn = numpy.vectorize(lambda z: 1/(1+numpy.exp(-z)))\n", + "sigma = sigma_fn(z)\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111)\n", + "ax.plot(z, sigma)\n", + "ax.set_ylim([-0.1, 1.1])\n", + "ax.set_xlim([-5,5])\n", + "ax.grid(True)\n", + "ax.set_xlabel('z')\n", + "ax.set_title('sigmoid function')\n", + "\n", + "plt.show()\n", + "\n", + "\"\"\"Step Function\"\"\"\n", + "z = numpy.arange(-5, 5, .02)\n", + "step_fn = numpy.vectorize(lambda z: 1.0 if z >= 0.0 else 0.0)\n", + "step = step_fn(z)\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111)\n", + "ax.plot(z, step)\n", + "ax.set_ylim([-0.5, 1.5])\n", + "ax.set_xlim([-5,5])\n", + "ax.grid(True)\n", + "ax.set_xlabel('z')\n", + "ax.set_title('step function')\n", + "\n", + "plt.show()\n", + "\n", + "\"\"\"Sine Function\"\"\"\n", + "z = numpy.arange(-2*mt.pi, 2*mt.pi, 0.1)\n", + "t = numpy.sin(z)\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111)\n", + "ax.plot(z, t)\n", + "ax.set_ylim([-1.0, 1.0])\n", + "ax.set_xlim([-2*mt.pi,2*mt.pi])\n", + "ax.grid(True)\n", + "ax.set_xlabel('z')\n", + "ax.set_title('sine function')\n", + "\n", + "plt.show()\n", + "\"\"\"Plots a graph of the squashing function used by a rectified linear\n", + "unit\"\"\"\n", + "z = numpy.arange(-2, 2, .1)\n", + "zero = numpy.zeros(len(z))\n", + "y = numpy.max([zero, z], axis=0)\n", + "\n", + "fig = plt.figure()\n", + "ax = fig.add_subplot(111)\n", + "ax.plot(z, y)\n", + "ax.set_ylim([-2.0, 2.0])\n", + "ax.set_xlim([-2.0, 2.0])\n", + "ax.grid(True)\n", + "ax.set_xlabel('z')\n", + "ax.set_title('Rectified linear unit')\n", + "\n", + "plt.show()" ] }, { @@ -537,14 +613,12 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "%matplotlib inline\n", - "\n", "import numpy as np\n", "from sklearn import datasets, linear_model\n", "import matplotlib.pyplot as plt\n", @@ -595,6 +669,13 @@ "if __name__ == \"__main__\":\n", " main()" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The Credit Card example" + ] } ], "metadata": {}, diff --git a/doc/pub/LogReg/ipynb/ipynb-LogReg-src.tar.gz b/doc/pub/LogReg/ipynb/ipynb-LogReg-src.tar.gz index 06b1868d28d67952194d7a68615deca5dfed731e..c050179314563698a579854c262d7bd7f12ab4ca 100644 GIT binary patch literal 210 zcmb2|=3vn2Z;EALetZ6W7L%dC@xt?VM{N#HDiyZn{u;1C;gWbq&K=)eVPB;k`SJf9 zs+b}J*W z^s3|IDfE;qjfHZXysWWV2Rv%c-paRo)O?VW|{ z`WvHnulw{{F=t7yUVPM~I}cw>7M5n)nESfB|KPs<@0w*N>z-u&xqhAj8605#$udc* KGnYYwfdK$J$7Ub^ literal 210 zcmb2|=3sdAsy>#1`R)0GSxklk#|qEe9kn?)$#nPYoeSEXSSRjtNO_zWHT#B&)AzT# zwYDs;64v}zKfOP(Eir9#P1KrcuK!L=o*n3A8mhW{j`>&1t8aqlPfgWby6$Vun^#$C ztFG)?slF(${L=d5Q)+$7zvN$2fBk=s^zpLY+SPjNPx${6UccA-(;m4Z`8_`-yften zujIUYtgO|Vr%pR}!^Q?kOBV_X^!)( JR~a-I7y#P_V#)vj diff --git a/doc/pub/LogReg/pdf/LogReg-minted.pdf b/doc/pub/LogReg/pdf/LogReg-minted.pdf index 804c0d9c7fe9a1f893560451493fe543e688effa..061076741739d576e607393fca7e720cd7e57faf 100644 GIT binary patch delta 78885 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

    Mk*e|1*Hn9!k$2eUAwm54NBJoBSGON4={NA%XK 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 Iq9ojZ03q>)#Q*>R diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs000.html b/doc/pub/NeuralNet/html/._NeuralNet-bs000.html index 0c296c5a0..cd4cca246 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs000.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs000.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks @@ -374,7 +375,7 @@ MathJax.Hub.Config({

    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Oct 19, 2018

    +

    Sep 18, 2019


    @@ -416,7 +417,7 @@ MathJax.Hub.Config({

    - © 1999-2018, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license + © 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs001.html b/doc/pub/NeuralNet/html/._NeuralNet-bs001.html index 3437f1a87..960ac2062 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs001.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs001.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs002.html b/doc/pub/NeuralNet/html/._NeuralNet-bs002.html index 5a7d876bf..d56670e32 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs002.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs002.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs003.html b/doc/pub/NeuralNet/html/._NeuralNet-bs003.html index 7433bc433..0cb9b5c5c 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs003.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs003.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs004.html b/doc/pub/NeuralNet/html/._NeuralNet-bs004.html index ebf6a3c7d..0de6da0a7 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs004.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs004.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs005.html b/doc/pub/NeuralNet/html/._NeuralNet-bs005.html index df80cc897..2e3d0264a 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs005.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs005.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs006.html b/doc/pub/NeuralNet/html/._NeuralNet-bs006.html index 1ea3e0bd1..d0da32e46 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs006.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs006.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs007.html b/doc/pub/NeuralNet/html/._NeuralNet-bs007.html index 9d8096052..b35c2a78b 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs007.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs007.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs008.html b/doc/pub/NeuralNet/html/._NeuralNet-bs008.html index 77faa1342..819546894 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs008.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs008.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs009.html b/doc/pub/NeuralNet/html/._NeuralNet-bs009.html index 508e66518..646f7017b 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs009.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs009.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs010.html b/doc/pub/NeuralNet/html/._NeuralNet-bs010.html index 8a4eda371..60f7590a7 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs010.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs010.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs011.html b/doc/pub/NeuralNet/html/._NeuralNet-bs011.html index be98b9ac7..6198666c3 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs011.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs011.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs012.html b/doc/pub/NeuralNet/html/._NeuralNet-bs012.html index 5732e72e9..bb2fccc7c 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs012.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs012.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs013.html b/doc/pub/NeuralNet/html/._NeuralNet-bs013.html index 5d37eacce..8c02901ff 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs013.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs013.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs014.html b/doc/pub/NeuralNet/html/._NeuralNet-bs014.html index d405b7739..bca27d454 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs014.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs014.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs015.html b/doc/pub/NeuralNet/html/._NeuralNet-bs015.html index 55ee3dbf0..a77a7e7ad 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs015.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs015.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs016.html b/doc/pub/NeuralNet/html/._NeuralNet-bs016.html index bc3f4581d..709546317 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs016.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs016.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs017.html b/doc/pub/NeuralNet/html/._NeuralNet-bs017.html index df8aceedb..a62a3d261 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs017.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs017.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs018.html b/doc/pub/NeuralNet/html/._NeuralNet-bs018.html index 46287989f..e0dbfb7f7 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs018.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs018.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs019.html b/doc/pub/NeuralNet/html/._NeuralNet-bs019.html index 189c0d256..9ec70eb01 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs019.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs019.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs020.html b/doc/pub/NeuralNet/html/._NeuralNet-bs020.html index 6bc393196..341255f5d 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs020.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs020.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs021.html b/doc/pub/NeuralNet/html/._NeuralNet-bs021.html index 659318202..f608b5c1b 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs021.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs021.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs022.html b/doc/pub/NeuralNet/html/._NeuralNet-bs022.html index d666679a6..c265e5f95 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs022.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs022.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs023.html b/doc/pub/NeuralNet/html/._NeuralNet-bs023.html index eea7ead41..3d603f845 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs023.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs023.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs024.html b/doc/pub/NeuralNet/html/._NeuralNet-bs024.html index b15b61ad6..dcfbe41ea 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs024.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs024.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs025.html b/doc/pub/NeuralNet/html/._NeuralNet-bs025.html index a8afb96d0..887f3a3b2 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs025.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs025.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs026.html b/doc/pub/NeuralNet/html/._NeuralNet-bs026.html index 08f610ded..085bdb252 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs026.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs026.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks @@ -371,7 +372,7 @@ $$ and using the Hadamard product of two vectors we can write this as $$ -\hat{\delta}^L = f'(\hat{z}^L)\circ\frac{\partial {\cal C}}{\partial (\hat{a}L)}. +\hat{\delta}^L = f'(\hat{z}^L)\circ\frac{\partial {\cal C}}{\partial (\hat{a}^L)}. $$

    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs027.html b/doc/pub/NeuralNet/html/._NeuralNet-bs027.html index 3d2cb8d3f..960bc40d5 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs027.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs027.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs028.html b/doc/pub/NeuralNet/html/._NeuralNet-bs028.html index 531157c51..615803cac 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs028.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs028.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs029.html b/doc/pub/NeuralNet/html/._NeuralNet-bs029.html index 52d2ecf9b..83351440b 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs029.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs029.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs030.html b/doc/pub/NeuralNet/html/._NeuralNet-bs030.html index 81f845bbb..3b3091423 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs030.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs030.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs031.html b/doc/pub/NeuralNet/html/._NeuralNet-bs031.html index 6cad37323..12100ebaf 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs031.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs031.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs032.html b/doc/pub/NeuralNet/html/._NeuralNet-bs032.html index bde55aac9..18ff4402b 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs032.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs032.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs033.html b/doc/pub/NeuralNet/html/._NeuralNet-bs033.html index 4b6741d79..099688291 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs033.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs033.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs034.html b/doc/pub/NeuralNet/html/._NeuralNet-bs034.html index fcdc8f7b8..f55858ae2 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs034.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs034.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs035.html b/doc/pub/NeuralNet/html/._NeuralNet-bs035.html index 2219f3dbd..b108344a5 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs035.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs035.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs036.html b/doc/pub/NeuralNet/html/._NeuralNet-bs036.html index 7972fa977..8c6088a45 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs036.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs036.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs037.html b/doc/pub/NeuralNet/html/._NeuralNet-bs037.html index 32aaefdca..d3c9992e5 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs037.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs037.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs038.html b/doc/pub/NeuralNet/html/._NeuralNet-bs038.html index 5be78f07d..e05ec4ae3 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs038.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs038.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs039.html b/doc/pub/NeuralNet/html/._NeuralNet-bs039.html index fbf7fde6d..765e83e84 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs039.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs039.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs040.html b/doc/pub/NeuralNet/html/._NeuralNet-bs040.html index 77566ed0f..4201a313d 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs040.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs040.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs041.html b/doc/pub/NeuralNet/html/._NeuralNet-bs041.html index dfec677f9..bda78a044 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs041.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs041.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs042.html b/doc/pub/NeuralNet/html/._NeuralNet-bs042.html index fbadb1c4b..528eece01 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs042.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs042.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs043.html b/doc/pub/NeuralNet/html/._NeuralNet-bs043.html index 29a5bcf7c..52b8bad03 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs043.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs043.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs044.html b/doc/pub/NeuralNet/html/._NeuralNet-bs044.html index 90fddebd1..33ef8fdf3 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs044.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs044.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs045.html b/doc/pub/NeuralNet/html/._NeuralNet-bs045.html index 5bd49f3e1..bba1f13e8 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs045.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs045.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs046.html b/doc/pub/NeuralNet/html/._NeuralNet-bs046.html index e4a73380a..f26bbe9c5 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs046.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs046.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs047.html b/doc/pub/NeuralNet/html/._NeuralNet-bs047.html index 613a5dc46..a043f7dc3 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs047.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs047.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs048.html b/doc/pub/NeuralNet/html/._NeuralNet-bs048.html index 79d59fd0b..a19219e49 100644 --- a/doc/pub/NeuralNet/html/._NeuralNet-bs048.html +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs048.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks @@ -366,17 +367,16 @@ being realizations of this object with different hyperparameters. An implementat

    class NeuralNetwork:
         def __init__(
    -        self,
    -        X_data,
    -        Y_data,
    -        n_hidden_neurons=50,
    -        n_categories=10,
    -        epochs=10,
    -        batch_size=100,
    -        eta=0.1,
    -        lmbd=0.0,
    +            self,
    +            X_data,
    +            Y_data,
    +            n_hidden_neurons=50,
    +            n_categories=10,
    +            epochs=10,
    +            batch_size=100,
    +            eta=0.1,
    +            lmbd=0.0):
     
    -    ):
             self.X_data_full = X_data
             self.Y_data_full = Y_data
     
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs049.html b/doc/pub/NeuralNet/html/._NeuralNet-bs049.html
    index f71738a7e..f0dfefaaf 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs049.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs049.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs050.html b/doc/pub/NeuralNet/html/._NeuralNet-bs050.html
    index df2fbff1d..8b2ff7147 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs050.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs050.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs051.html b/doc/pub/NeuralNet/html/._NeuralNet-bs051.html
    index 11f161b54..272cb5712 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs051.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs051.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs052.html b/doc/pub/NeuralNet/html/._NeuralNet-bs052.html
    index 02f6960cd..84e011c0f 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs052.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs052.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs053.html b/doc/pub/NeuralNet/html/._NeuralNet-bs053.html
    index d11d46492..f5562fb89 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs053.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs053.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs054.html b/doc/pub/NeuralNet/html/._NeuralNet-bs054.html
    index 36a58f392..e8664cde3 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs054.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs054.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs055.html b/doc/pub/NeuralNet/html/._NeuralNet-bs055.html
    index 7c91ede4e..72d1a9649 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs055.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs055.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs056.html b/doc/pub/NeuralNet/html/._NeuralNet-bs056.html
    index 3cb5d0094..ce5339572 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs056.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs056.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs057.html b/doc/pub/NeuralNet/html/._NeuralNet-bs057.html
    index 45127b18d..b7804cbe8 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs057.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs057.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    @@ -369,19 +370,18 @@ MathJax.Hub.Config({
     
     class NeuralNetworkTensorflow:
         def __init__(
    -        self,
    -        X_train,
    -        Y_train,
    -        X_test,
    -        Y_test,
    -        n_neurons_layer1=100,
    -        n_neurons_layer2=50,
    -        n_categories=2,
    -        epochs=10,
    -        batch_size=100,
    -        eta=0.1,
    -        lmbd=0.0,
    -    ):
    +            self,
    +            X_train,
    +            Y_train,
    +            X_test,
    +            Y_test,
    +            n_neurons_layer1=100,
    +            n_neurons_layer2=50,
    +            n_categories=2,
    +            epochs=10,
    +            batch_size=100,
    +            eta=0.1,
    +            lmbd=0.0):
             
             # keep track of number of steps
             self.global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name='global_step')
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs058.html b/doc/pub/NeuralNet/html/._NeuralNet-bs058.html
    index af0a7130a..0843f1bdc 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs058.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs058.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs059.html b/doc/pub/NeuralNet/html/._NeuralNet-bs059.html
    index 6b3da62f1..0fb319d24 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs059.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs059.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs060.html b/doc/pub/NeuralNet/html/._NeuralNet-bs060.html
    index 8eadb921c..57a6b77fb 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs060.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs060.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs061.html b/doc/pub/NeuralNet/html/._NeuralNet-bs061.html
    index 77bd15e0b..cbc2baebb 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs061.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs061.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs062.html b/doc/pub/NeuralNet/html/._NeuralNet-bs062.html
    index 01338cb55..5ea711bde 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs062.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs062.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs063.html b/doc/pub/NeuralNet/html/._NeuralNet-bs063.html
    index a53731217..af606f259 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs063.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs063.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs064.html b/doc/pub/NeuralNet/html/._NeuralNet-bs064.html
    index e81c30225..bc0361422 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs064.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs064.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs065.html b/doc/pub/NeuralNet/html/._NeuralNet-bs065.html
    index ee9e11a31..c92db07b2 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs065.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs065.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs066.html b/doc/pub/NeuralNet/html/._NeuralNet-bs066.html
    index 30575d9f4..26e51620a 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs066.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs066.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs067.html b/doc/pub/NeuralNet/html/._NeuralNet-bs067.html
    index 4ac465f8f..2aa758ab1 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs067.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs067.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs068.html b/doc/pub/NeuralNet/html/._NeuralNet-bs068.html
    index 3112352fd..d72bffd72 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs068.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs068.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs069.html b/doc/pub/NeuralNet/html/._NeuralNet-bs069.html
    index a097400f2..da788dd10 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs069.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs069.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs070.html b/doc/pub/NeuralNet/html/._NeuralNet-bs070.html
    index 8912ccbb0..f73821456 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs070.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs070.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs071.html b/doc/pub/NeuralNet/html/._NeuralNet-bs071.html
    index d3a258cb5..0c1e94a66 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs071.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs071.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs072.html b/doc/pub/NeuralNet/html/._NeuralNet-bs072.html
    index 0d69841c7..1a6ad0b7e 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs072.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs072.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs073.html b/doc/pub/NeuralNet/html/._NeuralNet-bs073.html
    index 10eab5a52..101b4991d 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs073.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs073.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs074.html b/doc/pub/NeuralNet/html/._NeuralNet-bs074.html
    index 3db00e542..a090b39e9 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs074.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs074.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs075.html b/doc/pub/NeuralNet/html/._NeuralNet-bs075.html
    index 5b41bdb34..3a9cb0fd9 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs075.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs075.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs076.html b/doc/pub/NeuralNet/html/._NeuralNet-bs076.html
    index a6bacf9a6..abe65d382 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs076.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs076.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs077.html b/doc/pub/NeuralNet/html/._NeuralNet-bs077.html
    index 09bebf34e..7298651d5 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs077.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs077.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs078.html b/doc/pub/NeuralNet/html/._NeuralNet-bs078.html
    index c13d902d5..fbeb37103 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs078.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs078.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs079.html b/doc/pub/NeuralNet/html/._NeuralNet-bs079.html
    index 2caa7d852..220ff8660 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs079.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs079.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs080.html b/doc/pub/NeuralNet/html/._NeuralNet-bs080.html
    index a0ed1ac3e..a7b126f2e 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs080.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs080.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs081.html b/doc/pub/NeuralNet/html/._NeuralNet-bs081.html
    index 790bf815a..acb6a74ed 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs081.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs081.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    @@ -366,22 +367,21 @@ We need to define model and architecture and choose cost function and optmizer.
     
     class ConvolutionalNeuralNetworkTensorflow:
         def __init__(
    -        self,
    -        X_train,
    -        Y_train,
    -        X_test,
    -        Y_test,
    -        n_filters=10,
    -        n_neurons_connected=50,
    -        n_categories=10,
    -        receptive_field=3,
    -        stride=1,
    -        padding=1,
    -        epochs=10,
    -        batch_size=100,
    -        eta=0.1,
    -        lmbd=0.0,
    -    ):
    +            self,
    +            X_train,
    +            Y_train,
    +            X_test,
    +            Y_test,
    +            n_filters=10,
    +            n_neurons_connected=50,
    +            n_categories=10,
    +            receptive_field=3,
    +            stride=1,
    +            padding=1,
    +            epochs=10,
    +            batch_size=100,
    +            eta=0.1,
    +            lmbd=0.0):
             
             self.global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name='global_step')
             
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs082.html b/doc/pub/NeuralNet/html/._NeuralNet-bs082.html
    index b2adef723..62fcbef5d 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs082.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs082.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs083.html b/doc/pub/NeuralNet/html/._NeuralNet-bs083.html
    index f848e5ade..0e8cfbef7 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs083.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs083.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs084.html b/doc/pub/NeuralNet/html/._NeuralNet-bs084.html
    index eea852e9c..dc7a5b9e8 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs084.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs084.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs085.html b/doc/pub/NeuralNet/html/._NeuralNet-bs085.html
    index 4b235b1f1..5e4a8787c 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs085.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs085.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs086.html b/doc/pub/NeuralNet/html/._NeuralNet-bs086.html
    index 422a5bffa..31bd9a9f4 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs086.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs086.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs087.html b/doc/pub/NeuralNet/html/._NeuralNet-bs087.html
    index a0b7e5007..fd4a8324f 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs087.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs087.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs088.html b/doc/pub/NeuralNet/html/._NeuralNet-bs088.html
    index 733e3b52e..2a50d08ab 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs088.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs088.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs089.html b/doc/pub/NeuralNet/html/._NeuralNet-bs089.html
    index f78f8ee6c..905a633d8 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs089.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs089.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs090.html b/doc/pub/NeuralNet/html/._NeuralNet-bs090.html
    index 9dfbca8d1..13746c2e2 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs090.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs090.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs091.html b/doc/pub/NeuralNet/html/._NeuralNet-bs091.html
    index 4216aec1e..10df77f5a 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs091.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs091.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs092.html b/doc/pub/NeuralNet/html/._NeuralNet-bs092.html
    index b499e91b6..26b3039aa 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs092.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs092.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs093.html b/doc/pub/NeuralNet/html/._NeuralNet-bs093.html
    index daa78f4be..bc2b2fc69 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs093.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs093.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs094.html b/doc/pub/NeuralNet/html/._NeuralNet-bs094.html
    index 2afa599f6..e4a339caa 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs094.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs094.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs095.html b/doc/pub/NeuralNet/html/._NeuralNet-bs095.html
    index d2f9e0e3c..a3272c00f 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs095.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs095.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs096.html b/doc/pub/NeuralNet/html/._NeuralNet-bs096.html
    index 4458d483f..b04f41ab9 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs096.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs096.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs097.html b/doc/pub/NeuralNet/html/._NeuralNet-bs097.html
    index e406304cc..237c7cadd 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs097.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs097.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs098.html b/doc/pub/NeuralNet/html/._NeuralNet-bs098.html
    index ef5e97c8e..fed41bee5 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs098.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs098.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs099.html b/doc/pub/NeuralNet/html/._NeuralNet-bs099.html
    index 69d592b71..09a8a658a 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs099.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs099.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs100.html b/doc/pub/NeuralNet/html/._NeuralNet-bs100.html
    index 676cf404a..791bad473 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs100.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs100.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs101.html b/doc/pub/NeuralNet/html/._NeuralNet-bs101.html
    index 9e8e49b8d..67fdfcc8d 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs101.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs101.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs102.html b/doc/pub/NeuralNet/html/._NeuralNet-bs102.html
    index 204ca01b7..ecde5f507 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs102.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs102.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs103.html b/doc/pub/NeuralNet/html/._NeuralNet-bs103.html
    index 82f95bb3f..c489c0def 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs103.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs103.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/._NeuralNet-bs104.html b/doc/pub/NeuralNet/html/._NeuralNet-bs104.html
    index b9dbd8af4..7f6d8214e 100644
    --- a/doc/pub/NeuralNet/html/._NeuralNet-bs104.html
    +++ b/doc/pub/NeuralNet/html/._NeuralNet-bs104.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    diff --git a/doc/pub/NeuralNet/html/NeuralNet-bs.html b/doc/pub/NeuralNet/html/NeuralNet-bs.html
    index 0c296c5a0..cd4cca246 100644
    --- a/doc/pub/NeuralNet/html/NeuralNet-bs.html
    +++ b/doc/pub/NeuralNet/html/NeuralNet-bs.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    @@ -374,7 +375,7 @@ MathJax.Hub.Config({
     
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Oct 19, 2018

    +

    Sep 18, 2019


    @@ -416,7 +417,7 @@ MathJax.Hub.Config({

    - © 1999-2018, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license + © 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license
    diff --git a/doc/pub/NeuralNet/html/NeuralNet-reveal.html b/doc/pub/NeuralNet/html/NeuralNet-reveal.html index 30803e519..ea9d4665a 100644 --- a/doc/pub/NeuralNet/html/NeuralNet-reveal.html +++ b/doc/pub/NeuralNet/html/NeuralNet-reveal.html @@ -1,8 +1,8 @@ -\ + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks @@ -148,12 +148,12 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

     
    -

    Oct 19, 2018

    +

    Sep 18, 2019


    - © 1999-2018, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license + © 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license
    @@ -972,7 +972,7 @@ $$ and using the Hadamard product of two vectors we can write this as

     
    $$ -\hat{\delta}^L = f'(\hat{z}^L)\circ\frac{\partial {\cal C}}{\partial (\hat{a}L)}. +\hat{\delta}^L = f'(\hat{z}^L)\circ\frac{\partial {\cal C}}{\partial (\hat{a}^L)}. $$

     
    @@ -2123,17 +2123,16 @@ being realizations of this object with different hyperparameters. An implementat

    class NeuralNetwork:
         def __init__(
    -        self,
    -        X_data,
    -        Y_data,
    -        n_hidden_neurons=50,
    -        n_categories=10,
    -        epochs=10,
    -        batch_size=100,
    -        eta=0.1,
    -        lmbd=0.0,
    +            self,
    +            X_data,
    +            Y_data,
    +            n_hidden_neurons=50,
    +            n_categories=10,
    +            epochs=10,
    +            batch_size=100,
    +            eta=0.1,
    +            lmbd=0.0):
     
    -    ):
             self.X_data_full = X_data
             self.Y_data_full = Y_data
     
    @@ -2565,19 +2564,18 @@ X_train, X_test, Y_train, Y_test = train_test_split(inputs, labels, train_size=t
     
     class NeuralNetworkTensorflow:
         def __init__(
    -        self,
    -        X_train,
    -        Y_train,
    -        X_test,
    -        Y_test,
    -        n_neurons_layer1=100,
    -        n_neurons_layer2=50,
    -        n_categories=2,
    -        epochs=10,
    -        batch_size=100,
    -        eta=0.1,
    -        lmbd=0.0,
    -    ):
    +            self,
    +            X_train,
    +            Y_train,
    +            X_test,
    +            Y_test,
    +            n_neurons_layer1=100,
    +            n_neurons_layer2=50,
    +            n_categories=2,
    +            epochs=10,
    +            batch_size=100,
    +            eta=0.1,
    +            lmbd=0.0):
             
             # keep track of number of steps
             self.global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name='global_step')
    @@ -3436,22 +3434,21 @@ We need to define model and architecture and choose cost function and optmizer.
     
     class ConvolutionalNeuralNetworkTensorflow:
         def __init__(
    -        self,
    -        X_train,
    -        Y_train,
    -        X_test,
    -        Y_test,
    -        n_filters=10,
    -        n_neurons_connected=50,
    -        n_categories=10,
    -        receptive_field=3,
    -        stride=1,
    -        padding=1,
    -        epochs=10,
    -        batch_size=100,
    -        eta=0.1,
    -        lmbd=0.0,
    -    ):
    +            self,
    +            X_train,
    +            Y_train,
    +            X_test,
    +            Y_test,
    +            n_filters=10,
    +            n_neurons_connected=50,
    +            n_categories=10,
    +            receptive_field=3,
    +            stride=1,
    +            padding=1,
    +            epochs=10,
    +            batch_size=100,
    +            eta=0.1,
    +            lmbd=0.0):
             
             self.global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name='global_step')
             
    diff --git a/doc/pub/NeuralNet/html/NeuralNet-solarized.html b/doc/pub/NeuralNet/html/NeuralNet-solarized.html
    index 95c8c283e..f0a37cebb 100644
    --- a/doc/pub/NeuralNet/html/NeuralNet-solarized.html
    +++ b/doc/pub/NeuralNet/html/NeuralNet-solarized.html
    @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source
     
     
     
    +
     
     
     Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks
    @@ -260,7 +261,7 @@ MathJax.Hub.Config({
     
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Oct 19, 2018

    +

    Sep 18, 2019












    @@ -1014,7 +1015,7 @@ $$ and using the Hadamard product of two vectors we can write this as $$ -\hat{\delta}^L = f'(\hat{z}^L)\circ\frac{\partial {\cal C}}{\partial (\hat{a}L)}. +\hat{\delta}^L = f'(\hat{z}^L)\circ\frac{\partial {\cal C}}{\partial (\hat{a}^L)}. $$

    @@ -2035,17 +2036,16 @@ being realizations of this object with different hyperparameters. An implementat

    class NeuralNetwork:
         def __init__(
    -        self,
    -        X_data,
    -        Y_data,
    -        n_hidden_neurons=50,
    -        n_categories=10,
    -        epochs=10,
    -        batch_size=100,
    -        eta=0.1,
    -        lmbd=0.0,
    +            self,
    +            X_data,
    +            Y_data,
    +            n_hidden_neurons=50,
    +            n_categories=10,
    +            epochs=10,
    +            batch_size=100,
    +            eta=0.1,
    +            lmbd=0.0):
     
    -    ):
             self.X_data_full = X_data
             self.Y_data_full = Y_data
     
    @@ -2468,19 +2468,18 @@ X_train, X_test, Y_train, Y_test = train_test_split(inputs, labels, train_size=t
     
     class NeuralNetworkTensorflow:
         def __init__(
    -        self,
    -        X_train,
    -        Y_train,
    -        X_test,
    -        Y_test,
    -        n_neurons_layer1=100,
    -        n_neurons_layer2=50,
    -        n_categories=2,
    -        epochs=10,
    -        batch_size=100,
    -        eta=0.1,
    -        lmbd=0.0,
    -    ):
    +            self,
    +            X_train,
    +            Y_train,
    +            X_test,
    +            Y_test,
    +            n_neurons_layer1=100,
    +            n_neurons_layer2=50,
    +            n_categories=2,
    +            epochs=10,
    +            batch_size=100,
    +            eta=0.1,
    +            lmbd=0.0):
             
             # keep track of number of steps
             self.global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name='global_step')
    @@ -3325,22 +3324,21 @@ We need to define model and architecture and choose cost function and optmizer.
     
     class ConvolutionalNeuralNetworkTensorflow:
         def __init__(
    -        self,
    -        X_train,
    -        Y_train,
    -        X_test,
    -        Y_test,
    -        n_filters=10,
    -        n_neurons_connected=50,
    -        n_categories=10,
    -        receptive_field=3,
    -        stride=1,
    -        padding=1,
    -        epochs=10,
    -        batch_size=100,
    -        eta=0.1,
    -        lmbd=0.0,
    -    ):
    +            self,
    +            X_train,
    +            Y_train,
    +            X_test,
    +            Y_test,
    +            n_filters=10,
    +            n_neurons_connected=50,
    +            n_categories=10,
    +            receptive_field=3,
    +            stride=1,
    +            padding=1,
    +            epochs=10,
    +            batch_size=100,
    +            eta=0.1,
    +            lmbd=0.0):
             
             self.global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name='global_step')
             
    @@ -4301,7 +4299,7 @@ the solution minimizes the cost function.
     
     
     
    - © 1999-2018, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license + © 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license
    diff --git a/doc/pub/NeuralNet/html/NeuralNet.html b/doc/pub/NeuralNet/html/NeuralNet.html index 37461c5ce..fc7153615 100644 --- a/doc/pub/NeuralNet/html/NeuralNet.html +++ b/doc/pub/NeuralNet/html/NeuralNet.html @@ -6,6 +6,7 @@ Automatically generated HTML file from DocOnce source + Data Analysis and Machine Learning: Neural networks, from the simple perceptron to deep learning and convolutional networks @@ -265,7 +266,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Oct 19, 2018

    +

    Sep 18, 2019












    @@ -1019,7 +1020,7 @@ $$ and using the Hadamard product of two vectors we can write this as $$ -\hat{\delta}^L = f'(\hat{z}^L)\circ\frac{\partial {\cal C}}{\partial (\hat{a}L)}. +\hat{\delta}^L = f'(\hat{z}^L)\circ\frac{\partial {\cal C}}{\partial (\hat{a}^L)}. $$

    @@ -2040,17 +2041,16 @@ being realizations of this object with different hyperparameters. An implementat

    class NeuralNetwork:
         def __init__(
    -        self,
    -        X_data,
    -        Y_data,
    -        n_hidden_neurons=50,
    -        n_categories=10,
    -        epochs=10,
    -        batch_size=100,
    -        eta=0.1,
    -        lmbd=0.0,
    +            self,
    +            X_data,
    +            Y_data,
    +            n_hidden_neurons=50,
    +            n_categories=10,
    +            epochs=10,
    +            batch_size=100,
    +            eta=0.1,
    +            lmbd=0.0):
     
    -    ):
             self.X_data_full = X_data
             self.Y_data_full = Y_data
     
    @@ -2473,19 +2473,18 @@ X_train, X_test, Y_train, Y_test = train_tes
     
     class NeuralNetworkTensorflow:
         def __init__(
    -        self,
    -        X_train,
    -        Y_train,
    -        X_test,
    -        Y_test,
    -        n_neurons_layer1=100,
    -        n_neurons_layer2=50,
    -        n_categories=2,
    -        epochs=10,
    -        batch_size=100,
    -        eta=0.1,
    -        lmbd=0.0,
    -    ):
    +            self,
    +            X_train,
    +            Y_train,
    +            X_test,
    +            Y_test,
    +            n_neurons_layer1=100,
    +            n_neurons_layer2=50,
    +            n_categories=2,
    +            epochs=10,
    +            batch_size=100,
    +            eta=0.1,
    +            lmbd=0.0):
             
             # keep track of number of steps
             self.global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name='global_step')
    @@ -3330,22 +3329,21 @@ We need to define model and architecture and choose cost function and optmizer.
     
     class ConvolutionalNeuralNetworkTensorflow:
         def __init__(
    -        self,
    -        X_train,
    -        Y_train,
    -        X_test,
    -        Y_test,
    -        n_filters=10,
    -        n_neurons_connected=50,
    -        n_categories=10,
    -        receptive_field=3,
    -        stride=1,
    -        padding=1,
    -        epochs=10,
    -        batch_size=100,
    -        eta=0.1,
    -        lmbd=0.0,
    -    ):
    +            self,
    +            X_train,
    +            Y_train,
    +            X_test,
    +            Y_test,
    +            n_filters=10,
    +            n_neurons_connected=50,
    +            n_categories=10,
    +            receptive_field=3,
    +            stride=1,
    +            padding=1,
    +            epochs=10,
    +            batch_size=100,
    +            eta=0.1,
    +            lmbd=0.0):
             
             self.global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name='global_step')
             
    @@ -4306,7 +4304,7 @@ the solution minimizes the cost function.
     
     
     
    - © 1999-2018, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license + © 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license
    diff --git a/doc/pub/NeuralNet/html/reveal.js/.gitignore b/doc/pub/NeuralNet/html/reveal.js/.gitignore index e7b4f216a..a5df3133d 100644 --- a/doc/pub/NeuralNet/html/reveal.js/.gitignore +++ b/doc/pub/NeuralNet/html/reveal.js/.gitignore @@ -1,8 +1,3 @@ -.idea/ -*.iml -*.iws -*.eml -out/ .DS_Store .svn log/*.log @@ -10,4 +5,4 @@ tmp/** node_modules/ .sass-cache css/reveal.min.css -js/reveal.min.js \ No newline at end of file +js/reveal.min.js diff --git a/doc/pub/NeuralNet/html/reveal.js/.travis.yml b/doc/pub/NeuralNet/html/reveal.js/.travis.yml index ec3b27d5d..165d9ae9f 100644 --- a/doc/pub/NeuralNet/html/reveal.js/.travis.yml +++ b/doc/pub/NeuralNet/html/reveal.js/.travis.yml @@ -1,7 +1,5 @@ language: node_js node_js: - - 4 + - 0.10 before_script: - - npm install -g grunt-cli -after_script: - - grunt retire + - npm install -g grunt-cli \ No newline at end of file diff --git a/doc/pub/NeuralNet/html/reveal.js/LICENSE b/doc/pub/NeuralNet/html/reveal.js/LICENSE index c3e6e5fd6..09623076f 100644 --- a/doc/pub/NeuralNet/html/reveal.js/LICENSE +++ b/doc/pub/NeuralNet/html/reveal.js/LICENSE @@ -1,4 +1,4 @@ -Copyright (C) 2017 Hakim El Hattab, http://hakim.se, and reveal.js contributors +Copyright (C) 2015 Hakim El Hattab, http://hakim.se Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/doc/pub/NeuralNet/html/reveal.js/README.md b/doc/pub/NeuralNet/html/reveal.js/README.md index f2ab6ca88..573b19597 100644 --- a/doc/pub/NeuralNet/html/reveal.js/README.md +++ b/doc/pub/NeuralNet/html/reveal.js/README.md @@ -1,58 +1,12 @@ -# reveal.js [![Build Status](https://travis-ci.org/hakimel/reveal.js.svg?branch=master)](https://travis-ci.org/hakimel/reveal.js) Slides +# reveal.js [![Build Status](https://travis-ci.org/hakimel/reveal.js.svg?branch=master)](https://travis-ci.org/hakimel/reveal.js) -A framework for easily creating beautiful presentations using HTML. [Check out the live demo](http://revealjs.com/). +A framework for easily creating beautiful presentations using HTML. [Check out the live demo](http://lab.hakim.se/reveal-js/). -reveal.js comes with a broad range of features including [nested slides](https://github.com/hakimel/reveal.js#markup), [Markdown contents](https://github.com/hakimel/reveal.js#markdown), [PDF export](https://github.com/hakimel/reveal.js#pdf-export), [speaker notes](https://github.com/hakimel/reveal.js#speaker-notes) and a [JavaScript API](https://github.com/hakimel/reveal.js#api). There's also a fully featured visual editor and platform for sharing reveal.js presentations at [slides.com](https://slides.com?ref=github). +reveal.js comes with a broad range of features including [nested slides](https://github.com/hakimel/reveal.js#markup), [Markdown contents](https://github.com/hakimel/reveal.js#markdown), [PDF export](https://github.com/hakimel/reveal.js#pdf-export), [speaker notes](https://github.com/hakimel/reveal.js#speaker-notes) and a [JavaScript API](https://github.com/hakimel/reveal.js#api). It's best viewed in a modern browser but [fallbacks](https://github.com/hakimel/reveal.js/wiki/Browser-Support) are available to make sure your presentation can still be viewed elsewhere. -## Table of contents -- [Online Editor](#online-editor) -- [Instructions](#instructions) - - [Markup](#markup) - - [Markdown](#markdown) - - [Element Attributes](#element-attributes) - - [Slide Attributes](#slide-attributes) -- [Configuration](#configuration) -- [Presentation Size](#presentation-size) -- [Dependencies](#dependencies) -- [Ready Event](#ready-event) -- [Auto-sliding](#auto-sliding) -- [Keyboard Bindings](#keyboard-bindings) -- [Touch Navigation](#touch-navigation) -- [Lazy Loading](#lazy-loading) -- [API](#api) - - [Slide Changed Event](#slide-changed-event) - - [Presentation State](#presentation-state) - - [Slide States](#slide-states) - - [Slide Backgrounds](#slide-backgrounds) - - [Parallax Background](#parallax-background) - - [Slide Transitions](#slide-transitions) - - [Internal links](#internal-links) - - [Fragments](#fragments) - - [Fragment events](#fragment-events) - - [Code syntax highlighting](#code-syntax-highlighting) - - [Slide number](#slide-number) - - [Overview mode](#overview-mode) - - [Fullscreen mode](#fullscreen-mode) - - [Embedded media](#embedded-media) - - [Stretching elements](#stretching-elements) - - [postMessage API](#postmessage-api) -- [PDF Export](#pdf-export) -- [Theming](#theming) -- [Speaker Notes](#speaker-notes) - - [Share and Print Speaker Notes](#share-and-print-speaker-notes) - - [Server Side Speaker Notes](#server-side-speaker-notes) -- [Multiplexing](#multiplexing) - - [Master presentation](#master-presentation) - - [Client presentation](#client-presentation) - - [Socket.io server](#socketio-server) -- [MathJax](#mathjax) -- [Installation](#installation) - - [Basic setup](#basic-setup) - - [Full setup](#full-setup) - - [Folder Structure](#folder-structure) -- [License](#license) -#### More reading +#### More reading: +- [Installation](#installation): Step-by-step instructions for getting reveal.js running on your computer. - [Changelog](https://github.com/hakimel/reveal.js/releases): Up-to-date version history. - [Examples](https://github.com/hakimel/reveal.js/wiki/Example-Presentations): Presentations created with reveal.js, add your own! - [Browser Support](https://github.com/hakimel/reveal.js/wiki/Browser-Support): Explanation of browser support and fallbacks. @@ -60,36 +14,14 @@ reveal.js comes with a broad range of features including [nested slides](https:/ ## Online Editor -Presentations are written using HTML or Markdown but there's also an online editor for those of you who prefer a graphical interface. Give it a try at [https://slides.com](https://slides.com?ref=github). +Presentations are written using HTML or Markdown but there's also an online editor for those of you who prefer a graphical interface. Give it a try at [http://slides.com](http://slides.com). ## Instructions ### Markup -Here's a barebones example of a fully working reveal.js presentation: -```html - - - - - - -
    -
    -
    Slide 1
    -
    Slide 2
    -
    -
    - - - - -``` - -The presentation markup hierarchy needs to be `.reveal > .slides > section` where the `section` represents one slide and can be repeated indefinitely. If you place multiple `section` elements inside of another `section` they will be shown as vertical slides. The first of the vertical slides is the "root" of the others (at the top), and will be included in the horizontal sequence. For example: +Markup hierarchy needs to be ``
    `` where the ``
    `` represents one slide and can be repeated indefinitely. If you place multiple ``
    ``'s inside of another ``
    `` they will be shown as vertical slides. The first of the vertical slides is the "root" of the others (at the top), and it will be included in the horizontal sequence. For example: ```html
    @@ -105,36 +37,32 @@ The presentation markup hierarchy needs to be `.reveal > .slides > section` wher ### Markdown -It's possible to write your slides using Markdown. To enable Markdown, add the `data-markdown` attribute to your `
    ` elements and wrap the contents in a ` +
    ``` #### External Markdown -You can write your content as a separate file and have reveal.js load it at runtime. Note the separator arguments which determine how slides are delimited in the external file: the `data-separator` attribute defines a regular expression for horizontal slides (defaults to `^\r?\n---\r?\n$`, a newline-bounded horizontal rule) and `data-separator-vertical` defines vertical slides (disabled by default). The `data-separator-notes` attribute is a regular expression for specifying the beginning of the current slide's speaker notes (defaults to `note:`). The `data-charset` attribute is optional and specifies which charset to use when loading the external file. +You can write your content as a separate file and have reveal.js load it at runtime. Note the separator arguments which determine how slides are delimited in the external file. The ```data-charset``` attribute is optional and specifies which charset to use when loading the external file. -When used locally, this feature requires that reveal.js [runs from a local web server](#full-setup). The following example customises all available options: +When used locally, this feature requires that reveal.js [runs from a local web server](#full-setup). ```html -
    -
    ``` @@ -164,19 +92,6 @@ Special syntax (in html comment) is available for adding attributes to the slide
    ``` -#### Configuring *marked* - -We use [marked](https://github.com/chjj/marked) to parse Markdown. To customise marked's rendering, you can pass in options when [configuring Reveal](#configuration): - -```javascript -Reveal.initialize({ - // Options which are passed into marked - // See https://github.com/chjj/marked#options-1 - markdown: { - smartypants: true - } -}); -``` ### Configuration @@ -185,26 +100,12 @@ At the end of your page you need to initialize reveal by running the following c ```javascript Reveal.initialize({ - // Display presentation control arrows + // Display controls in the bottom right corner controls: true, - // Help the user learn the controls by providing hints, for example by - // bouncing the down arrow when they first encounter a vertical slide - controlsTutorial: true, - - // Determines where controls appear, "edges" or "bottom-right" - controlsLayout: 'bottom-right', - - // Visibility rule for backwards navigation arrows; "faded", "hidden" - // or "visible" - controlsBackArrows: 'faded', - // Display a presentation progress bar progress: true, - // Set default timing of 2 minutes per slide - defaultTiming: 120, - // Display the page number of the current slide slideNumber: false, @@ -229,9 +130,6 @@ Reveal.initialize({ // Change the presentation direction to be RTL rtl: false, - // Randomizes the order of slides each time the presentation loads - shuffle: false, - // Turns fragments on and off globally fragments: true, @@ -243,15 +141,6 @@ Reveal.initialize({ // key is pressed help: true, - // Flags if speaker notes should be visible to all viewers - showNotes: false, - - // Global override for autoplaying embedded media (video/audio/iframe) - // - null: Media will only autoplay if data-autoplay is present - // - true: All media will autoplay, regardless of individual setting - // - false: No media will autoplay, regardless of individual setting - autoPlayMedia: null, - // Number of milliseconds between automatically proceeding to the // next slide, disabled when set to 0, this value can be overwritten // by using a data-autoslide attribute on your slides @@ -260,9 +149,6 @@ Reveal.initialize({ // Stop auto-sliding after user input autoSlideStoppable: true, - // Use this method for navigation when auto-sliding - autoSlideMethod: Reveal.navigateNext, - // Enable slide navigation via mouse wheel mouseWheel: false, @@ -270,18 +156,16 @@ Reveal.initialize({ hideAddressBar: true, // Opens links in an iframe preview overlay - // Add `data-preview-link` and `data-preview-link="false"` to customise each link - // individually previewLinks: false, // Transition style - transition: 'slide', // none/fade/slide/convex/concave/zoom + transition: 'default', // none/fade/slide/convex/concave/zoom // Transition speed transitionSpeed: 'default', // default/fast/slow // Transition style for full page slide backgrounds - backgroundTransition: 'fade', // none/fade/slide/convex/concave/zoom + backgroundTransition: 'default', // none/fade/slide/convex/concave/zoom // Number of slides away from the current that are visible viewDistance: 3, @@ -292,14 +176,10 @@ Reveal.initialize({ // Parallax background size parallaxBackgroundSize: '', // CSS syntax, e.g. "2100px 900px" - // Number of pixels to move the parallax background per slide - // - Calculated automatically unless specified - // - Set to 0 to disable movement along an axis - parallaxBackgroundHorizontal: null, - parallaxBackgroundVertical: null, - - // The display mode that will be used to show slides - display: 'block' + // Amount to move parallax background (horizontal and vertical) on slide change + // Number, e.g. 100 + parallaxBackgroundHorizontal: '', + parallaxBackgroundVertical: '' }); ``` @@ -316,6 +196,56 @@ Reveal.configure({ autoSlide: 5000 }); ``` +### Dependencies + +Reveal.js doesn't _rely_ on any third party scripts to work but a few optional libraries are included by default. These libraries are loaded as dependencies in the order they appear, for example: + +```javascript +Reveal.initialize({ + dependencies: [ + // Cross-browser shim that fully implements classList - https://github.com/eligrey/classList.js/ + { src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } }, + + // Interpret Markdown in
    elements + { src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, + { src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, + + // Syntax highlight for elements + { src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }, + + // Zoom in and out with Alt+click + { src: 'plugin/zoom-js/zoom.js', async: true }, + + // Speaker notes + { src: 'plugin/notes/notes.js', async: true }, + + // Remote control your reveal.js presentation using a touch device + { src: 'plugin/remotes/remotes.js', async: true }, + + // MathJax + { src: 'plugin/math/math.js', async: true } + ] +}); +``` + +You can add your own extensions using the same syntax. The following properties are available for each dependency object: +- **src**: Path to the script to load +- **async**: [optional] Flags if the script should load after reveal.js has started, defaults to false +- **callback**: [optional] Function to execute when the script has loaded +- **condition**: [optional] Function which must return true for the script to be loaded + + +### Ready Event + +A 'ready' event is fired when reveal.js has loaded all non-async dependencies and is ready to start navigating. To check if reveal.js is already 'ready' you can call `Reveal.isReady()`. + +```javascript +Reveal.addEventListener( 'ready', function( event ) { + // event.currentSlide, event.indexh, event.indexv +} ); +``` + + ### Presentation Size All presentations have a normal size, that is the resolution at which they are authored. The framework will automatically scale presentations uniformly based on this size to ensure that everything fits on any given display or viewport. @@ -343,69 +273,6 @@ Reveal.initialize({ }); ``` -If you wish to disable this behavior and do your own scaling (e.g. using media queries), try these settings: - -```javascript -Reveal.initialize({ - - ... - - width: "100%", - height: "100%", - margin: 0, - minScale: 1, - maxScale: 1 -}); -``` - -### Dependencies - -Reveal.js doesn't _rely_ on any third party scripts to work but a few optional libraries are included by default. These libraries are loaded as dependencies in the order they appear, for example: - -```javascript -Reveal.initialize({ - dependencies: [ - // Cross-browser shim that fully implements classList - https://github.com/eligrey/classList.js/ - { src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } }, - - // Interpret Markdown in
    elements - { src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, - { src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } }, - - // Syntax highlight for elements - { src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }, - - // Zoom in and out with Alt+click - { src: 'plugin/zoom-js/zoom.js', async: true }, - - // Speaker notes - { src: 'plugin/notes/notes.js', async: true }, - - // MathJax - { src: 'plugin/math/math.js', async: true } - ] -}); -``` - -You can add your own extensions using the same syntax. The following properties are available for each dependency object: -- **src**: Path to the script to load -- **async**: [optional] Flags if the script should load after reveal.js has started, defaults to false -- **callback**: [optional] Function to execute when the script has loaded -- **condition**: [optional] Function which must return true for the script to be loaded - -To load these dependencies, reveal.js requires [head.js](http://headjs.com/) *(a script loading library)* to be loaded before reveal.js. - -### Ready Event - -A 'ready' event is fired when reveal.js has loaded all non-async dependencies and is ready to start navigating. To check if reveal.js is already 'ready' you can call `Reveal.isReady()`. - -```javascript -Reveal.addEventListener( 'ready', function( event ) { - // event.currentSlide, event.indexh, event.indexv -} ); -``` - -Note that we also add a `.ready` class to the `.reveal` element so that you can hook into this with CSS. ### Auto-sliding @@ -429,8 +296,6 @@ You can also override the slide duration for individual slides and fragments by
    ``` -To override the method used for navigation when auto-sliding, you can specify the ```autoSlideMethod``` setting. To only navigate along the top layer and ignore vertical slides, set this to ```Reveal.navigateRight```. - Whenever the auto-slide mode is resumed or paused the ```autoslideresumed``` and ```autoslidepaused``` events are fired. @@ -448,13 +313,6 @@ Reveal.configure({ }); ``` -### Touch Navigation - -You can swipe to navigate through a presentation on any touch-enabled device. Horizontal swipes change between horizontal slides, vertical swipes change between vertical slides. If you wish to disable this you can set the `touch` config option to false when initializing reveal.js. - -If there's some part of your content that needs to remain accessible to touch events you'll need to highlight this by adding a `data-prevent-swipe` attribute to the element. One common example where this is useful is elements that need to be scrolled. - - ### Lazy Loading When working on presentation with a lot of media or iframe content it's important to load lazily. Lazy loading means that reveal.js will only load content for the few slides nearest to the current slide. The number of slides that are preloaded is determined by the `viewDistance` configuration option. @@ -489,18 +347,11 @@ Reveal.next(); Reveal.prevFragment(); Reveal.nextFragment(); -// Randomize the order of slides -Reveal.shuffle(); - // Toggle presentation states, optionally pass true/false to force on/off Reveal.toggleOverview(); Reveal.togglePause(); Reveal.toggleAutoSlide(); -// Shows a help overlay with keyboard shortcuts, optionally pass true/false -// to force on/off -Reveal.toggleHelp(); - // Change a config value at runtime Reveal.configure({ controls: true }); @@ -514,14 +365,9 @@ Reveal.getScale(); Reveal.getPreviousSlide(); Reveal.getCurrentSlide(); -Reveal.getIndices(); // { h: 0, v: 0 } } -Reveal.getPastSlideCount(); -Reveal.getProgress(); // (0 == first slide, 1 == last slide) -Reveal.getSlides(); // Array of all slides -Reveal.getTotalSlides(); // total number of slides - -// Returns the speaker notes for the current slide -Reveal.getSlideNotes(); +Reveal.getIndices(); // { h: 0, v: 0 } } +Reveal.getProgress(); // 0-1 +Reveal.getTotalSlides(); // State checks Reveal.isFirstSlide(); @@ -574,59 +420,26 @@ Reveal.addEventListener( 'somestate', function() { ### Slide Backgrounds -Slides are contained within a limited portion of the screen by default to allow them to fit any display and scale uniformly. You can apply full page backgrounds outside of the slide area by adding a ```data-background``` attribute to your ```
    ``` elements. Four different types of backgrounds are supported: color, image, video and iframe. +Slides are contained within a limited portion of the screen by default to allow them to fit any display and scale uniformly. You can apply full page backgrounds outside of the slide area by adding a ```data-background``` attribute to your ```
    ``` elements. Four different types of backgrounds are supported: color, image, video and iframe. Below are a few examples. -#### Color Backgrounds -All CSS color formats are supported, like rgba() or hsl(). ```html -
    -

    Color

    +
    +

    All CSS color formats are supported, like rgba() or hsl().

    +
    +
    +

    This slide will have a full-size background image.

    +
    +
    +

    This background image will be sized to 100px and repeated.

    +
    +
    +

    Video. Multiple sources can be defined using a comma separated list. Video will loop when the data-background-video-loop attribute is provided.

    +
    +
    +

    Embeds a web page as a background. Note that the page won't be interactive.

    ``` -#### Image Backgrounds -By default, background images are resized to cover the full page. Available options: - -| Attribute | Default | Description | -| :--------------------------- | :--------- | :---------- | -| data-background-image | | URL of the image to show. GIFs restart when the slide opens. | -| data-background-size | cover | See [background-size](https://developer.mozilla.org/docs/Web/CSS/background-size) on MDN. | -| data-background-position | center | See [background-position](https://developer.mozilla.org/docs/Web/CSS/background-position) on MDN. | -| data-background-repeat | no-repeat | See [background-repeat](https://developer.mozilla.org/docs/Web/CSS/background-repeat) on MDN. | -```html -
    -

    Image

    -
    -
    -

    This background image will be sized to 100px and repeated

    -
    -``` - -#### Video Backgrounds -Automatically plays a full size video behind the slide. - -| Attribute | Default | Description | -| :--------------------------- | :------ | :---------- | -| data-background-video | | A single video source, or a comma separated list of video sources. | -| data-background-video-loop | false | Flags if the video should play repeatedly. | -| data-background-video-muted | false | Flags if the audio should be muted. | -| data-background-size | cover | Use `cover` for full screen and some cropping or `contain` for letterboxing. | - -```html -
    -

    Video

    -
    -``` - -#### Iframe Backgrounds -Embeds a web page as a slide background that covers 100% of the reveal.js width and height. The iframe is in the background layer, behind your slides, and as such it's not possible to interact with it by default. To make your background interactive, you can add the `data-background-interactive` attribute. -```html -
    -

    Iframe

    -
    -``` - -#### Background Transitions Backgrounds transition using a fade animation by default. This can be changed to a linear sliding transition by passing ```backgroundTransition: 'slide'``` to the ```Reveal.initialize()``` call. Alternatively you can set ```data-background-transition``` on any section with a background to override that specific transition. @@ -643,16 +456,16 @@ Reveal.initialize({ // Parallax background size parallaxBackgroundSize: '', // CSS syntax, e.g. "2100px 900px" - currently only pixels are supported (don't use % or auto) - // Number of pixels to move the parallax background per slide - // - Calculated automatically unless specified - // - Set to 0 to disable movement along an axis + // Amount of pixels to move the parallax background per slide step, + // a value of 0 disables movement along the given axis + // These are optional, if they aren't specified they'll be calculated automatically parallaxBackgroundHorizontal: 200, parallaxBackgroundVertical: 50 }); ``` -Make sure that the background size is much bigger than screen size to allow for some scrolling. [View example](http://revealjs.com/?parallaxBackgroundImage=https%3A%2F%2Fs3.amazonaws.com%2Fhakim-static%2Freveal-js%2Freveal-parallax-1.jpg¶llaxBackgroundSize=2100px%20900px). +Make sure that the background size is much bigger than screen size to allow for some scrolling. [View example](http://lab.hakim.se/reveal-js/?parallaxBackgroundImage=https%3A%2F%2Fs3.amazonaws.com%2Fhakim-static%2Freveal-js%2Freveal-parallax-1.jpg¶llaxBackgroundSize=2100px%20900px). @@ -673,15 +486,15 @@ You can also use different in and out transitions for the same slide: ```html
    - The train goes on … + The train goes on …
    -
    - and on … +
    + and on …
    -
    +
    and stops.
    -
    +
    (Passengers entering and leaving)
    @@ -690,6 +503,9 @@ You can also use different in and out transitions for the same slide: ``` +Note that this does not work with the page and cube transitions. + + ### Internal links It's easy to link between slides. The first example below targets the index of another slide whereas the second targets a slide with an ID attribute (```
    ```): @@ -712,7 +528,7 @@ You can also add relative navigation links, similar to the built in reveal.js co ### Fragments -Fragments are used to highlight individual elements on a slide. Every element with the class ```fragment``` will be stepped through before moving on to the next slide. Here's an example: http://revealjs.com/#/fragments +Fragments are used to highlight individual elements on a slide. Every element with the class ```fragment``` will be stepped through before moving on to the next slide. Here's an example: http://lab.hakim.se/reveal-js/#/fragments The default fragment style is to start out invisible and fade in. This style can be changed by appending a different class to the fragment: @@ -721,7 +537,6 @@ The default fragment style is to start out invisible and fade in. This style can

    grow

    shrink

    fade-out

    -

    fade-up (also down, left and right!)

    visible only once

    blue only once

    highlight-red

    @@ -767,41 +582,33 @@ Reveal.addEventListener( 'fragmenthidden', function( event ) { ### Code syntax highlighting -By default, Reveal is configured with [highlight.js](https://highlightjs.org/) for code syntax highlighting. To enable syntax highlighting, you'll have to load the highlight plugin ([plugin/highlight/highlight.js](plugin/highlight/highlight.js)) and a highlight.js CSS theme (Reveal comes packaged with the zenburn theme: [lib/css/zenburn.css](lib/css/zenburn.css)). - -Below is an example with clojure code that will be syntax highlighted. When the `data-trim` attribute is present, surrounding whitespace is automatically removed. HTML will be escaped by default. To avoid this, for example if you are using `` to call out a line of code, add the `data-noescape` attribute to the `` element. +By default, Reveal is configured with [highlight.js](http://softwaremaniacs.org/soft/highlight/en/) for code syntax highlighting. Below is an example with clojure code that will be syntax highlighted. When the `data-trim` attribute is present surrounding whitespace is automatically removed. ```html
    -
    
    +	
    
     (def lazy-fib
       (concat
        [0 1]
    -   ((fn rfib [a b]
    +   ((fn rfib [a b]
             (lazy-cons (+ a b) (rfib b (+ a b)))) 0 1)))
     	
    ``` ### Slide number -If you would like to display the page number of the current slide you can do so using the ```slideNumber``` and ```showSlideNumber``` configuration values. +If you would like to display the page number of the current slide you can do so using the ```slideNumber``` configuration value. ```javascript // Shows the slide number using default formatting Reveal.configure({ slideNumber: true }); // Slide number formatting can be configured using these variables: -// "h.v": horizontal . vertical slide number (default) -// "h/v": horizontal / vertical slide number -// "c": flattened slide number -// "c/t": flattened slide number / total slides -Reveal.configure({ slideNumber: 'c/t' }); - -// Control which views the slide number displays on using the "showSlideNumber" value: -// "all": show on all views (default) -// "speaker": only show slide numbers on speaker notes view -// "print": only show slide numbers when printing to PDF -Reveal.configure({ showSlideNumber: 'speaker' }); +// h: current slide's horizontal index +// v: current slide's vertical index +// c: current slide index (flattened) +// t: total number of slides (flattened) +Reveal.configure({ slideNumber: 'c / t' }); ``` @@ -819,26 +626,20 @@ Reveal.addEventListener( 'overviewhidden', function( event ) { /* ... */ } ); Reveal.toggleOverview(); ``` - ### Fullscreen mode Just press »F« on your keyboard to show your presentation in fullscreen mode. Press the »ESC« key to exit fullscreen mode. ### Embedded media +Embedded HTML5 `
    diff --git a/doc/pub/NeuralNet/html/reveal.js/plugin/markdown/example.md b/doc/pub/NeuralNet/html/reveal.js/plugin/markdown/example.md index 89c75345e..6f6f577a1 100644 --- a/doc/pub/NeuralNet/html/reveal.js/plugin/markdown/example.md +++ b/doc/pub/NeuralNet/html/reveal.js/plugin/markdown/example.md @@ -29,8 +29,3 @@ Content 3.1 ## External 3.2 Content 3.2 - - -## External 3.3 - -![External Image](https://s3.amazonaws.com/static.slid.es/logo/v2/slides-symbol-512x512.png) diff --git a/doc/pub/NeuralNet/html/reveal.js/plugin/markdown/markdown.js b/doc/pub/NeuralNet/html/reveal.js/plugin/markdown/markdown.js index aa08ee5ed..15e3b40b3 100644 --- a/doc/pub/NeuralNet/html/reveal.js/plugin/markdown/markdown.js +++ b/doc/pub/NeuralNet/html/reveal.js/plugin/markdown/markdown.js @@ -4,26 +4,33 @@ * of external markdown documents. */ (function( root, factory ) { - if (typeof define === 'function' && define.amd) { - root.marked = require( './marked' ); - root.RevealMarkdown = factory( root.marked ); - root.RevealMarkdown.initialize(); - } else if( typeof exports === 'object' ) { + if( typeof exports === 'object' ) { module.exports = factory( require( './marked' ) ); - } else { + } + else { // Browser globals (root is window) root.RevealMarkdown = factory( root.marked ); root.RevealMarkdown.initialize(); } }( this, function( marked ) { + if( typeof marked === 'undefined' ) { + throw 'The reveal.js Markdown plugin requires marked to be loaded'; + } + + if( typeof hljs !== 'undefined' ) { + marked.setOptions({ + highlight: function( lang, code ) { + return hljs.highlightAuto( lang, code ).value; + } + }); + } + var DEFAULT_SLIDE_SEPARATOR = '^\r?\n---\r?\n$', - DEFAULT_NOTES_SEPARATOR = 'notes?:', + DEFAULT_NOTES_SEPARATOR = 'note:', DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\\.element\\\s*?(.+?)$', DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\\.slide:\\\s*?(\\\S.+?)$'; - var SCRIPT_END_PLACEHOLDER = '__SCRIPT_END__'; - /** * Retrieves the markdown contents of a slide section @@ -31,15 +38,11 @@ */ function getMarkdownFromSlide( section ) { - // look for a ' ); - var leadingWs = text.match( /^\n?(\s*)/ )[1].length, leadingTabs = text.match( /^\n?(\t*)/ )[1].length; @@ -109,13 +112,9 @@ var notesMatch = content.split( new RegExp( options.notesSeparator, 'mgi' ) ); if( notesMatch.length === 2 ) { - content = notesMatch[0] + ''; + content = notesMatch[0] + ''; } - // prevent script end tags in the content from interfering - // with parsing - content = content.replace( /<\/script>/g, SCRIPT_END_PLACEHOLDER ); - return ''; } @@ -178,7 +177,7 @@ markdownSections += '
    '; sectionStack[i].forEach( function( child ) { - markdownSections += '
    ' + createMarkdownSlide( child, options ) + '
    '; + markdownSections += '
    ' + createMarkdownSlide( child, options ) + '
    '; } ); markdownSections += '
    '; @@ -380,24 +379,6 @@ return { initialize: function() { - if( typeof marked === 'undefined' ) { - throw 'The reveal.js Markdown plugin requires marked to be loaded'; - } - - if( typeof hljs !== 'undefined' ) { - marked.setOptions({ - highlight: function( code, lang ) { - return hljs.highlightAuto( code, [lang] ).value; - } - }); - } - - var options = Reveal.getConfig().markdown; - - if ( options ) { - marked.setOptions( options ); - } - processSlides(); convertSlides(); }, diff --git a/doc/pub/NeuralNet/html/reveal.js/plugin/markdown/marked.js b/doc/pub/NeuralNet/html/reveal.js/plugin/markdown/marked.js index 555c1dc1d..70af29bf9 100644 --- a/doc/pub/NeuralNet/html/reveal.js/plugin/markdown/marked.js +++ b/doc/pub/NeuralNet/html/reveal.js/plugin/markdown/marked.js @@ -3,4 +3,4 @@ * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) * https://github.com/chjj/marked */ -(function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]||""});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&(cap[1]==="pre"||cap[1]==="script"||cap[1]==="style"),text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^/i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(cap[0]):escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.text(escape(this.smartypants(cap[0])));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")};InlineLexer.prototype.mangle=function(text){if(!this.options.mangle)return text;var out="",l=text.length,i=0,ch;for(;i.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"
    "+(escaped?code:escape(code,true))+"\n
    "}return'
    '+(escaped?code:escape(code,true))+"\n
    \n"};Renderer.prototype.blockquote=function(quote){return"
    \n"+quote+"
    \n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"'+text+"\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"
    \n":"
    \n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"\n"};Renderer.prototype.listitem=function(text){return"
  • "+text+"
  • \n"};Renderer.prototype.paragraph=function(text){return"

    "+text+"

    \n"};Renderer.prototype.table=function(header,body){return"\n"+"\n"+header+"\n"+"\n"+body+"\n"+"
    \n"};Renderer.prototype.tablerow=function(content){return"\n"+content+"\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"\n"};Renderer.prototype.strong=function(text){return""+text+""};Renderer.prototype.em=function(text){return""+text+""};Renderer.prototype.codespan=function(text){return""+text+""};Renderer.prototype.br=function(){return this.options.xhtml?"
    ":"
    "};Renderer.prototype.del=function(text){return""+text+""};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0||prot.indexOf("vbscript:")===0){return""}}var out='
    ";return out};Renderer.prototype.image=function(href,title,text){var out=''+text+'":">";return out};Renderer.prototype.text=function(text){return text};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i/g,">").replace(/"/g,""").replace(/'/g,"'")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;iAn error occured:

    "+escape(e.message+"",true)+"
    "}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,sanitizer:null,mangle:true,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}()); \ No newline at end of file +(function(){function e(e){this.tokens=[],this.tokens.links={},this.options=e||a.defaults,this.rules=p.normal,this.options.gfm&&(this.rules=this.options.tables?p.tables:p.gfm)}function t(e,t){if(this.options=t||a.defaults,this.links=e,this.rules=u.normal,this.renderer=this.options.renderer||new n,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.gfm?this.rules=this.options.breaks?u.breaks:u.gfm:this.options.pedantic&&(this.rules=u.pedantic)}function n(e){this.options=e||{}}function r(e){this.tokens=[],this.token=null,this.options=e||a.defaults,this.options.renderer=this.options.renderer||new n,this.renderer=this.options.renderer,this.renderer.options=this.options}function s(e,t){return e.replace(t?/&/g:/&(?!#?\w+;)/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function i(e){return e.replace(/&([#\w]+);/g,function(e,t){return t=t.toLowerCase(),"colon"===t?":":"#"===t.charAt(0)?String.fromCharCode("x"===t.charAt(1)?parseInt(t.substring(2),16):+t.substring(1)):""})}function l(e,t){return e=e.source,t=t||"",function n(r,s){return r?(s=s.source||s,s=s.replace(/(^|[^\[])\^/g,"$1"),e=e.replace(r,s),n):new RegExp(e,t)}}function o(){}function h(e){for(var t,n,r=1;rAn error occured:

    "+s(c.message+"",!0)+"
    ";throw c}}var p={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:o,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:o,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:o,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};p.bullet=/(?:[*+-]|\d+\.)/,p.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,p.item=l(p.item,"gm")(/bull/g,p.bullet)(),p.list=l(p.list)(/bull/g,p.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+p.def.source+")")(),p.blockquote=l(p.blockquote)("def",p.def)(),p._tag="(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b",p.html=l(p.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,p._tag)(),p.paragraph=l(p.paragraph)("hr",p.hr)("heading",p.heading)("lheading",p.lheading)("blockquote",p.blockquote)("tag","<"+p._tag)("def",p.def)(),p.normal=h({},p),p.gfm=h({},p.normal,{fences:/^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,paragraph:/^/}),p.gfm.paragraph=l(p.paragraph)("(?!","(?!"+p.gfm.fences.source.replace("\\1","\\2")+"|"+p.list.source.replace("\\1","\\3")+"|")(),p.tables=h({},p.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/}),e.rules=p,e.lex=function(t,n){var r=new e(n);return r.lex(t)},e.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},e.prototype.token=function(e,t,n){for(var r,s,i,l,o,h,a,u,c,e=e.replace(/^ +$/gm,"");e;)if((i=this.rules.newline.exec(e))&&(e=e.substring(i[0].length),i[0].length>1&&this.tokens.push({type:"space"})),i=this.rules.code.exec(e))e=e.substring(i[0].length),i=i[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?i:i.replace(/\n+$/,"")});else if(i=this.rules.fences.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"code",lang:i[2],text:i[3]});else if(i=this.rules.heading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:i[1].length,text:i[2]});else if(t&&(i=this.rules.nptable.exec(e))){for(e=e.substring(i[0].length),h={type:"table",header:i[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3].replace(/\n$/,"").split("\n")},u=0;u ?/gm,""),this.token(i,t,!0),this.tokens.push({type:"blockquote_end"});else if(i=this.rules.list.exec(e)){for(e=e.substring(i[0].length),l=i[2],this.tokens.push({type:"list_start",ordered:l.length>1}),i=i[0].match(this.rules.item),r=!1,c=i.length,u=0;c>u;u++)h=i[u],a=h.length,h=h.replace(/^ *([*+-]|\d+\.) +/,""),~h.indexOf("\n ")&&(a-=h.length,h=this.options.pedantic?h.replace(/^ {1,4}/gm,""):h.replace(new RegExp("^ {1,"+a+"}","gm"),"")),this.options.smartLists&&u!==c-1&&(o=p.bullet.exec(i[u+1])[0],l===o||l.length>1&&o.length>1||(e=i.slice(u+1).join("\n")+e,u=c-1)),s=r||/\n\n(?!\s*$)/.test(h),u!==c-1&&(r="\n"===h.charAt(h.length-1),s||(s=r)),this.tokens.push({type:s?"loose_item_start":"list_item_start"}),this.token(h,!1,n),this.tokens.push({type:"list_item_end"});this.tokens.push({type:"list_end"})}else if(i=this.rules.html.exec(e))e=e.substring(i[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:"pre"===i[1]||"script"===i[1]||"style"===i[1],text:i[0]});else if(!n&&t&&(i=this.rules.def.exec(e)))e=e.substring(i[0].length),this.tokens.links[i[1].toLowerCase()]={href:i[2],title:i[3]};else if(t&&(i=this.rules.table.exec(e))){for(e=e.substring(i[0].length),h={type:"table",header:i[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3].replace(/(?: *\| *)?\n$/,"").split("\n")},u=0;u])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:o,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:o,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/,u.link=l(u.link)("inside",u._inside)("href",u._href)(),u.reflink=l(u.reflink)("inside",u._inside)(),u.normal=h({},u),u.pedantic=h({},u.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/}),u.gfm=h({},u.normal,{escape:l(u.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:l(u.text)("]|","~]|")("|","|https?://|")()}),u.breaks=h({},u.gfm,{br:l(u.br)("{2,}","*")(),text:l(u.gfm.text)("{2,}","*")()}),t.rules=u,t.output=function(e,n,r){var s=new t(n,r);return s.output(e)},t.prototype.output=function(e){for(var t,n,r,i,l="";e;)if(i=this.rules.escape.exec(e))e=e.substring(i[0].length),l+=i[1];else if(i=this.rules.autolink.exec(e))e=e.substring(i[0].length),"@"===i[2]?(n=this.mangle(":"===i[1].charAt(6)?i[1].substring(7):i[1]),r=this.mangle("mailto:")+n):(n=s(i[1]),r=n),l+=this.renderer.link(r,null,n);else if(this.inLink||!(i=this.rules.url.exec(e))){if(i=this.rules.tag.exec(e))!this.inLink&&/^
    /i.test(i[0])&&(this.inLink=!1),e=e.substring(i[0].length),l+=this.options.sanitize?s(i[0]):i[0];else if(i=this.rules.link.exec(e))e=e.substring(i[0].length),this.inLink=!0,l+=this.outputLink(i,{href:i[2],title:i[3]}),this.inLink=!1;else if((i=this.rules.reflink.exec(e))||(i=this.rules.nolink.exec(e))){if(e=e.substring(i[0].length),t=(i[2]||i[1]).replace(/\s+/g," "),t=this.links[t.toLowerCase()],!t||!t.href){l+=i[0].charAt(0),e=i[0].substring(1)+e;continue}this.inLink=!0,l+=this.outputLink(i,t),this.inLink=!1}else if(i=this.rules.strong.exec(e))e=e.substring(i[0].length),l+=this.renderer.strong(this.output(i[2]||i[1]));else if(i=this.rules.em.exec(e))e=e.substring(i[0].length),l+=this.renderer.em(this.output(i[2]||i[1]));else if(i=this.rules.code.exec(e))e=e.substring(i[0].length),l+=this.renderer.codespan(s(i[2],!0));else if(i=this.rules.br.exec(e))e=e.substring(i[0].length),l+=this.renderer.br();else if(i=this.rules.del.exec(e))e=e.substring(i[0].length),l+=this.renderer.del(this.output(i[1]));else if(i=this.rules.text.exec(e))e=e.substring(i[0].length),l+=s(this.smartypants(i[0]));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else e=e.substring(i[0].length),n=s(i[1]),r=n,l+=this.renderer.link(r,null,n);return l},t.prototype.outputLink=function(e,t){var n=s(t.href),r=t.title?s(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,s(e[1]))},t.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/--/g,"—").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},t.prototype.mangle=function(e){for(var t,n="",r=e.length,s=0;r>s;s++)t=e.charCodeAt(s),Math.random()>.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},n.prototype.code=function(e,t,n){if(this.options.highlight){var r=this.options.highlight(e,t);null!=r&&r!==e&&(n=!0,e=r)}return t?'
    '+(n?e:s(e,!0))+"\n
    \n":"
    "+(n?e:s(e,!0))+"\n
    "},n.prototype.blockquote=function(e){return"
    \n"+e+"
    \n"},n.prototype.html=function(e){return e},n.prototype.heading=function(e,t,n){return"'+e+"\n"},n.prototype.hr=function(){return this.options.xhtml?"
    \n":"
    \n"},n.prototype.list=function(e,t){var n=t?"ol":"ul";return"<"+n+">\n"+e+"\n"},n.prototype.listitem=function(e){return"
  • "+e+"
  • \n"},n.prototype.paragraph=function(e){return"

    "+e+"

    \n"},n.prototype.table=function(e,t){return"\n\n"+e+"\n\n"+t+"\n
    \n"},n.prototype.tablerow=function(e){return"\n"+e+"\n"},n.prototype.tablecell=function(e,t){var n=t.header?"th":"td",r=t.align?"<"+n+' style="text-align:'+t.align+'">':"<"+n+">";return r+e+"\n"},n.prototype.strong=function(e){return""+e+""},n.prototype.em=function(e){return""+e+""},n.prototype.codespan=function(e){return""+e+""},n.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},n.prototype.del=function(e){return""+e+""},n.prototype.link=function(e,t,n){if(this.options.sanitize){try{var r=decodeURIComponent(i(e)).replace(/[^\w:]/g,"").toLowerCase()}catch(s){return""}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:"))return""}var l='
    "},n.prototype.image=function(e,t,n){var r=''+n+'":">"},r.parse=function(e,t,n){var s=new r(t,n);return s.parse(e)},r.prototype.parse=function(e){this.inline=new t(e.links,this.options,this.renderer),this.tokens=e.reverse();for(var n="";this.next();)n+=this.tok();return n},r.prototype.next=function(){return this.token=this.tokens.pop()},r.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},r.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},r.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,s,i="",l="";for(n="",e=0;ebody{font-family: sans-serif;}

    reveal.js multiplex server.

    Generate token'); - res.end(); - }); - stream.on('readable', function() { - stream.pipe(res); - }); + fs.createReadStream(opts.baseDir + '/index.html').pipe(res); }); app.get("/token", function(req,res) { @@ -55,7 +47,7 @@ var createHash = function(secret) { }; // Actually listen -server.listen( opts.port || null ); +app.listen(opts.port || null); var brown = '\033[33m', green = '\033[32m', diff --git a/doc/pub/NeuralNet/html/reveal.js/plugin/multiplex/master.js b/doc/pub/NeuralNet/html/reveal.js/plugin/multiplex/master.js index 7f4bf4511..b6a7eb7dc 100644 --- a/doc/pub/NeuralNet/html/reveal.js/plugin/multiplex/master.js +++ b/doc/pub/NeuralNet/html/reveal.js/plugin/multiplex/master.js @@ -1,34 +1,51 @@ (function() { - // Don't emit events from inside of notes windows if ( window.location.search.match( /receiver/gi ) ) { return; } var multiplex = Reveal.getConfig().multiplex; - var socket = io.connect( multiplex.url ); + var socket = io.connect(multiplex.url); - function post() { + var notify = function( slideElement, indexh, indexv, origin ) { + if( typeof origin === 'undefined' && origin !== 'remote' ) { + var nextindexh; + var nextindexv; - var messageData = { - state: Reveal.getState(), - secret: multiplex.secret, - socketId: multiplex.id - }; + var fragmentindex = Reveal.getIndices().f; + if (typeof fragmentindex == 'undefined') { + fragmentindex = 0; + } - socket.emit( 'multiplex-statechanged', messageData ); + if (slideElement.nextElementSibling && slideElement.parentNode.nodeName == 'SECTION') { + nextindexh = indexh; + nextindexv = indexv + 1; + } else { + nextindexh = indexh + 1; + nextindexv = 0; + } + var slideData = { + indexh : indexh, + indexv : indexv, + indexf : fragmentindex, + nextindexh : nextindexh, + nextindexv : nextindexv, + secret: multiplex.secret, + socketId : multiplex.id + }; + + socket.emit('slidechanged', slideData); + } + } + + Reveal.addEventListener( 'slidechanged', function( event ) { + notify( event.currentSlide, event.indexh, event.indexv, event.origin ); + } ); + + var fragmentNotify = function( event ) { + notify( Reveal.getCurrentSlide(), Reveal.getIndices().h, Reveal.getIndices().v, event.origin ); }; - // post once the page is loaded, so the client follows also on "open URL". - window.addEventListener( 'load', post ); - - // Monitor events that trigger a change in state - Reveal.addEventListener( 'slidechanged', post ); - Reveal.addEventListener( 'fragmentshown', post ); - Reveal.addEventListener( 'fragmenthidden', post ); - Reveal.addEventListener( 'overviewhidden', post ); - Reveal.addEventListener( 'overviewshown', post ); - Reveal.addEventListener( 'paused', post ); - Reveal.addEventListener( 'resumed', post ); - -}()); + Reveal.addEventListener( 'fragmentshown', fragmentNotify ); + Reveal.addEventListener( 'fragmenthidden', fragmentNotify ); +}()); \ No newline at end of file diff --git a/doc/pub/NeuralNet/html/reveal.js/plugin/notes-server/client.js b/doc/pub/NeuralNet/html/reveal.js/plugin/notes-server/client.js index 00b277baf..628586ffb 100644 --- a/doc/pub/NeuralNet/html/reveal.js/plugin/notes-server/client.js +++ b/doc/pub/NeuralNet/html/reveal.js/plugin/notes-server/client.js @@ -41,15 +41,10 @@ } // When a new notes window connects, post our current state - socket.on( 'new-subscriber', function( data ) { + socket.on( 'connect', function( data ) { post(); } ); - // When the state changes from inside of the speaker view - socket.on( 'statechanged-speaker', function( data ) { - Reveal.setState( data.state ); - } ); - // Monitor events that trigger a change in state Reveal.addEventListener( 'slidechanged', post ); Reveal.addEventListener( 'fragmentshown', post ); diff --git a/doc/pub/NeuralNet/html/reveal.js/plugin/notes-server/index.js b/doc/pub/NeuralNet/html/reveal.js/plugin/notes-server/index.js index b95f07188..df917f112 100644 --- a/doc/pub/NeuralNet/html/reveal.js/plugin/notes-server/index.js +++ b/doc/pub/NeuralNet/html/reveal.js/plugin/notes-server/index.js @@ -1,40 +1,37 @@ -var http = require('http'); var express = require('express'); var fs = require('fs'); var io = require('socket.io'); +var _ = require('underscore'); var Mustache = require('mustache'); -var app = express(); +var app = express.createServer(); var staticDir = express.static; -var server = http.createServer(app); -io = io(server); +io = io.listen(app); var opts = { port : 1947, baseDir : __dirname + '/../../' }; -io.on( 'connection', function( socket ) { +io.sockets.on( 'connection', function( socket ) { - socket.on( 'new-subscriber', function( data ) { - socket.broadcast.emit( 'new-subscriber', data ); + socket.on( 'connect', function( data ) { + socket.broadcast.emit( 'connect', data ); }); socket.on( 'statechanged', function( data ) { - delete data.state.overview; socket.broadcast.emit( 'statechanged', data ); }); - socket.on( 'statechanged-speaker', function( data ) { - delete data.state.overview; - socket.broadcast.emit( 'statechanged-speaker', data ); - }); - }); -[ 'css', 'js', 'images', 'plugin', 'lib' ].forEach( function( dir ) { - app.use( '/' + dir, staticDir( opts.baseDir + dir ) ); +app.configure( function() { + + [ 'css', 'js', 'images', 'plugin', 'lib' ].forEach( function( dir ) { + app.use( '/' + dir, staticDir( opts.baseDir + dir ) ); + }); + }); app.get('/', function( req, res ) { @@ -55,7 +52,7 @@ app.get( '/notes/:socketId', function( req, res ) { }); // Actually listen -server.listen( opts.port || null ); +app.listen( opts.port || null ); var brown = '\033[33m', green = '\033[32m', @@ -65,5 +62,5 @@ var slidesLocation = 'http://localhost' + ( opts.port ? ( ':' + opts.port ) : '' console.log( brown + 'reveal.js - Speaker Notes' + reset ); console.log( '1. Open the slides at ' + green + slidesLocation + reset ); -console.log( '2. Click on the link in your JS console to go to the notes page' ); +console.log( '2. Click on the link your JS console to go to the notes page' ); console.log( '3. Advance through your slides and your notes will advance automatically' ); diff --git a/doc/pub/NeuralNet/html/reveal.js/plugin/notes-server/notes.html b/doc/pub/NeuralNet/html/reveal.js/plugin/notes-server/notes.html index ab8c5b17a..72d0317f1 100644 --- a/doc/pub/NeuralNet/html/reveal.js/plugin/notes-server/notes.html +++ b/doc/pub/NeuralNet/html/reveal.js/plugin/notes-server/notes.html @@ -8,7 +8,6 @@ @@ -247,7 +152,7 @@
    -
    Upcoming
    +
    UPCOMING:

    Time Click to Reset

    @@ -265,10 +170,6 @@
    -
    - - -
    @@ -281,20 +182,11 @@ currentState, currentSlide, upcomingSlide, - layoutLabel, - layoutDropdown, connected = false; var socket = io.connect( window.location.origin ), socketId = '{{socketId}}'; - var SPEAKER_LAYOUTS = { - 'default': 'Default', - 'wide': 'Wide', - 'tall': 'Tall', - 'notes-only': 'Notes only' - }; - socket.on( 'statechanged', function( data ) { // ignore data from sockets that aren't ours @@ -303,6 +195,7 @@ if( connected === false ) { connected = true; + setupIframes( data ); setupKeyboard(); setupNotes(); setupTimer(); @@ -313,28 +206,13 @@ } ); - setupLayout(); - - // Load our presentation iframes - setupIframes(); - - // Once the iframes have loaded, emit a signal saying there's - // a new subscriber which will trigger a 'statechanged' - // message to be sent back window.addEventListener( 'message', function( event ) { var data = JSON.parse( event.data ); if( data && data.namespace === 'reveal' ) { if( /ready/.test( data.eventName ) ) { - socket.emit( 'new-subscriber', { socketId: socketId } ); - } - } - - // Messages sent by reveal.js inside of the current slide preview - if( data && data.namespace === 'reveal' ) { - if( /slidechanged|fragmentshown|fragmenthidden|overviewshown|overviewhidden|paused|resumed/.test( data.eventName ) && currentState !== JSON.stringify( data.state ) ) { - socket.emit( 'statechanged-speaker', { state: data.state } ); + socket.emit( 'connect', { socketId: socketId } ); } } @@ -389,7 +267,7 @@ /** * Creates the preview iframes. */ - function setupIframes() { + function setupIframes( data ) { var params = [ 'receiver', @@ -399,8 +277,9 @@ 'backgroundTransition=none' ].join( '&' ); - var currentURL = '/?' + params + '&postMessageEvents=true'; - var upcomingURL = '/?' + params + '&controls=false'; + var hash = '#/' + data.state.indexh + '/' + data.state.indexv; + var currentURL = '/?' + params + '&postMessageEvents=true' + hash; + var upcomingURL = '/?' + params + '&controls=false' + hash; currentSlide = document.createElement( 'iframe' ); currentSlide.setAttribute( 'width', 1280 ); @@ -472,74 +351,6 @@ } - /** - * Sets up the speaker view layout and layout selector. - */ - function setupLayout() { - - layoutDropdown = document.querySelector( '.speaker-layout-dropdown' ); - layoutLabel = document.querySelector( '.speaker-layout-label' ); - - // Render the list of available layouts - for( var id in SPEAKER_LAYOUTS ) { - var option = document.createElement( 'option' ); - option.setAttribute( 'value', id ); - option.textContent = SPEAKER_LAYOUTS[ id ]; - layoutDropdown.appendChild( option ); - } - - // Monitor the dropdown for changes - layoutDropdown.addEventListener( 'change', function( event ) { - - setLayout( layoutDropdown.value ); - - }, false ); - - // Restore any currently persisted layout - setLayout( getLayout() ); - - } - - /** - * Sets a new speaker view layout. The layout is persisted - * in local storage. - */ - function setLayout( value ) { - - var title = SPEAKER_LAYOUTS[ value ]; - - layoutLabel.innerHTML = 'Layout' + ( title ? ( ': ' + title ) : '' ); - layoutDropdown.value = value; - - document.body.setAttribute( 'data-speaker-layout', value ); - - // Persist locally - if( window.localStorage ) { - window.localStorage.setItem( 'reveal-speaker-layout', value ); - } - - } - - /** - * Returns the ID of the most recently set speaker layout - * or our default layout if none has been set. - */ - function getLayout() { - - if( window.localStorage ) { - var layout = window.localStorage.getItem( 'reveal-speaker-layout' ); - if( layout ) { - return layout; - } - } - - // Default to the first record in the layouts hash - for( var id in SPEAKER_LAYOUTS ) { - return id; - } - - } - function zeroPadInteger( num ) { var str = '00' + parseInt( num ); diff --git a/doc/pub/NeuralNet/html/reveal.js/plugin/notes/notes.html b/doc/pub/NeuralNet/html/reveal.js/plugin/notes/notes.html index 4c5b799b5..0cc8cf612 100644 --- a/doc/pub/NeuralNet/html/reveal.js/plugin/notes/notes.html +++ b/doc/pub/NeuralNet/html/reveal.js/plugin/notes/notes.html @@ -8,7 +8,6 @@