|
|
@@ -0,0 +1,962 @@ |
|
|
{ |
|
|
"cells": [ |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"<img src=\"http://hilpisch.com/tpq_logo.png\" width=350px align=\"right\">" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"# Neural Network in Python" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"© Dr. Yves J. Hilpisch\n", |
|
|
"\n", |
|
|
"The Python Quants GmbH" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 1, |
|
|
"metadata": { |
|
|
"collapsed": true |
|
|
}, |
|
|
"outputs": [], |
|
|
"source": [ |
|
|
"import numpy as np\n", |
|
|
"from pylab import plt\n", |
|
|
"plt.style.use('seaborn')\n", |
|
|
"%matplotlib inline" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"## Neural Network for Regression" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"[Regression & Neural Networks](https://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15381-s06/www/nn.pdf)" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"### Linear OLS Regression" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 2, |
|
|
"metadata": { |
|
|
"collapsed": true |
|
|
}, |
|
|
"outputs": [], |
|
|
"source": [ |
|
|
"x = np.linspace(0, 10, 5)\n", |
|
|
"y = 3 * x + 2.5 + np.random.standard_normal(len(x)) * 1.5" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 3, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"[<matplotlib.lines.Line2D at 0x118cf36d8>]" |
|
|
] |
|
|
}, |
|
|
"execution_count": 3, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
}, |
|
|
{ |
|
|
"data": { |
|
|
"image/png": "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\nRK5CYII=\n", |
|
|
"text/plain": [ |
|
|
"<matplotlib.figure.Figure at 0x10f213ef0>" |
|
|
] |
|
|
}, |
|
|
"metadata": {}, |
|
|
"output_type": "display_data" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"plt.plot(x, y, 'r.')" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 4, |
|
|
"metadata": { |
|
|
"collapsed": true |
|
|
}, |
|
|
"outputs": [], |
|
|
"source": [ |
|
|
"reg = np.polyfit(x, y, deg=1)" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 5, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([ 3.24746398, 2.9487911 ])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 5, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"reg" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 6, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"[<matplotlib.lines.Line2D at 0x118d2e438>]" |
|
|
] |
|
|
}, |
|
|
"execution_count": 6, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
}, |
|
|
{ |
|
|
"data": { |
|
|
"image/png": "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\nkQ54993knW1Wr/bSo4dLRUUTV1yhZhtJP4W3SDtEIjB/foD58wPEYg4XXZRsttl3X822pXMovEX2\n0GuveSgtDWGtl969E1RWNnH22bqzjXQuhbdIG9XXwx13BHngAT+u63DNNVEmT45QXJzpyqQQ7Ta8\njTF+YDHQFwgCM4F3gIcAF3gLGGmt1TooyWsrVngpKwvx4YceDjssQU1NE4MGabYtmdNae/wwYKu1\ndjBwDnAXUA2Ut+xzgAvTW6JI5mzd6jBiRIirririk08cRo+O8NxzDQpuybjWTps8ASxt2XaAODAA\neKFl37PAWcCTaalOJENcF5Yt81FeHmTrVg/HHZdstjnmGP2SKdnBcd3Wr44bY4qB3wGLgLnW2v1b\n9g8FrrPWDtvd6+PxZtfnU6eC5Ib334cRI+C//gu6dIGZM+GWW8CnK0TS+Xa56LTVv47GmANJzqx/\nYa39lTGmcoeni4FtrR2jrq6xLUXuUklJMbW12zt0jFxTaGPOhvEmEvDgg35mzgzS0OAweHCcqqow\nffu61NWl/v2yYcydTWPe89fuym7PeRtj9gP+CIy31i5u2f0/xpghLdvnAivbVZVIFlm3zsP55xcx\ncWIInw/mz29i6dIm+vbVum3JTq3NvCcBPYDJxpjJLftuBRYYYwLAWv55Tlwk50SjsGBBgHnzAkSj\nDhdcEGPWrAj77afQluy22/C21t5KMqz/3enpKUek86xenWy2WbvWyze+kaCiIsy558YzXZZIm+gS\njBSchgaYPTvIffclm21+fO5mJv/cy177d810aSJtptugSUF57jkvp5/elYULAxxycDN/6TOMh549\ngIMvPz3ZQimSIxTeUhA+/xxuvjnElVcWsXmzwy23RFg5bxVDNz8KgG/9Onx2bYarFGk7nTaRvOa6\n8NRTPiZNCrJli4f+/ZupqQlz7LEJqDfEj+iHb/064kf0I26OynS5Im2m8Ja89dFHDuPHh1i+3Eco\n5DJlSpgbb4z9s9mmWzfqlj+Pz65NBne3bhmtV2RPKLwl7yQSsGSJnxkzgtTXO5x6avLONoceupPl\nf926ER9wQucXKdJBCm/JK+vXeygtDfLKKz722sulujrMD38Y051tJO8ovCUvxGJw110BqqqSzTbn\nnRdj9mw120j+UnhLznv9dQ+jRoV45x0v++6bYPbsMN/7npptJL8pvCVnNTRAZWWQhQv9JBIOw4ZF\n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\n", |
|
|
"text/plain": [ |
|
|
"<matplotlib.figure.Figure at 0x118d2e518>" |
|
|
] |
|
|
}, |
|
|
"metadata": {}, |
|
|
"output_type": "display_data" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"yr = np.polyval(reg, x)\n", |
|
|
"plt.plot(x, y, 'r.')\n", |
|
|
"plt.plot(x, yr, 'b')" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 7, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"0.33264115729215088" |
|
|
] |
|
|
}, |
|
|
"execution_count": 7, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"((y - yr) ** 2).mean()" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"### Network Training — Single Step" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 8, |
|
|
"metadata": { |
|
|
"collapsed": true |
|
|
}, |
|
|
"outputs": [], |
|
|
"source": [ |
|
|
"l0 = np.array((x, len(x) * [1])).T" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 9, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([[ 0. , 1. ],\n", |
|
|
" [ 2.5, 1. ],\n", |
|
|
" [ 5. , 1. ],\n", |
|
|
" [ 7.5, 1. ],\n", |
|
|
" [ 10. , 1. ]])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 9, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"l0" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 10, |
|
|
"metadata": { |
|
|
"collapsed": true |
|
|
}, |
|
|
"outputs": [], |
|
|
"source": [ |
|
|
"weights = np.array(((2., 2.)))" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 11, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([ 2., 7., 12., 17., 22.])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 11, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"l1 = np.dot(l0, weights)\n", |
|
|
"l1" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 12, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([ 3.7550671 , 10.19476625, 18.8091978 , 27.45154775, 35.71997609])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 12, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"y" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 13, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([ 1.7550671 , 3.19476625, 6.8091978 , 10.45154775, 13.71997609])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 13, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"d = y - l1\n", |
|
|
"d" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 14, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"71.424912179632841" |
|
|
] |
|
|
}, |
|
|
"execution_count": 14, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"(d ** 2).mean() # MSE" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 15, |
|
|
"metadata": { |
|
|
"collapsed": true |
|
|
}, |
|
|
"outputs": [], |
|
|
"source": [ |
|
|
"alpha = 0.01 # learning rate" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 16, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([ 2.57619274, 0.35930555])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 16, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"update = alpha * np.dot(d, l0)\n", |
|
|
"update" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 17, |
|
|
"metadata": {}, |
|
|
"outputs": [], |
|
|
"source": [ |
|
|
"weights += update # updating weights" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 18, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([ 4.57619274, 2.35930555])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 18, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"weights" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 19, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"59.054474469073625" |
|
|
] |
|
|
}, |
|
|
"execution_count": 19, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"l1 = np.dot(l0, weights)\n", |
|
|
"d = y - l1\n", |
|
|
"(d ** 2).mean() # new MSE" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"### Network Training — Multi Step" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 20, |
|
|
"metadata": { |
|
|
"collapsed": true |
|
|
}, |
|
|
"outputs": [], |
|
|
"source": [ |
|
|
"weights = np.array(((1., 100.)))" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 21, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"name": "stdout", |
|
|
"output_type": "stream", |
|
|
"text": [ |
|
|
"MSE after 0 iterations: 7427.49\n", |
|
|
"MSE after 5 iterations: 4264.45\n", |
|
|
"MSE after 10 iterations: 2835.80\n", |
|
|
"MSE after 15 iterations: 2105.21\n", |
|
|
"MSE after 20 iterations: 1670.17\n" |
|
|
] |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"for _ in range(25):\n", |
|
|
" # layer 1\n", |
|
|
" l1 = np.dot(l0, weights)\n", |
|
|
"\n", |
|
|
" # deltas of layer 1\n", |
|
|
" d = y - l1\n", |
|
|
" \n", |
|
|
" # print MSE\n", |
|
|
" if _ % 5 == 0:\n", |
|
|
" print('MSE after %4d iterations: %6.2f' % (_, (d ** 2).mean()))\n", |
|
|
"\n", |
|
|
" # update weights based on deltas\n", |
|
|
" weights += alpha * np.dot(d, l0)" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 22, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"[<matplotlib.lines.Line2D at 0x118ee5f28>]" |
|
|
] |
|
|
}, |
|
|
"execution_count": 22, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
}, |
|
|
{ |
|
|
"data": { |
|
|
"image/png": "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\nEAno/wMWE91GkIqUywAAAABJRU5ErkJggg==\n", |
|
|
"text/plain": [ |
|
|
"<matplotlib.figure.Figure at 0x118e92898>" |
|
|
] |
|
|
}, |
|
|
"metadata": {}, |
|
|
"output_type": "display_data" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"yr = np.polyval(reg, x)\n", |
|
|
"plt.plot(x, y, 'r.')\n", |
|
|
"plt.plot(x, yr, 'b')\n", |
|
|
"plt.plot(x, l1, 'm--')" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"## Neural Network for Classification" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"https://iamtrask.github.io/2015/07/12/basic-python-network/" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"### Sigmoid Function" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"https://en.wikipedia.org/wiki/Sigmoid_function" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 23, |
|
|
"metadata": { |
|
|
"collapsed": true |
|
|
}, |
|
|
"outputs": [], |
|
|
"source": [ |
|
|
"# sigmoid function\n", |
|
|
"def sigmoid(x, deriv=False):\n", |
|
|
" if deriv == True:\n", |
|
|
" return x * (1 - x)\n", |
|
|
" return 1 / (1 + np.exp(-x))" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 24, |
|
|
"metadata": { |
|
|
"collapsed": true |
|
|
}, |
|
|
"outputs": [], |
|
|
"source": [ |
|
|
"x = np.linspace(-10, 10)\n", |
|
|
"y = sigmoid(x)\n", |
|
|
"d = sigmoid(x, deriv=True)" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 25, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"image/png": "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\nKREROZVwBK3iwP48ywHDMLymafpPsC0dKBGGMfNlxAgfzz4LkGB3KTaL3hMvuVwWMTHg84Wm30L3\nkJgIMTHBo8sxMaGwExd35P7Y4/j4P29LSrJITLSoXDmBQOAQiYkWiYmhcBUfD65zzWwiIiInEY6g\ndQBIyrPsPhyyTrQtCdh3ujcsVSoBrzdyX7Xq2xcSEkJ7Uo53ov9sz+Y/4DN9/ZF1ebed6PHp7o9f\nd7Lbiba73Sd+7pH1ee+P3E627PGEbqd77PWe/hZ6jStPj5FIQMUi8J6FR0pK0umfVESpd+dycv9O\n7h3s7T8cQWsh0BEYd/gYrVV5tq0BahqGkQwcJDRtOOR0b7h3b0YYyjo5nw/6908iLS09ouNEs5SU\n6Ok/GAxNCebkFMx40dS7HZzcv3p3Zu/g7P6d3DsUTP+nCnLhCFqTgDaGYSwitOvhTsMwegOJpmmO\nMAzjUWA24Cb0rcOtYRhTREREJOrlO2iZphkE+h23OjXP9mnAtPyOIyIiIlLY6IvnIiIiIhGioCUi\nIiISIQpaIiIiIhGioCUiIiISIQpaIiIiIhHisvJ7jRkREREROSHt0RIRERGJEAUtERERkQhR0BIR\nERGJEAUtERERkQhR0BIRERGJEAUtERERkQhR0BIRERGJEAUtERERkQhR0BIRERGJEAUtERERkQhR\n0BIRERGJEAUtERERkQhR0BIRERGJEAUtERERkQhR0BIRERGJEAUtERERkQhR0BIRERGJEAUtERER\nkQhR0BIRERGJEAUtERERkQhR0BIRERGJEAUtERERkQhR0BIRERGJEAUtERERkQhR0BIRERGJEAUt\nERERkQhR0BIRERGJEAUtERERkQhR0BIRERGJEAUtERERkQhR0BIRERGJEAUtERERkQhR0BIRERGJ\nEAUtERERkQhR0BIRERGJEAUtERERkQhR0BIRERGJEAUtERERkQjx2l3AiaSlpVuRHqNUqQT27s2I\n9DBRy8n9O7l3cHb/6t2ZvYOz+3dy71Aw/aekJLlOts2xe7S8Xo/dJdjKyf07uXdwdv/q3bmc3L+T\newf7+3ds0BIRERGJNAUtERERkQhR0BIRERGJEAUtERERkQgpkG8dGobhBt4C6gHZQB/TNNcWxNgi\nIiIidimoPVpdgDjTNBsDA4ChBTSuiIiIiG0K6jxazYBZAKZpLjYMo2EBjSsiDpUdyGZ/9n72Z+87\n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\nD2s04O7N06jmAAAAAElFTkSuQmCC\n", |
|
|
"text/plain": [ |
|
|
"<matplotlib.figure.Figure at 0x118fcab38>" |
|
|
] |
|
|
}, |
|
|
"metadata": {}, |
|
|
"output_type": "display_data" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"fig, ax = plt.subplots(2, sharex=True, figsize=(10, 8))\n", |
|
|
"ax[0].plot(x, y, 'b')\n", |
|
|
"ax[1].plot(x, d, 'g');" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"### The Data" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 26, |
|
|
"metadata": { |
|
|
"collapsed": true |
|
|
}, |
|
|
"outputs": [], |
|
|
"source": [ |
|
|
"# input dataset (features)\n", |
|
|
"# layer 0\n", |
|
|
"l0 = np.array([[0, 0, 1],\n", |
|
|
" [0, 1, 1],\n", |
|
|
" [1, 0, 1],\n", |
|
|
" [1, 1, 1] ])" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 27, |
|
|
"metadata": { |
|
|
"collapsed": true |
|
|
}, |
|
|
"outputs": [], |
|
|
"source": [ |
|
|
"# output dataset (labels) \n", |
|
|
"y = np.array([[0,\n", |
|
|
" 0,\n", |
|
|
" 1,\n", |
|
|
" 1]]).T" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"### Single Step" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 28, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([[-0.16595599],\n", |
|
|
" [ 0.44064899],\n", |
|
|
" [-0.99977125]])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 28, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"# initialize weights randomly with mean 0\n", |
|
|
"np.random.seed(1)\n", |
|
|
"weights = 2 * np.random.random((3, 1)) - 1\n", |
|
|
"weights" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 29, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([[-0.99977125],\n", |
|
|
" [-0.55912226],\n", |
|
|
" [-1.16572724],\n", |
|
|
" [-0.72507825]])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 29, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"np.dot(l0, weights)" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 30, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([[ 0.2689864 ],\n", |
|
|
" [ 0.36375058],\n", |
|
|
" [ 0.23762817],\n", |
|
|
" [ 0.3262757 ]])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 30, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"l1 = sigmoid(np.dot(l0, weights))\n", |
|
|
"l1" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 31, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([[-0.2689864 ],\n", |
|
|
" [-0.36375058],\n", |
|
|
" [ 0.76237183],\n", |
|
|
" [ 0.6737243 ]])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 31, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"e = y - l1\n", |
|
|
"e" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 32, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"0.30994584990928159" |
|
|
] |
|
|
}, |
|
|
"execution_count": 32, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"(e ** 2).mean()" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 33, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([[ 0.19663272],\n", |
|
|
" [ 0.23143609],\n", |
|
|
" [ 0.18116102],\n", |
|
|
" [ 0.21981987]])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 33, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"sigmoid(l1, True)" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 34, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([[-0.05289153],\n", |
|
|
" [-0.08418501],\n", |
|
|
" [ 0.13811206],\n", |
|
|
" [ 0.14809799]])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 34, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"d = e * sigmoid(l1, True)\n", |
|
|
"d" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 35, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([[ 0.28621005],\n", |
|
|
" [ 0.06391297],\n", |
|
|
" [ 0.14913351]])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 35, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"u = np.dot(l0.T, d)\n", |
|
|
"u" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 36, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([[ 0.12025406],\n", |
|
|
" [ 0.50456196],\n", |
|
|
" [-0.85063774]])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 36, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"weights += u\n", |
|
|
"weights" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 37, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"0.25652643745572179" |
|
|
] |
|
|
}, |
|
|
"execution_count": 37, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"l1 = sigmoid(np.dot(l0, weights))\n", |
|
|
"e = y - l1\n", |
|
|
"(e ** 2).mean()" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"### Multiple Steps" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 38, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"data": { |
|
|
"text/plain": [ |
|
|
"array([[-0.16595599],\n", |
|
|
" [ 0.44064899],\n", |
|
|
" [-0.99977125]])" |
|
|
] |
|
|
}, |
|
|
"execution_count": 38, |
|
|
"metadata": {}, |
|
|
"output_type": "execute_result" |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"# initialize weights randomly with mean 0\n", |
|
|
"np.random.seed(1)\n", |
|
|
"weights = 2 * np.random.random((3, 1)) - 1\n", |
|
|
"weights" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "code", |
|
|
"execution_count": 39, |
|
|
"metadata": {}, |
|
|
"outputs": [ |
|
|
{ |
|
|
"name": "stdout", |
|
|
"output_type": "stream", |
|
|
"text": [ |
|
|
"\n", |
|
|
"after 0 iterations\n", |
|
|
"layer 1: [[ 0.2689864 0.36375058 0.23762817 0.3262757 ]]\n", |
|
|
"errors: [[-0.2689864 -0.36375058 0.76237183 0.6737243 ]]\n", |
|
|
"MSE: 0.309945849909\n", |
|
|
"\n", |
|
|
"after 200 iterations\n", |
|
|
"layer 1: [[ 0.07532702 0.06151182 0.95022027 0.93886839]]\n", |
|
|
"errors: [[-0.07532702 -0.06151182 0.04977973 0.06113161]]\n", |
|
|
"MSE: 0.00391823955246\n", |
|
|
"\n", |
|
|
"after 400 iterations\n", |
|
|
"layer 1: [[ 0.05175173 0.04198947 0.96596069 0.9579657 ]]\n", |
|
|
"errors: [[-0.05175173 -0.04198947 0.03403931 0.0420343 ]]\n", |
|
|
"MSE: 0.00184172847165\n", |
|
|
"\n", |
|
|
"after 600 iterations\n", |
|
|
"layer 1: [[ 0.0416479 0.03375824 0.97260506 0.96615046]]\n", |
|
|
"errors: [[-0.0416479 -0.03375824 0.02739494 0.03384954]]\n", |
|
|
"MSE: 0.00119261002357\n", |
|
|
"\n", |
|
|
"after 800 iterations\n", |
|
|
"layer 1: [[ 0.03574306 0.02896968 0.97647479 0.97093628]]\n", |
|
|
"errors: [[-0.03574306 -0.02896968 0.02352521 0.02906372]]\n", |
|
|
"MSE: 0.000878735940664\n" |
|
|
] |
|
|
} |
|
|
], |
|
|
"source": [ |
|
|
"for _ in range(1000):\n", |
|
|
" # forward propagation\n", |
|
|
" # layer 1\n", |
|
|
" l1 = sigmoid(np.dot(l0, weights))\n", |
|
|
"\n", |
|
|
" # errors of layer 1\n", |
|
|
" e = y - l1\n", |
|
|
" if _ % 200 == 0:\n", |
|
|
" print('\\nafter %d iterations' % _)\n", |
|
|
" print('layer 1:', l1.T)\n", |
|
|
" print('errors: ', e.T)\n", |
|
|
" print('MSE: ', (e ** 2).mean())\n", |
|
|
"\n", |
|
|
" # multiply errors by the slope of the \n", |
|
|
" # sigmoid at the values in l1\n", |
|
|
" d = e * sigmoid(l1, True)\n", |
|
|
"\n", |
|
|
" # update weights\n", |
|
|
" weights += np.dot(l0.T, d)" |
|
|
] |
|
|
}, |
|
|
{ |
|
|
"cell_type": "markdown", |
|
|
"metadata": {}, |
|
|
"source": [ |
|
|
"<img src=\"http://hilpisch.com/tpq_logo.png\" width=350px align=\"right\">" |
|
|
] |
|
|
} |
|
|
], |
|
|
"metadata": { |
|
|
"kernelspec": { |
|
|
"display_name": "Python 3", |
|
|
"language": "python", |
|
|
"name": "python3" |
|
|
}, |
|
|
"language_info": { |
|
|
"codemirror_mode": { |
|
|
"name": "ipython", |
|
|
"version": 3 |
|
|
}, |
|
|
"file_extension": ".py", |
|
|
"mimetype": "text/x-python", |
|
|
"name": "python", |
|
|
"nbconvert_exporter": "python", |
|
|
"pygments_lexer": "ipython3", |
|
|
"version": "3.6.1" |
|
|
} |
|
|
}, |
|
|
"nbformat": 4, |
|
|
"nbformat_minor": 2 |
|
|
} |