{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "オリジナルの作成: 2011/06/05" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\tHiroshi TAKEMOTO\n", "\t(take.pwave@gmail.com)\n", "\t\n", "\t

第5章-多層パーセプトロン関数近似をSageで試す

\n", "\t

\n", "\t\tPRMLの5章多層パーセプトロンを使った関数近似の例題、図5.3(PRMLから引用)をSageを使って試してみます。\n", "\n", "\t\t\n", "\t\t\t\n", "\t\t\t\t\n", "\t\t\t\t\n", "\t\t\t\n", "\t\t\t\n", "\t\t\t\t\n", "\t\t\t\t\n", "\t\t\t\n", "\t\t
\n", "\t\t\t\t\n", "\t

\t\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

計算条件

\n", "\t

\n", "\t\t関数近似に使用するニューラルネットワーク(多層パーセプトロン)は、\n", "\t\t

\n", "\t\tとしました。\n", "\t

\n", "\t

\n", "\t\t重みwの更新には、逐次的勾配降下法を使用し、学習回数は2000、学習率(η)を0.1としました。\n", "\t\t逐次的勾配降下法による学習は、収束が遅く、学習率の値はデータに依存します。\n", "\t\tまた、重みwの初期値が結果に強く影響を与えることも分かりました。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# ニューラルネットワーク(逐次勾配降下法による学習)\n", "# PRML fig. 5.3を再現\n", "# \n", "from pylab import linspace\n", "# 定数をセット\n", "N = 50\n", "M = 4\n", "LEARN_COUNT=2000\n", "eta = 0.1\n", "# 学習回数" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# 入力1点、隠れ層3個、出力1点\n", "N_in = 1 \n", "N_h = M \n", "N_out = 1\n", "# 隠れ層の活性化関数\n", "h_1(x) = tanh(x)\n", "# 出力層の活性化関数\n", "h_2(x) = x\n", "# 隠れ層の活性化関数の微分\n", "dif_h_1(x) = diff(h_1, x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

ニューラルネットワーク

\n", "\t

\n", "\t\tニューラルネットワークでは、\n", "\t\t

\n", "\t\tを繰り返しながら重みwを更新し、関数を近似します。\n", "\t

\n", "\t

\n", "\t\tフィードフォワード処理では、隠れ層の活性$a_j$は\n", "$$\n", "\t\ta_j = \\sum_{i=1}^{D} w_{ji}^{(1)} + w_{j0}^{(1)}\n", "$$\t\n", "\t\tで計算され、活性化関数h{.}で変換され\n", "$$\n", "\t\tz_j = h_1(a_j)\n", "$$\n", "\t\tとなります。\t\n", "\t\t同様に、出力ユニットの活性は、\n", "$$\n", "\t\ta_k = \\sum_{j=1}^{M} w_{kj}^{(2)} + w_{k0}^{(2)}\n", "$$\n", "\t\tとなり、出力ユニット活性化関数h2{.}で変換さ\n", "$$\n", "\t\ty_k = h_2(a_k)\n", "$$\n", "\t\tとなります。\n", "\t

\n", "\t

\n", "\t\t入力パターンnに対する誤差を、式(5.44)\n", "$$\n", "\t\tE_n = \\frac{1}{2} \\sum_{k} (y_nk - t_nk)^2\n", "$$\n", "\t\tを最小にするように重みwの偏微分は、式(5.50)\n", "$$\n", "\t\t\\frac{\\partial E_n}{\\partial w_{ji}} = \\frac{\\partial E_n}{\\partial a_j} \\frac{\\partial a_j}{\\partial w_{ji}}\n", "$$\n", "\t\tは、誤差$\\delta$を使って式(5.51)\n", "$$\n", "\t\t\\delta_j \\equiv \\frac{\\partial E_n}{\\partial a_j}\n", "$$\n", "\t\tとすると、式(5.53)の変数をzからxに変更して、\n", "$$\n", "\t\t\\frac{\\partial E_n}{\\partial w_{ji}} = \\delta_j x_i\n", "$$\t\n", "\t\t出力ユニットの誤差、式(5.54)\n", "$$\n", "\t\t\\delta_k = y_k - t_k\n", "$$\t\n", "\t\tから、式(5.55)\n", "$$\n", "\t\t\\delta_j \\equiv \\frac{\\partial E_n}{\\partial a_j} = \\sum_{k} \\frac{\\partial E_n}{\\partial a_k} \\frac{\\partial a_k}{\\partial a_j}\n", "$$\n", "\t\tとなり、式(5.56)\n", "$$\n", "\t\t\\delta_j = h_1' (a_j) \\sum_{k} w_{kj} \\delta_k\n", "$$\n", "\t\tという逆伝搬(バックプロパゲート処理)で求められます。\n", "\t

\n", "\t

\n", "\t\t重みの更新は、\n", "$$\n", "\t\tw^{(\\tau+1)} = w^{(\\tau)} - \\eta \\nabla E_n(w^{(\\tau)})\n", "$$\n", "\t\tとなります。\n", "\t

\n", "\t

\n", "\t\tsageのベクトル計算を使うことで、フィードフォワード処理、バックプロパゲート処理がほぼ上記の式の通りに\n", "\t\t記述することができます。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# 逐次勾配降下法を使ったニューラルネットワークの定義\n", "def _learn_sg(X, T, w_1, w_2, N_in, N_h, N_out, LEARN_COUNT):\n", " # 作業用ベクトルの定義\n", " x_i = vector(RDF, N_in+1); y_k = vector(RDF, N_out)\n", " z_j = vector(RDF, N_h); z_j[0] = 1\n", " d_j = vector(RDF, N_h); d_k = vector(RDF, N_out) \n", " \n", " # 指定回数学習する\n", " for m in range(LEARN_COUNT):\n", " for n in range(len(X)):\n", " # 変数のセット\n", " x_i = vector(RDF, flatten([1, X[n]]))\n", " t = vector(RDF, flatten([T[n]]))\n", " # フィードフォワード処理\n", " for j in range(1, N_h): \n", " z_j[j] = h_1(w_1.row(j)*x_i).n()\n", " for k in range(N_out):\n", " y_k[k] = h_2(w_2.row(k)*z_j).n()\n", " # バックプロパゲート処理\n", " d_k = y_k - t\n", " for j in range(N_h):\n", " d_j[j] = dif_h_1(z_j[j])*w_2.column(j)*d_k\n", " # 重みの更新\n", " for j in range(N_h):\n", " w_1.set_row(j, w_1[j] - eta*d_j[j]*x_i)\n", " for k in range(N_out):\n", " w_2.set_row(k, w_2[k] - eta*d_k[k]*z_j)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

関数定義

\n", "\t

\n", "\t\t出力関数は、フィードフォワード処理で指定されたxの値を計算します。\n", "\t

\n", "\t

\n", "\t\tプロット関数では、重み$w^{(1)}$をw_1、$w^{(2)}$をw_2を初期化(-1から1の一様分布)\n", "\t\tし、与えられた観測データにフィットする重みを計算し、その結果をプロットします。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# 出力関数の定義\n", "def _f(x, w_1, w_2, N_in, N_h, N_out):\n", " x_i = vector(RDF, flatten([1, x]))\n", " z_j = vector(RDF, N_h); z_j[0] = 1\n", " y_k = vector(RDF, N_out)\n", " # 隠れ層の値を計算\n", " for j in range(1, N_h):\n", " z_j[j] = h_1(w_1.row(j)*x_i).n()\n", " # 出力層の計算\n", " for k in range(N_out):\n", " y_k[k] = h_2(w_2.row(k)*z_j)\n", " return y_k[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\t

計算結果

\n", "\t

\n", "\t\t以下の関数\n", "\t\t

\n", "\t\tを近似した結果を以下に示します。\n", "\t

\n", "\t

\n", "\t\tニューラルネットワークのような単純なアルゴリズムでも良く近似できるものだと関心しました。\n", "\t

\n", "" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def _plot_nn(X, T, N_in, N_h, N_out, COUNT):\n", " # 重みの初期化(バイアス項を含む)\n", " w_1 = matrix(RDF, [[(random()-0.5)*2 for i in range(N_in+1)] for j in range(N_h)])\n", " w_2 = matrix(RDF, [[(random()-0.5)*2 for j in range(N_h)] for k in range(N_out)])\n", " # 学習\n", " _learn_sg(X, T, w_1, w_2, N_in, N_h, N_out, COUNT)\n", " # トレーニングデータのプロット\n", " data_plt = list_plot(zip(X, T))\n", " # 結果のプロット\n", " var('x')\n", " f_plt = plot(lambda x : _f(x, w_1, w_2, N_in, N_h, N_out), [x, -1, 1], color='red')\n", " (data_plt + f_plt).show(figsize=4)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\niSgpKWm/wo4cqQ64TpsGPPCAmjivPbuBTCbglVfUnBGhoe33PNQiRqMRVVVVLfrMDh48GGvXrsWm\nTZvwwQcfwGKxYNy4cfaZoIxapUXh/+GHH8LPzw9+fn7o3r07du/era5n+8orany4TqdOynLUZQ5d\nwPWvYUVFRb3riUij/XqxsbG47777cMstt2DKlCnYvHkzfvzxR/y9vVvkfn7qNOI331S/9saPV9Np\ntofnnwdKSoDExPbZ/3/Ex8dDr9dz/vk2auwzGx0djdmzZ2PEiBG4/fbbsX79egQFBWHNmjUdXEqq\n1qKUnjFjBqKjo2v+Dg0NVf/5gbpzGlO9rn8Ny8rKICIoLCy0aUkVFRUhKiqq2fv19/fHoEGDmhwl\nZBc6nbpU5NixaojuqFHAW2+pLj97+f579SsyKUkNGGhHqampHOrZAoGBgfD09ERhYaHN40VFRXV+\nDTTEy8sLUVFRHfN5pXq1qOXftWtX9O/fv+bW+borX9nlCLSbu/41HDZsGHr37o309PSadcxmM775\n5huMGzeu2fstLi5GXl4eQkJC2qPY9YuKUqOBqi8g/8ADamhoW5WXq4vtDBjAvn4n5O3tjdGjR9t8\nZkUE6enpzf7MWiwWHD16tGM/r2SrrUedL126JAcPHpR//etfotPpJC0tTQ4ePCgFBQVt3bVmLF++\nXAICAmTTpk1y+PBhmTFjhtx0001SXl5es85//dd/SXJycs3fv/vd72Tnzp1y8uRJ2b17t8TExEiv\nXr3EaDQ6ogoiqakiAQEiwcEimza1fj8Wi8j8+SKdOokcOGC/8tWDo31aLy0tTbp06SLvvfeeHDt2\nTH79619LQECAFBUViYjIgw8+KE899VTN+s8//7xs27ZNTpw4IQcOHJD4+Hjx9fWVY8eOOaoKLqe4\nuFgOHjwomZmZotPpZOXKlXLw4EE5ffp0q/bX5vBft26d6HQ68fDwsLklJSW1ddea8txzz0lISIj4\n+PjInXfeKTm1r4wiIhERETavaXx8vISGhkqXLl0kLCxMDAaDnDhxoqOLbev8eZFp09QQX71eJCur\nZdtbLCJLl6rt33mnfcpYC8O/bZKTk+XGG2+ULl26SHR0tOzfv79m2aRJk2TevHk1fz/++OPSr18/\n6dKli4SEhMj06dPl0KFDjii2y9qxY0e9WVv7dW4J55rVk1yfiBoG+uSTwLlzajTYU08BTf28Ly1V\nJ5H97W9qPuYnn2z3onJ6B9Iy55jVk9yHTqf6/rOy1MUe1q1TFxi49151Ka7SUtv1L10C3n5bTd6/\nfr0K/w4IfiKtY8uf2tfly8AHH6jRQEeOqKup9O8P9OihrhN5/Lj6tTBzpprZdfDgDisaW/6kZQx/\n6hgi6tfAv/+tAt9sBrp2VSeOTZnS7sM568PwJy3j2VjUMXQ6YOhQdSMih2OfPxGRBjH8SfM4vQNp\nEfv8SbPY509axpY/EZEGseVPmiUiuHLlCvz8/DgvFWkOw5+ISIPY7UNEpEEMfyIiDWL4ExFpEMOf\niEiDGP5ERBrE8Cci0iCGPxGRBv0/DsP08cxnSZsAAAAASUVORK5CYII=\n", "text/plain": [ "Graphics object consisting of 2 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# トレーニングデータ\n", "# 1番目は、heavisizeのステップ関数\n", "X = linspace(-1, 1, N)\n", "T = [heaviside(float(x)) for x in X]\n", "# 計算とプロット\n", "_plot_nn(X, T, N_in, N_h, N_out, LEARN_COUNT)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nDFoAAAAASUVORK5CYII=\n", "text/plain": [ "Graphics object consisting of 2 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 2番目は、絶対値\n", "X = linspace(-1, 1, N)\n", "T = [abs(x) for x in X]\n", "# 計算とプロット\n", "_plot_nn(X, T, N_in, N_h, N_out, LEARN_COUNT)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEcCAYAAAAvJLSTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3Xd4FOX6xvHvbkInREoIEHoTkR5KpEOAgEpQsSSIIMeC\nYkMUrDQpCnIApQioVGkqUqwgoUgJUkSlCNIMEEgglASCQMr8/pifHFEIJZud3Z37c125jpudnb13\n2fPsm2feecdhGIaBiIjYitPqACIi4n4q/iIiNqTiLyJiQyr+IiI2pOIvImJDKv4iIjak4i8iYkMq\n/iIiNqTiLyJiQyr+YluGYZCSkoJOchc7UvEXn7FmzRoiIyMJCQnB6XSyZMmSLLc/c+YMgYGBnDlz\nxk0JRTyHir/4jNTUVOrUqcOECRNwOBxWxxHxaP5WBxBxlfbt29O+fXsAtXJErkEjfxHxGqmp8OGH\n8PHHcP785ff98gu0bAkNGsDChf9+bGYm/PmnW2J6BY38RcQrpKVBZItkzmzZza3s5uLwRJ568CSO\nUycxUs+xe4GTR/70Ix1/9t1/Cyf6FqNozVJQuTJrEqrQqUcRTp2CRx6B6dPBafOhr4q/2F6VKlVw\nOByEhIQQEhICQHR0NNHR0RYns6cPPoCRIyEo4DwzntnIbUlrYO1a2PwzMUkJl7Y7vT+Q9NlFyFW8\nCBl58lPqz0z8yMCfdApnniJw3HE4lwJAM2AbpdhAGBtmhbH21jCa9wuDXLkA8y+C48chJAT8/Kx4\n1e7n0MVcxBc5nU4WLVpEZGTkVbdJSUkhMDCQ5ORkChUq5MZ0cjXbVp9kVMuvuJcviGAp+TgPhQpB\nkyacrVafZ8ZVY1t6NX6nKkb+ghw5AoGB5mPbtIGYGPO/y5Y120C3OFNg716ebLWHCik/E8YGGrKR\nApwzH9i+PXtv60i7sXdy4HRhGjSA5cvNp/R5hogPcjgcxuLFi7PcJjk52QCM5ORkN6WSv5w/bxib\nNxvG4cOGYaSlGcbixYZx551GhtPPMMBYS2PjJd416jq2Gmnn0y89bsECw6hc2TCqVjWMb765fJ/n\nzhnG6NGGMWSIYcTHX37fe+8ZhsNhGGAYtW9PM86s3GQYgwYZRmioYYDxJ3mMuTxktGWpMWJ4umEH\nGvmLz0hNTWXv3r0YhkG9evUYPXo0rVq1okiRIpQpU+Zf22vkb40zZ8wDs/E/JfC0cwp9C39I/hOH\noX59zj3Ug9bv38OPh0oB0LUrzJrlmufdtg0SEqBxYyhQ4H+/jwyNp8pP8/gPU7mdnSQHliHwlaeh\nZ08oUgTDgORkuOUW1+TwGBZ/+Yi4zKpVqwyHw2E4nc7Lfnr06HHF7TXyt8Ynw/4wxvGM8Sd5jLPk\nN+YFPG4YmzZduv/YMcOYMMEwZs82jIyMnM/z/feGkT+/YUCm8UDZDca5Lv8xjDx5DCN/fiPlsd5G\n40oJBhhGzZqGcfRozudxF438xbY08nezY8dg8GAyJ0/hZEYgY+nNBJ6hRLXC/Pab9dEOHYLq1SFf\nvv//xYQJnHt7LEZaOuN5lnfpS/SzxRg3ztqsrqLiL7al4p+zfvsNVq2CWlX+pMmmsfD22+B0kt7v\nde5Z1ouvVxckIAAWLIC2ba1Oe2WP3XeKCgv/ywu8h4GDb+sP4KH1L1yaJeTNVPzFtlT8c87mzdC8\nmUHE+UW8xwuE+CXg92wv6N8fihbFMODIEbOP/vf+u6fZuNH8YsqVksSwPEN4Mm08jmrVYPx4aNXK\n6njZYvPTHEQkJ3w75RDzz0eykPvYRk0eqbcTxo6FokUBcDjMOfWeXPgBGjaE3bvhsxXFuPfgezh+\n+gkKF4bWrcl8KJo+D8VTsiS0a2d2iryJir+IuI5hwKxZ9J1Vk3r8xH0s4G6+gsqVrU5200qUMAf5\nxYsDtWvDmjUwYwZ/frOCgZ9Wp03CLL7/3uDFF61OemNU/EXENY4fh86doVs3cneOZFj0DtYH30d4\nuIMxY6wO50IOB3TrxtvddrGYTsyiGwvoTMq+41YnuyHq+YttqeeffQsXwoYNcF/BZTQa/whkZMDk\nyeaXgI/bvBmaNYM7zy9gMj0pUMiPfHOmwl13WR3tumjkLyI3Zdo06HxfJnlGvkWDAe05Wqoe7Nhh\ni8IPUL+++QUQPqEzvy/YTr5mDeDuu+H11yE93ep416SRv9jWXyP/Dh064O/vr8XcblC3u04Q/U1X\nIljKQAYT9/AbzPzExuNJw4B33zWLf7NmfNd9Lh9/XYKyZWHwYChY0OqAl1PxF9tS2ycbtmzhdOv7\nSE9JpQtz+J52DB8Or71mdTAPsHo1FztHkXTCQRTzWENz7r8fPvvM6mCXs/HXtIjclIULoVkzClUN\nZtyjP5HcsB0vvQR9+1odzEO0aMHM3lvZza3EEM4TTCE21upQ/6aRv9iWRv43yDBgzBh4+WWzrz9z\n5v+vhSD/tHEjNLsjnf9m9uZZJvD1rS9y1453PepiAbqYi4hcVXo6jB4Nv+9M543E56nw3Qfw6qsw\nbJguhZWFhg1h0Vf+zJ49nrLHqtEx5gXo9DvMnQsBAVbHAzTyFxvTyP/a+vSByWNS+YwHaMcyfn9x\nEtVHP251LO/z3Xfw0ENQsaL538HBVidSz19Erm5zTDJLiaA5P9CBb5lbQIX/prRvb16KMjERmjbl\nxOYDTJxo/iGQmWlNJBV/Ebmy48eZdaQ1t7ODcGJYTlsaNLA6lBerWRPWrSMjwyA9rAkfPLONLl3g\n0UetiaPiLyL/Fh8PzZtT1nmYad1XE9yxER99BFlcElmuR4UKLB+0jiMZwfxAcxqzjtmzrTknTAd8\nReRyf/wBrVtDejqONWvoU7UqfazO5EOCawXTklUsJpLvactThT/H3/9Ot+fQyF9E/ufgQXMJS4fD\nXL2yalWrE/mcOnVg+IRAnizzHT8Wasv05Hvgyy/dnkOzfcS2NNvHdPw49OsHFw/EM3lXCwrmy4DV\nq6FsWauj+b60NHMW0FdfmZc069jRbU+t4i+2pbV9TOHhsHPFUVbRkrycJ3nxampFlrc6ln1Y9AWg\n4i+2pZG/qcotx1mc3IJCpNCC1bz+USUee8zqVDbzjy+An8t0xOmEWrVy7inV8xexs7Nn+dZ5F0U5\nQWtWcCRvJZo0sTqUDeXKBfPnw913k35PZ/rX/ZLateG553LuKTXyF9uy/cj/4kW4+26MDRv4qOtq\ntlKXbt0gLMzqYPa1a1saO2s9xF18zV18TQxtOHgQypRx/XNpqqeIHWVmQvfusHo1ju++44lWda1O\nJECegrmIYh5LiGQR9xDOCnLnbpgjz6W2j4jdGAb07m22GebMMad2ikeoUAFeH5ibzizgV2qxKn8H\ngk/szJHnUttHbMu2bZ9hw+DNN2HSJOjZ0+o0cgWnToEz+RSBkS3g5ElYtw7KlXPpc2jkL2IDq1aZ\n52v1KjzXLPyDBqnwe7DChSGwfGFYuhTy5IG2bc1F4VxII3+xLbuM/DMyoFgxuPX0BlbRkk95kAY7\nZnBbdYfV0eR67N8PTZpAiRLmt3hgoEt2q5G/iI/7808odDqOxXRiM/V5gg9JSFTh9xoVK8KyZeaa\nS5GRnDxyniNHsr9bFX8RH1fQOMMPgR1JpQD3spCqNfLQqJHVqeSG1KwJX39NeuxGVoQ8QumQzGx3\n7VT8RXxZRgZER1PWiGP3u18y4uMg1q2D/PmtDiY36kJoYx7MmMe9fMFo+jBlisGPP978/jTPX8SX\n9e0L336L4+uv6dD+dqvTSDZkZsJiOvEc46jLVhwYpKXdfPtOxV9sLyoqyjcXdvvwQxgzBt5/37yM\noHi1fPlgyBB4441egEHnzo5sLcWh2T5iWz4922f9emjRAp54AiZMMNfnF5+wbx+kppqHAbLzz6ri\nL7bla8XfMCA2FvKcSiD0iXrmLJEVKyB3bqujiQfSAV8RH9GlC7Rokkbq3Q9y+rQBn32mwi9XpeIv\n4gN++w3mzYMRvMIdxHL3n58Rd7Gk1bHEg+mAr4gPyJ8fophHH8bwPO8R62xKvnxWpxJPppG/iA8o\nd2Y7M3I9xhy6MNH5HGPHQvHiVqcST6YDvmJbPnPANyUF6teHvHn5c0UszoAC5MljdSjxdGr7iHgz\nw4CnnoKEBPjpJ/IVK2B1IvESKv4i3mzqVJg71/ypXNnqNOJF1PMX8VY7dphX+H7iCYiKsjqNeBn1\n/MW2vLrnf+4cNGhgnuK5caNWapMbppG/2F5UVBSRkZHMnTvX6ijXNGOGeVr/koovkLn/AHz6qQq/\n3BSN/MW2vG3kv20b1KkDD2bOZS5d6FfkI0aeeMzqWOKlNPIX8RJ//AEVMvcyhSeZQzSjTv6H9HSr\nU4m3UvEX8RKNG6Txea5oEijBU0zi3vsc+Gu+ntwkfXREvETR8YMpYvzMrGfXM6pmIXr0sDqReDMV\nfxFvsG4dvP02jrfeotsbDaxOIz5AB3zFtrzmgG9Kinmkt2RJWL0a9XrEFfQpEvF0L7wAx4/D8uUq\n/OIyOuArHmvChAlUqFCBfPnyERYWxqZNm6667YwZM3A6nfj5+eF0OnE6neT3hfnvn38O06fDuHHm\nlblEXETFXzzS/Pnzeemllxg8eDBbt26ldu3aREREkJSUdNXHBAYGkpCQcOknLi7OjYlzwJEj0LMn\ndO4M3btbnUZ8jIq/eKQxY8bQs2dPunXrRrVq1Zg0aRL58+dn6tSpV32Mw+EgKCiI4sWLU7x4cYKC\ngtyY2HVmzIDw1gbbG/QgM1cemDxZF2AXl1PxF4+TlpbGli1bCA8Pv/Q7h8NBmzZtiI2Nverjzp49\nS/ny5Slbtiz33HMPO3fudEdcl1q1Ch59FKqsnEyNI8sYVG4aFC1qdSzxQSr+4nGSkpLIyMggODj4\nst8HBweTkJBwxcfceuutTJ06lSVLljB79mwyMzNp3Lgx8fHx7ojsMr/+CuU5wCheZjJPMjU+wupI\n4qM0dUC8hmEYOK7S/ggLCyMsLOzS7TvuuIPbbruNKVOmMHjw4Cz3W6VKFRwOByEhIYSEhAAQHR1N\ndHS068JfpxbNMqnpeIwkoxgvM4oH2rk9gtiEir94nGLFiuHn50diYuJlvz927Ni//hq4Gn9/f+rW\nrcvevXuvue2ePXs8Zp5/7fUfgLGS8fcsZ0DjAHr3tjqR+Cq1fcTj5MqVi9DQUGJiYi79zjAMYmJi\naNy48XXtIzMzk+3bt1OyZMmciul6+/dDv37w9NM8uzCcvn0hVy6rQ4mv0shfPFKfPn3o3r07oaGh\nNGzYkDFjxnDu3DkeffRRALp160bp0qUZPnw4AEOGDCEsLIzKlStz+vRpRo4cSVxcHI8//riFr+IG\nZGZCjx5QvDiMHGl1GrEBFX/xSA8++CBJSUkMGDCAxMRE6tSpw9KlSy9N3zx8+DD+fzvb9dSpUzz5\n5JMkJCRQuHBhQkNDiY2NpVq1ala9hBszYQL88AOsXAkFC1qdRmxAa/uIbXnM2j5790Lt2vCf/5hn\n8oq4gYq/2JZHFP/MTGjZEuLjzXmeBQpYk0NsR20fEYskJ0OhaeNwrFljrtapwi9upOIv4mYpKdCh\nAxxZf4Adjtc5//BzFGne3OpYYjOa6iniZmPHwvr1BpN4iuNGMXqeGG51JLEhjfxF3Cw1FR5mNhEs\nowPfcP68ZveI+6n4i7hZrweOE/Bub+YY0azK24HFr1mdSOxIxV/Ezcq914fMWwzKfDiW3Q2gbFmr\nE4kdqfiL7UVFReHv7++exdyWLoVPPsE5fTrNOhfP2ecSyYLm+YttuX2ef2oq1KgBlSvDsmW6QItY\nSiN/EXcZMAASE80Lsavwi8VU/EXcYdMmc47nO+9ApUpWpxFR20fsy21tn7Q0aNAAnE7YuBH8NeYS\n6+lTKJLTRo+GbdtU+MWj6JMokgPOnDEvxJ64bi8rkgbheK4PuUJDrY4lcomWdxDJAQMGwBdfGLyV\n+CSHM0oyLHfW1xEWcTeN/EVywMGD8CjTac1K2rKMkgn5rY4kchmN/EVywGOdkhjFy8yiK6v82/Lw\nw1YnErmcRv4iOeDOH14lPSCTC6+MIjYC6te3OpHI5VT8RVxt3Tr4+GP8J07k8aeDrU4jckWa5y+2\n9dc8/w4dOrhubZ+0NAgNhbx5ITYW/PxcE1bExTTyF9ubN2+e607yGjcOduww5/Sr8IsH0wFfEVc5\nfBgGDoRevczRv4gHU/EXcZXevaFgQRg61OokItekto+IK3z7LSxYAHPmQGCg1WlErkkjf5Fs+Okn\n+HzWn6Q//SyEh0NUlNWRRK6Lir/ITZo1y1ysc2e3t8mIO0xcvwlap1+8hoq/yE16/32olPk7rzCC\nkfRj2vpbrY4kct1U/EVuUtEiBhPpRTwhDOd1iha1OpHI9dMBX5GbNOPO+QQvi6GT/9d0vDcfPXta\nnUjk+ukMX7GtbF3JKzkZqlWDxo3NWT4iXkZtH5Gb0b+/ecWWsWOtTiJyU9T2EblRW7fChAkwYgSU\nKWN1GpGboraP2NZNLeyWmQlNm5ptn59/hly53BNWxMU08hfbu6GF3T75xFytc8UKFX7xaur5i1yv\n5GTo1w8eeghatbI6jUi2qPiLXK9Bg+DsWRg1yuokItmmto9IFjIy4MMPIf3n7Tzz0Tgcw4ZB6dJW\nxxLJNhV/kSw8+SRMnWqwkmfZ66yEX2RvKlodSsQF1PYRycLChfAQ82nJap7NfJ+V6/NYHUnEJVT8\nRbJQt8pZ/stLfMG9LCOCqlWtTiTiGir+Iln4InQoxZwnmVZjNJMmQbNmVicScQ31/EWuZvduAj8a\nDQPf5MsB5a1OI+JSOsNXbCvLhd0MAyIiYN8+2LED8ua1JqRIDtHIX+RKFi2C77+HJUtU+MUnaeQv\ntnXVtX3OnYPq1eH22+Grr3RpRvFJGvmL7f1rbZ933oGjR2H5chV+8Vma7SPyd/v2wciR0LcvVK5s\ndRqRHKPiL/J3L74IxYvDa69ZnUQkR6ntI7aXmgqTJ0OprV/z8JdfwuefQ4ECVscSyVE64Cu29dcB\n32bNktm4JjfbqcGRPBWoeWQZhYuo1y++TW0fsb01a+Al/ks54uh54X1+2qrCL77PJcV/7ty5rtiN\nXIHe25wXWvwQbzCMMbzI/ty3UVHLdrqEPrs5xxXvrYq/h9N7m/MW3v4653LfwtIG/fnsM6hQwepE\nvkGf3ZzjivdWB3zF9gJXLqHQ7NnEdAmwOoqI23hMz99VowRX7MeTssTHx7sgie+9Ly7JcvGi+b+N\nG0N0tKVZfO69xTWfXV98XzylLqj459A+XLUfFf+c2weTJpn/++672TqT12Nej4v2o+Kfc/tw1X5c\n8d5eV9vHMAzOnDlz1fvT09NJSUnJVhBX7MMXsxiG4TFZPOl9yfY+jh4l5e23AUgpWxaysS+PeD0e\nmMUVn11ffF/cURcCAgJwXGNAc13z/P+aDy0iIp7visuU/8N1Ff9rjfxFvMq6dXDnnaSMGkWZl1/m\n0KFD1/w/iog3cdnIX8RnpKdDaCjky0fKd98RWLjwdY2SRHyNpnqKLSQnw7RpUGftJFps24Zj40Zw\nesx8BxG3U/EXn3fxIrRqBYe3HmM3/Vkc9Dgd69aH1OwfvBPxVhr6iM/bvRu2boXhvI6Bg8ePD+eP\nP6xOJWItjfzF55UsCc3ybOTxCx/TiwlcDChGUJDVqUSsle2R/8KFC2nfvj1BQUE4nU5+/fVXV+Sy\nnQEDBlCqVCny589P27Zt2bt3b5bbDx48GKfTedlP9erV3ZTWuxQrksmScs+yK28dNtbpyaJFoOO7\n2TdhwgQqVKhAvnz5CAsLY9OmTVfddsaMGTidTvz8/C59XvPnz+/GtN5vzZo1REZGEhISgtPpZMmS\nJdnaX7aLf2pqKk2bNmXEiBHXnFokVzZixAjGjx/P5MmT2bhxIwUKFCAiIoKLfy0/cBU1atQgMTGR\nhIQEEhISWLt2rZsSe5lp07jl901UWz6ezVv9aN3a6kDeb/78+bz00ksMHjyYrVu3Urt2bSIiIkhK\nSrrqYwIDAy99VhMSEoiLi3NjYu+XmppKnTp1mDBhgmtqreEif/zxh+FwOIxffvnFVbu0jZIlSxqj\nR4++dDs5OdnImzevMX/+/Ks+ZtCgQUbdunXdEc+7nTxpGMWKGcYjj/zrruTkZAMwkpOTLQjm3Ro1\namQ8//zzl25nZmYaISEhxogRI664/fTp043ChQu7K57PczgcxuLFi7O1Dx3wtdiBAwdISEggPDz8\n0u8KFSpEo0aNiI2NzfKxe/bsISQkhEqVKtG1a1cOHTqU03G9z4ABcOECjBhhdRKfkZaWxpYtWy77\nzDocDtq0aZPlZ/bs2bOUL1+esmXLcs8997Bz5053xJWrUPG3WEJCAg6Hg+Dg4Mt+HxwcTEJCwlUf\nFxYWxvTp01m6dCmTJk3iwIEDNG/enNTU1JyO7D1++QUmToRBg8yjvuISSUlJZGRk3NBn9tZbb2Xq\n1KksWbKE2bNnk5mZSePGjV22cKHcuBsq/nPmzCEgIICAgAAKFSrEunXrciqXz/rne5iWlnbF7QzD\nyLKvFxERQefOnalRowZt27blm2++4dSpU3z66ac5Fd27GAY8+yzceis891yWm0ZFRREZGamLj2RT\nVp/ZsLAwunbtSq1atWjWrBlffPEFQUFBTJkyxc0p5S83NNWzU6dOhIWFXbodEhLi8kC+7p/v4fnz\n5zEMg8TExMtGUseOHaNu3brXvd/AwECqVq16zVlCtjFnDqxdC8uXQ65cWW46b948Le9wA4oVK4af\nnx+JiYmX/f7YsWP/+mvgavz9/albt64+rxa6oZF/gQIFqFix4qWfPHnyXHa/Zvtc2z/fw+rVq1Oi\nRAliYmIubZOSksKPP/5I48aNr3u/Z8+eZd++fZRUe8Ncnvnll+GBB+BvfWlxjVy5chEaGnrZZ9Yw\nDGJiYq77M5uZmcn27dv1ebVQtk/yOnXqFAcPHiQ+Ph7DMNi1axeGYVCiRInrHgXYXe/evRk6dCiV\nK1emfPny9O/fn9KlS9OpU6dL24SHh9O5c2d69eoFQN++fenYsSPlypUjPj6egQMH4u/vT3Q2rkjl\n7eLjYfZsiFg+hFopKThGjbI6ks/q06cP3bt3JzQ0lIYNGzJmzBjOnTvHo48+CkC3bt0oXbo0w4cP\nB2DIkCGEhYVRuXJlTp8+zciRI4mLi+Pxxx+38FV4l9TUVPbu3Yvx/2tx7t+/n19++YUiRYpQpkyZ\nG99hdqccTZ8+3XA4HIbT6bzsZ/Dgwdndta0MHDjQKFmypJEvXz6jXbt2xp49ey67v0KFCpe9p1FR\nUUZISIiRN29eo0yZMkZ0dLSxf/9+d8f2GElJhlG6tGFUY6dxEX/jk+rDrvkYTfXMngkTJhjlypUz\n8ubNa4SFhRmbNm26dF+rVq2MHj16XLr94osvGuXLlzfy5s1rlCxZ0rj77rs1LfwGrVq16oq19u/v\n843Qks7iE778EiIjDZbRjgocoAY7OJuWB/8s/rb96yJFWtJZ7Ehr+4hPqFAB7nd8QVtjOXfxFSXK\nZV34RexO8/zFJ9SoeI7phV9kVcDdpDS9i2wueyLi8zQ2Et8wbBgFzibScudY1lSyOoyI59PIX7zf\n7t3w7rvw2mtQSZVf5HrogK94N8OAtm3hwAHYvh3y5bvuh+qAr9iZ2j7i3ebPh5gY+OabGyr8Inan\nkb94r5QUqFYN7rgDFiy4iYdr5C/2pZ6/eK+BA80vgLFjs7UbLewmdqSRv3inn3+G0FB4+23o1++m\ndqGRv9iZRv7iVb79Frp2ySTurl5kVq0GvXtbHUnEK6n4i9fYuBE6doTcc6dT7kgsQ0pOhNy5rY4l\n4pVU/MVrbNgAgRknGEk/ZvIIH/7ewupIIl5LxV+8RqNG8A6v4U86fXmXO+6wOpGI99I8f/EajYwN\nNHR8xNQ643ikdTCDBlmdSMR7abaPeIf0dGjYEBwOs/nv55ftXWq2j9iZRv7iHT74wJzeuWGDSwq/\niN2p5y+e7+hRePNN6NnTHP2LSLap+Ivn69vXnNI5bJjVSUR8hto+4tlWrDCvyj5tGhQpYnUaEZ+h\nA77iuc6fh1q1oEQJWLUKnK79Q/WvA74dOnTA39+f6OhooqOjXfocIp5KI3/xOJmZkJAAweOH4RcX\nB4sXu7zw/928efM020dsR8VfPMqpU9CmDZz/aQc/8w5JT71B8G23WR1LxOfogK94lPfeg60/ZTKF\nJ9lHJZ7Y/5rVkUR8kkb+4lEuXIAn+JAmrKcFq/BPz2N1JBGfpOIvHuW5+49SYMQrfGQ8xpYCLfiq\nv9WJRHyTir94lFIjXiCzWB5qzxrJvjoQHGx1IhHfpOIvnuOrr+Czz3DOnk2DCM3pF8lJmucvnuHs\nWbj9drjtNvNyXQ5Hjj+lFnYTO9PIXzzDgAFw/Lh5MpcbCr+I3an4i/W2bDHneL79NlSoYHUaEVtQ\n20eslZZmrtSZmQmbN0OuXG57arV9xM408hdrjRwJ27bBjz+6tfCL2J3O8BW3O30aOnSAOwrtIG3A\nW1zo3Q9CQy3LExUVRWRkJHPnzrUsg4i7qe0jbvf88zBhXAbraUwhUvikz1aG/Tev23Oo7SN2praP\nuN2RI9CbsTRgE01YR5Xj7i/8Inanto+43XPt9zCUNxlLb37KfQePPmp1IhH70chf3CszkxYzH+NC\nmRCKvDqULc2hRg2rQ4nYj4q/uNfEibBmDXlWruTRlvmtTiNiW2r7iPscOACvvgpPPw0tW1qdRsTW\nVPzFPQwDnngCihaFESOuufmAAQMoVaoU+fPnp23btuzduzfL7QcPHozT6bzsp3r16q5KL+JzVPzF\nPT76CGJiYMoUCAjIctMRI0Ywfvx4Jk+ezMaNGylQoAARERFcvHgxy8fVqFGDxMREEhISSEhIYO3a\nta58BSI+RT1/yXn790OfPvDYYxARcc3N33vvPfr370/Hjh0BmDlzJsHBwSxatIgHH3zwqo/z9/cn\nKCjIZbFFfJlG/pJjDh6E1SsySO/aHYoVgzFjrvmYAwcOkJCQQHh4+KXfFSpUiEaNGhEbG5vlY/fs\n2UNISAh0Dba9AAAOeUlEQVSVKlWia9euHDp0KNuvQcRXqfhLjvjqK6haFb4O/y/O2HUkjZ55zXYP\nQEJCAg6Hg+B/XMIrODiYhISEqz4uLCyM6dOns3TpUiZNmsSBAwdo3rw5qamp2X4tIr5IxV9yxNCh\nUPXCrwyhP6N4mYnbml1xuzlz5hAQEEBAQACFChUiLS3titsZhoEji3X+IyIi6Ny5MzVq1KBt27Z8\n8803nDp1ik8//fSaWatUqUKJEiUIDQ0lMjJS6/yILajnLzkiMO8FJvMIv1OVAbzF0KtM6e/UqRNh\nYWGXbp8/fx7DMEhMTLxs9H/s2DHq1q17/c8fGEjVqlWvOUsIzHaR1vYRu9HIX3LEzAoDuY3f6Mon\nNGyWl6efvvJ2BQoUoGLFipd+qlevTokSJYiJibm0TUpKCj/++CONGze+7uc/e/Ys+/bto2TJktl9\nKSI+ScVfXG/tWoJnjMR/2FusOlmbH36AAgWu/+G9e/dm6NChfPnll2zbto1u3bpRunRpOnXqdGmb\n8PBwJk6ceOl23759+eGHH4iLi2P9+vXce++9+Pv7Ex0d7cpXJuIz1PYR1zpzBrp3hzvuwPlKXwr7\n3fgu+vXrx7lz5+jZsyenT5+mWbNmfPvtt+TOnfvSNgcOHCApKenS7cOHD9OlSxdOnDhBUFAQTZs2\nZcOGDRQtWtQVr0rE52g9f3Gtnj1h9mz45ReoVMnqNFnSev5iZxr5i+ssWmSewTtpkscXfhG7U89f\nXOPQIfjPf+Dee+HJJ61OIyLXoOIv2XLiBOz5LR3j4YehYEFzDZ8s5uOLiGdQ8ZebtmABhITA7OpD\nyVyzjrTps6FIEatjich1UPGXm9a7NzS88AP9GcJbDODzxCufxSsinkfFX25aYPoJZvMwa2nKUN4k\nM9PqRCJyvVT85eYYBktLP0Z+zvEws2ne0o/777c6lIhcL031lJvzwQeEbF7M6emL+L5haapWBb+b\nOKHLE0RFRV06G1hnBItd6CQvuXFbtkDjxuZlGcePtzrNTdNJXmJnKv5yY06ehNBQ8+Isa9dCnjxW\nJ7ppKv5iZ2r7yPXLzDTX7UlOhpUrvbrwi9idir9cvxEjzEt0ff01lC9vdRoRyQbN9pEs7dsHDz4I\nrzZaifHmm/DGG3DnnVbHEpFsUs9frsowoEoVuLDvEJupz05nTSrvW0qZ8l46recf1PMXO9PIX67q\nzBk4su8ci7iH8+Tlwcy57N7rG4VfxO7U85erKhRg8EXRJ7jtxG80Zj0UC6J2batTiYgraOQvVzdq\nFO1PzGFxp2k0f64Oa9dCUJDVoUTEFdTzlyv77ju46y545RUYPtzqNDlCPX+xs2yN/L/6CqpXhxo1\nYNkyV0USy+3ZA1FR0KEDDBlidRoRyQE3PfI/fhzKloXz583bBQpAfDwEBroynrjdqVPm0g2GAT/+\n6NP/oH+N/Dt06KC1fcR2bvqAb0LC/wo/QGoqJCX5dK3waWfPguPiBQp0vg+OHYPYWNv8Y86bN09t\nH7Gdm277VKsG9ev/73aTJjrp01u9/bY5s2dh0cdJXxsLixdD1apWxxKRHJStA75nzsCsWeB0Qrdu\nkD+/K6OJO8TFmV/ab9Gf/gwlinm8l/AQwcFWJ8t5OuArdpatef4BAdCr/X7Ilw/yl3RVJnGjP/+E\nHkylP0Ppxwjm8xAjL1idSkRyWvbn+ffoYfZ89u1zQRxxt2oHl/Gh40k+4CnepS9PPGEeyBcR35b9\n4j9zJvj7Q9Om8OuvLogkbrNlC9x/P353tid03Tg2b3YwZYrVoUTEHbJf/MuVMy/qUbIktGgB69YB\nsGsX3H03tGxpni8kHmbnToiIgNtvh3nzaNjYn9BQq0OJiLu47gzf5GSIjIRNmzAWfEGFp9sTF2fe\nlSeP+WWg2UAeYv9+8y+1oCBYtQoKF7Y6kSV0wFfszHVr+wQGmkP8Nm0gsiNhcfMu3XXhAuzd67Jn\nkpuQlmbW+R3L4iE8HAoWNE/LtmnhF7E71y7sli8fLFiAIzqaOXThKT4AoEQJqFvXpc8kN+DiRbPe\nP9DqOM6INiSfzIDly7HFfE4RuSLXr+qZKxdMn07608/zAb1Y3ngA69cZFC3q8meS67RiBWxbc4rv\naE9hThGWGkNGiKb0iNhZzqzn73SSe8IYKFeS8FdfhYEH4KOPdMFviwSmnyCGtpQjjlasJD5/FZxa\nzFvE1nKuBDgc5nLA8+bBZ59Bu3Zw8mSOPZ1cxfHj3PFGa6rmPUQrVrI3Xy2mTTP/ecQUFRVFZGQk\nc+fOtTqKiNu4Zz3/deugUycoVgy++YaLpSvy3ntw9Cg8/DCaYphTEhPNZn9SEsTEcK7C7eTObZ6W\nIZrtI/bmvou57NkDd94Jp08zpPbnDIhpAZjrAW3dqnXEXC4uzpzHn5JiNv2rVbM6kcdR8Rc7c1/n\nt0oVc5ngmjV5NaYNTzMRMDh3Dn74wW0pfFpCgnnC9aZp2801+dPSzDdXhV9E/sG9h/2KFYOlS1kc\n0ouJPMMUniQPF6hRw60pfFJ8PNSrB5O7r6Pyf5qRaBQ3222VK1sdTUQ8kPvnfOTKRdPN7zG50VS6\nO2ZyqEorwsoddXsMX7NoETQ6upDltOEXahPut8o8wUJE5AosmfBXogT03NCD3LE/EJQaZ54BtmKF\nFVF8g2HQYu1QFnIfX9KR9nxHvhL2uAqXiNwca2d7N2pkHu2tWdNcFuKttyAjg+3bYeFCc7KKXMO5\nc9ClCzXm9eebRoN5ImA+lW/Py7RpVgcTEU/mvtk+WcnIgKFDYfBgEm4Pp8HOGRzOLEXx4uYx4ooV\nrQ7ooeLjzSm0v/1mHunt3NnqRF5Fs33EzjzjPE8/Pxg4EL7/Hr/dO/g5syad+Zxjx8yaJv/z008w\nciRseHcNNGhgXmx97VoVfhG5IZ5R/P8SHs7TTbaxklZ8zgNMpzvBeZOtTuUxYmOhSVgGZ14ZQoN+\nLTmSvzJs3KhV80TkhnlW8QeGTy7Km1U/41HHDB7wX8hTE2uZSw8Ly6Yf4eu0tgxmIEPoz8MlV2hG\nj4jcFI8r/lWrwq7dDqamdyP/nl9xVK5knqn68MNw7BgZGeaB4MxMq5O62cKF9JtTm2rsojUrGMwg\nylTQOg2uoLV9xI4844BvVgwDZsyAl14iI8PgzTyjeOdYD6pVcxATA6VKWR0whyUlwXPPwbx5GB0j\neSP4Iz5dGUSNGvDxx2ip7GzQAV+xM88v/n85fpx1d7xEk32zWENTXmQMDZ+uz8SJVgdzvVmzYEOs\nwSN+cwib/6I5G2rcOIiO1nKcLqTiL3bmcW2fqwoKYnyDmYSznFs4zWYa8MjSrnDwoNXJXGryZBjd\nbSvRHzQjbHxX/ijfEnbsgC5dVPhFxGW8p/gDffvC1sLh1GUrLxacQoPT38Ott0K/fuaUR2+XkEC5\nEU+zmfoU5hStieHNqp/qoK6IuJxXFf969WD3bli91p83/3gC/z/2wssvw6RJGOXL891tL1L9liO0\naGFeK8BrHD9ufrNVrEjLo3N5if9Sh59ZSWvq1LE6nIj4Iu/p+Wfl5Elio9/ntmVjyct5ZtCdPe2e\nZdTSmlYnu6LkZHjhBTj5yyFeLzSesC0TwOmE3r1Jf74PA8fcwoYN0KwZDBiALrmYQ9TzFzvzjeKP\n+QfAh/9N5hkm8CzjKcVRaNoUevWC++7znOsHGwZDI9Zw6/fjuJeFpFKA+I5PU31aX03dcTMVf7Ez\nnxlTdu0KGQUCeZvXKU8cq579DHLlMg+UlijBT/Uep2vJGFq3yGD/fvdkOnfub+2nuDgYPhxuv503\nv29BDbbzPO8TQjxzar2jwp9NCxcupH379gQFBeF0Ovn111+tjiTi0Xym+NepYy4Q+uGHsHp9LlqO\nu99cJnrnTn5v9wyBW1fySUIb5v9Qgr1hXWH2bLPXnkO++TKDu4pu4KNS/dkfWBfKl4dhw6BePWY8\nvIzb2cEH9OK8X0E6dMixGLaRmppK06ZNGTFiBA7NihK5Jp9p+2Rl3Dh4/nmDBmziHhYRmetbaqT9\nbN5ZuTLbA8KYuasRBwNr8vzEajS+p/hl0yr37jX77v9cXTQ5GcaMgT9T0ngmYi9lz+6EX3+F2FjO\nLN9AgHGGExThO9pT8bm7uWN4RyhYEMOA6dPNg9d33WX29sU14uLiqFChAj///DO1atXKclu1fcTO\nbFH89++H+vXh1Cnz9iuvwDsvHIWVK0lc8iN/zN9AXbaSmzRzg4AACA6G4sX59WgQmw8UwcBBrZoG\nDUIN86SrEyfYtTqRAqmJlCCBXKSbjy1WDMLCGL66MV+fac6PNCIDf2bOhEceseb124mKv8j1scXi\nMBUrwqZNsGQJlCkD998PUBK6dGFzYBfung+5uEgl9lHdsYtP39yHX9IxUvYe4/D6Y9zGbzgwSN/m\n4EJuB3nyOkkLLMoPqfVIJJgjlGIn1Xnrs+q0uD8IgFLT4cfHze+JRo204rKIeBZbjPyzcvYshIWZ\nJ9EC9OwJkyaZ/71v37+vfx4fb64nZBjml8off5i/z5sXdu2CcuX+t21cnHnuWe3akDt3jr8U25gz\nZw49e/YEwOFw8O2339KkSRPg5kb+HTp0wN//8nFQdHQ00dHROfMCRDyA7Ys/QEoKfPkl3HKL2YP/\nu1deMS+eAub1ZgYN+t99v/9unpt19qy5Xbt2botsa6mpqST+7RqfISEh5Pn/qbxq+4hcHxX/63D4\nsHnA1+dXEPUBcXFxVKxYka1bt6r4i2TBFj3/7Cpd2uoEci2nTp3i4MGDxMfHYxgGu3btwjAMSpQo\nQXBwsNXxRDyOz8zzF3tbsmQJdevWpWPHjjgcDqKjo6lXrx6TJ0+2OpqIR1LbR2xLbR+xMxV/sS3D\nMDhz5gwBAQE6K1hsR8VfRMSG1PMXEbEhFX8RERtS8RcRsSEVfxERG1LxFxGxIRV/EREbUvEXEbEh\nFX8RERtS8RcRsaH/AyFh6xpkn1m9AAAAAElFTkSuQmCC\n", "text/plain": [ "Graphics object consisting of 2 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 3番目は、sin(3/4πx)\n", "X = linspace(-1, 1, N)\n", "T = [sin(3/4*pi*x) for x in X]\n", "# 計算とプロット\n", "_plot_nn(X, T, N_in, N_h, N_out, LEARN_COUNT)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nKf5CCOGG/g8b95IYB7DOKAAAAABJRU5ErkJggg==\n", "text/plain": [ "Graphics object consisting of 3 graphics primitives" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 4番目は、2次曲線\n", "X = linspace(-1, 1, N)\n", "T = [x*x for x in X]\n", "# 計算とプロット\n", "_plot_nn(X, T, N_in, N_h, N_out, LEARN_COUNT)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "SageMath 7.5.1", "language": "", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 0 }