{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "source": [ "First, we import the necessary libraries" ], "metadata": { "id": "yvOhWxCLH0dN" } }, { "cell_type": "code", "execution_count": 37, "metadata": { "id": "SU7_b4ZJ6Ibr" }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "# sigmoid activation function\n", "def sigmoid(x):\n", " return 1 / (1 + np.exp(-x))\n" ] }, { "cell_type": "markdown", "source": [ "Here is defined the training function that uses sigmoid function" ], "metadata": { "id": "ltteHLTfIHHN" } }, { "cell_type": "code", "source": [ "def train_using_sigmoid(X, y, learning_rate, epochs):\n", " # add the bias\n", " X = np.hstack([X, np.ones((X.shape[0], 1))])\n", " \n", " # initialize the weights to random values\n", " weights = np.random.rand(X.shape[1], 1)\n", " \n", " # list to store the mean squared errors at each epoch\n", " mse_history = []\n", " \n", " for epoch in range(epochs):\n", " y_ = sigmoid(np.dot(X, weights))\n", " mse = np.mean((y - y_)**2)\n", " \n", " # append the mean squared value to the history\n", " mse_history.append(mse)\n", " \n", " # compute the gradient of the mean squared error\n", " gradient = -2 * np.dot(X.T, y - y_)\n", " \n", " # update the weights\n", " weights -= learning_rate * gradient\n", " \n", " return weights, mse_history" ], "metadata": { "id": "6lyeGm8FFZZo" }, "execution_count": 38, "outputs": [] }, { "cell_type": "markdown", "source": [ "Here is defined the training function that uses linear function" ], "metadata": { "id": "FEgqG5mmFbld" } }, { "cell_type": "code", "source": [ "def train_using_linear(X, y, learning_rate, epochs):\n", " # add the bias\n", " X = np.hstack([X, np.ones((X.shape[0], 1))])\n", " \n", " # initialize the weights to random values\n", " weights = np.random.rand(X.shape[1], 1)\n", " \n", " # list to store the mean squared errors at each epoch\n", " mse_history = []\n", " \n", " for epoch in range(epochs):\n", " y_ = np.dot(X, weights)\n", " mse = np.mean((y - y_)**2)\n", " \n", " # append the mean squared value to the history\n", " mse_history.append(mse)\n", " \n", " # compute the gradient of the mean squared error\n", " gradient = -2 * np.dot(X.T, y - y_)\n", " \n", " # update the weights\n", " weights -= learning_rate * gradient\n", " \n", " return weights, mse_history" ], "metadata": { "id": "8CBbG1uBFb7Q" }, "execution_count": 63, "outputs": [] }, { "cell_type": "markdown", "source": [ "Here I define the training data" ], "metadata": { "id": "KGDSy3fGIaeH" } }, { "cell_type": "code", "source": [ "# here I define the input data and labels\n", "X = np.array([[0, 0, 1],\n", " [0, 1, 0],\n", " [0, 1, 1],\n", " [1, 0, 1],\n", " [1, 1, 0],\n", " [1, 1, 1]])\n", "\n", "y = np.array([[0], [0], [0], [1], [1], [1]])\n", "\n", "# setting the learning rate and number of epochs\n", "learning_rate = 0.1\n", "epochs = 10" ], "metadata": { "id": "m-w0POo8FlKW" }, "execution_count": 66, "outputs": [] }, { "cell_type": "markdown", "source": [ "Here I train the model using the linear function" ], "metadata": { "id": "8M0u8uPqIlr0" } }, { "cell_type": "code", "source": [ "# Train the model\n", "weights, mse_history = train_using_linear(X, y, learning_rate, epochs)\n", "\n", "print(weights)\n", "# Plot the mean squared error history\n", "plt.plot(range(1, epochs+1), mse_history)\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Mean Squared Error')\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 348 }, "id": "Tzy-5oOEIk8M", "outputId": "918928f5-4be5-4d1e-95bf-ba99750d3685" }, "execution_count": 67, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[[37.15084465]\n", " [45.08224687]\n", " [45.08733753]\n", " [64.08682547]]\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEGCAYAAACUzrmNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deZhU1Z3/8fe3F2iWBhoaAVlslhYiRsS0gopZNHFLImZijCaTMMb5kcloor8kk5hJZkzMZjIzWTSJM0w0IZvGmOQnT8bRENSExrggEjcwXWwC0tBFA900S2/f3x/3NBRtN11AV9+q6s/reeqpe889de+3y8f6cs859xxzd0RERI6mIO4AREQk+ylZiIhIj5QsRESkR0oWIiLSIyULERHpUVHcAWRCeXm5V1RUxB2GiEhOefbZZ5PuPrqrY3mZLCoqKli5cmXcYYiI5BQz29TdMTVDiYhIj5QsRESkR0oWIiLSIyULERHpkZKFiIj0SMlCRER6pGQhIiI9UrIQEckT91Rv4OEXazNybiULEZE80NbufOcPf+XRtdszcn4lCxGRPPDC1j00HGhlXmWXs3WcMCULEZE8UF1TB8B5U0dl5PxKFiIieWB5TZLTxg2jfOjAjJxfyUJEJMfta25l1au7uKCyPGPXULIQEclxT22op6XNmadkISIi3amuSTKgqICzK0Zm7BpKFiIiOW5FIsnZFWWUFBdm7BpKFiIiOWxH4wHW1jYyb1pmhsx2ULIQEclhKxJJAOZNy1x/BShZiIjktOqanZQNLmbmycMyeh0lCxGRHOXuVCfqOG9aOQUFltFrKVmIiOSoxI69bG84mPEmKMhgsjCz6Wa2OuXVYGY3m9lIM1tqZjXhvSzUNzO7w8wSZva8mZ2Vcq4FoX6NmS3IVMwiIrmkuo/6KyCDycLdX3H3M939TOBNwD7gt8AtwDJ3rwSWhX2Ay4DK8FoI3AVgZiOBW4E5wDnArR0JRkSkP6uuSVIxajATRw7O+LX6qhnqImCdu28C5gOLQ/li4MqwPR/4iUeeBEaY2TjgEmCpu9e7+y5gKXBpH8UtIpKVWtraeXL9Ts7vg7sK6LtkcQ1wb9ge4+7bwnYtMCZsjwc2p3xmSyjrrvwIZrbQzFaa2cq6urrejF1EJOus3rybpua2jM4HlSrjycLMBgBXAL/qfMzdHfDeuI67L3L3KnevGj06sw+niIjEbXlNkgKDc6fkSbIg6otY5e4dyzdtD81LhPcdoXwrMDHlcxNCWXflIiL9VnVNHW+cMILhg4v75Hp9kSyu5XATFMASoGNE0wLgwZTyD4dRUXOBPaG56hHgYjMrCx3bF4cyEZF+qeFAC3/ZsocL+qi/AqAokyc3syHAO4CPphTfDtxvZtcDm4CrQ/lDwOVAgmjk1HUA7l5vZl8Gngn1bnP3+kzGLSKSzZ5ct5O29sxOSd5ZRpOFuzcBozqV7SQaHdW5rgM3dHOee4B7MhGjiEiuqU4kGVRcyOxJI/rsmnqCW0Qkx1TXJJkzZSQDizI3JXlnShYiIjlk6+79rE829clT26mULEREcsiKmjDFRx/2V4CShYhITlmeSDK6dCDTx5T26XWVLEREckR7u/NEIsm8aeWYZXZK8s6ULEREcsSa2gZ2NjX3eX8FKFmIiOSM6tBf0VeTB6ZSshARyRHViSSVJw1l7PCSPr+2koWISA440NLG0xvq+3wUVAclCxGRHPDspl0cbG2Ppb8ClCxERHJCdSJJUYExZ8qonitngJKFiEgOqK5JctakMoYOzOiUft1SshARyXK7mpp58bU9sYyC6qBkISKS5Z5YtxP3vp/iI5WShYhIlqtO1FE6sIhZE4bHFoOShYhIFnN3ltckmTt1FEWF8f1kK1mIiGSxV+v3sWXXfi6IsQkKMpwszGyEmT1gZmvNbI2ZnWtmI81sqZnVhPeyUNfM7A4zS5jZ82Z2Vsp5FoT6NWa2oPsriojkl+UdU5LH2LkNmb+z+C7wsLvPAGYBa4BbgGXuXgksC/sAlwGV4bUQuAvAzEYCtwJzgHOAWzsSjIhIvquuSXLy8BImlw+JNY6MJQszGw68GbgbwN2b3X03MB9YHKotBq4M2/OBn3jkSWCEmY0DLgGWunu9u+8ClgKXZipuEZFs0dbuPLEuybzKvp+SvLNM3llMBuqAH5nZc2b2QzMbAoxx922hTi0wJmyPBzanfH5LKOuu/AhmttDMVprZyrq6ul7+U0RE+t4LW/fQcKCVeZWj4w4lo8miCDgLuMvdZwNNHG5yAsDdHfDeuJi7L3L3KnevGj06/i9WROREVddE//A9b2o8U3ykymSy2AJscfenwv4DRMlje2heIrzvCMe3AhNTPj8hlHVXLiKS16oTSU4bN4zyoQPjDiVzycLda4HNZjY9FF0EvAwsATpGNC0AHgzbS4APh1FRc4E9obnqEeBiMysLHdsXhzIRkby1r7mVZzftin3IbIdMz0j1ceDnZjYAWA9cR5Sg7jez64FNwNWh7kPA5UAC2Bfq4u71ZvZl4JlQ7zZ3r89w3CIisXpqQz0tbR7rFB+pMpos3H01UNXFoYu6qOvADd2c5x7gnt6NTkQke62oSTKgqICzK0bGHQqgJ7hFRLJSdSLJ2RVllBQXxh0KoGQhIpJ1djQeYG1tI/OmZc/ITiULEZEssyKRHVN8pDpqsjCzAjM7r6+CERERqK7ZSdngYmaePCzuUA45arJw93bg+30Ui4hIv+fuVCfqOG9aOQUF8U7xkSqdZqhlZvZei3tiEhGRfiCxYy/bGw5mVRMUpJcsPgr8Cmg2swYzazSzhgzHJSLSL1VnYX8FpPGchbuX9kUgIiISTUleMWowE0cOjjuUI6T1UJ6ZXUE03TjA4+7+u8yFJCLSP7W0tfPk+p1cOft1E2vHrsdmKDO7HbiJaF6nl4GbzOzrmQ5MRKS/Wb15N03NbVkzH1SqdO4sLgfODCOjMLPFwHPA5zIZmIhIf7O8JkmBwblTsi9ZpPtQ3oiU7eGZCEREpL+rrqnjjRNGMHxwcdyhvE46dxZfA54zs8cAI+q7uOXoHxERkWPRcKCFv2zZw8feMjXuULp01GRhZgVAOzAXODsUfzasVSEiIr3kyXU7aWvPninJOztqsnD3djP7jLvfT7Q4kYiIZEB1Ismg4kJmTxrRc+UYpNNn8Qcz+7SZTTSzkR2vjEcmItKPVCeSzJkykoFF2TEleWfp9Fm8P7ynLkzkwJTeD0dEpP95bfd+1tc18YFzJsUdSrd6nHUWuMXdJ3d6pZUozGyjmb1gZqvNbGUoG2lmS82sJryXhXIzszvMLGFmz5vZWSnnWRDq15jZgu6uJyKSi6proik+LqjMnvUrOktn1tl/OsFrvM3dz3T3juVVbwGWuXslsIzDI6suAyrDayFwF0TJBbgVmAOcA9zakWBERPJBdSLJ6NKBnDpmaNyhdCuOPov5wOKwvRi4MqX8Jx55EhhhZuOAS4Cl7l7v7ruApcClJ3B9EZGs0d7urEgkmTetnGye3DvTfRYO/N7MHPgvd18EjHH3beF4LTAmbI8HNqd8dkso6678CGa2kOiOhEmTsrfdT0Qk1ZraBnY2NWfdLLOdpTPr7OQTOP88d99qZicBS81sbadze0gkJywkokUAVVVVvXJOEZFM61hC9fwsTxbdNkOZ2WdStt/X6djX0jm5u28N7zuA3xL1OWwPzUuE9x2h+lZgYsrHJ4Sy7spFRHLe8poklScNZezwkrhDOaqj9Vlck7LdedLAHvsMzGyImZV2bAMXAy8SPdzXMaJpAfBg2F4CfDiMipoL7AnNVY8AF5tZWejYvjiUiYjktAMtbTy9oT5rn9pOdbRmKOtmu6v9rowBfhs6bIqAX7j7w2b2DHC/mV0PbAKuDvUfIprhNgHsA64DcPd6M/sy8Eyod5u716dxfRGRrLZq0y4OtrZnfX8FHD1ZeDfbXe2//sPu64FZXZTvBC7qotw5shM99dg9wD09XVNEJJcsTyQpKjDmTBkVdyg9OlqymBXW2jZgUMq62wZkd+OaiEgOqK5JctakMoYOTGvR0lh122fh7oXuPszdS929KGx37GffZOsiIjlkV1MzL762J+tHQXVId/EjERHpRU+s24k7OdG5DUoWIiKxqE7UUTqwiFkTcmPxUSULEZE+5u4sr0kyd+ooigpz42c4N6IUEckjr9bvY8uu/VyQI01QcJTRUGbWyFGGyLr7sIxEJCKS55aHKclz4fmKDt0mC3fvePr6y8A24KdEw2Y/CIzrk+hERPJQdU2Sk4eXMLl8SNyhpC2dZqgr3P0H7t7o7g3ufhfRdOIiInKM2tqdJ9YlmVeZ3VOSd5ZOsmgysw+aWaGZFZjZB4GmTAcmIpKPXti6h4YDrczL4lXxupJOsvgA0fxN28PrfaFMRESOUXVNHQDnT83+KT5SpbOexUbU7CQi0iuqE0lOGzeMUUMHxh3KMenxzsLMTjWzZWb2Ytg/w8y+kPnQRETyy77mVp7dtCunhsx2SKcZ6r+J1rNoAXD35zlyrQsREUnDUxvqaWnznJniI1U6yWKwuz/dqaw1E8GIiOSzFTVJBhQVcHbFyLhDOWbpJIukmU0lPKBnZlcRPXchIiLHoDqR5OyKMkqKC+MO5ZilkyxuAP4LmGFmW4GbgX/IaFQiInlmR+MB1tY2Mm9abg2Z7XDUZGFmhcA/uvvbgdHADHef5+6b0r1AeD7jOTP7XdifbGZPmVnCzH5pZgNC+cCwnwjHK1LO8blQ/oqZXXIcf6eISKyeSOwEcmuKj1RHTRbu3gbMC9tN7t54HNe4CViTsv8N4NvuPg3YBVwfyq8HdoXyb4d6mNlpRB3qM4FLgR+EJCYikjOW1yQpG1zMzJNzc1q9dJqhnjOzJWb2ITP7m45XOic3swnAO4Efhn0DLgQeCFUWA1eG7flhn3D8olB/PnCfux909w1AAjgnneuLiGQDd6c6Ucd508opKMidKT5SpbPwawmwk+hHvoMDv0njs98BPgOUhv1RwG537xhNtQUYH7bHA5sB3L3VzPaE+uOBJ1POmfqZQ8xsIbAQYNKkSWmEJiLSN9bV7WV7w8GcbYKC9J7gvu54Tmxm7wJ2uPuzZvbW4znHsXD3RcAigKqqqm6nVhcR6Wu5OCV5Zz0mCzMrIepPmEl0lwGAu3+kh4+eD1xhZpeHzw0DvguMMLOicHcxAdga6m8FJgJbzKwIGE50R9NR3iH1MyIiWa+6JknFqMFMHDk47lCOWzp9Fj8FxgKXAH8k+rHusaPb3T/n7hPcvYKog/pRd/8g8BhwVai2AHgwbC8J+4Tjj7q7h/JrwmipyUAl0PkhQRGRrNTS1s6T63dyfg7fVUB6yWKau/8L0OTui4k6rOecwDU/C3zSzBJEfRJ3h/K7gVGh/JPALQDu/hJwP/Ay8DBwQxilJSKS9VZv3k1Tc1tOzgeVKp0O7pbwvtvMTgdqgZOO5SLu/jjweNheTxejmdz9ANH05119/qvAV4/lmiIi2WB5TZICg3On5H+yWGRmZcC/EDUJDQX+NaNRiYjkiRWJJG+cMILhg4vjDuWEpDMa6odh84/AlMyGIyKSPxoOtLB6824+9papcYdywtIZDdXlXYS739b74YiI5I8n1+2krT03pyTvLJ1mqNT1tkuAd3Hk9B0iItKF6kSSQcWFnDWpLO5QTlg6zVD/kbpvZv8OPJKxiERE8kR1IsmcKSMZUJTOwNPsdjx/wWCiZy1ERKQbr+3ez/q6ppx+ajtVOn0WLxAWPgIKiaYqV3+FiMhRVIcpPi6ozM31KzpLp8/iXSnbrcD2lIkARUSkC9WJJKNLB3LqmKFxh9Ir0kkWnaf2GBbNHB5x9/pejUhEJMe1tzsrEknefOpoUn8vc1k6yWIV0UR+uwADRgCvhmOOnr0QETnCmtoGdjY1501/BaTXwb0UeLe7l7v7KKJmqd+7+2R3V6IQEelkRSLqr8j1yQNTpZMs5rr7Qx077v6/wHmZC0lEJLctr0lSedJQxg4v6blyjkgnWbxmZl8ws4rw+jzwWqYDExHJRQda2nh6Q31ePLWdKp1kcS3RcNnfhtdJoUxERDpZtWkXB1vb86q/AtJ7grseuAkgzD67OyxKJCIinSxPJCkqMOZMGRV3KL2q2zsLM/tXM5sRtgea2aNAAthuZm/vqwBFRHJJdU2SsyaVMXRgOoNNc8fRmqHeD7wStheEuicBbwG+luG4RERyzq6mZl58bU9ejYLqcLRk0ZzS3HQJcK+7t7n7GtKbJqTEzJ42s7+Y2Utm9qVQPtnMnjKzhJn90swGhPKBYT8RjleknOtzofwVM7vkeP9YEZFMemLdTtzJu85tOHqyOGhmp5vZaOBtwO9Tjg1O49wHgQvdfRZwJnCpmc0FvgF8292nET3od32ofz2wK5R/O9TDzE4DrgFmApcCPzCzwnT/QBGRvlKdqKN0YBGzJgyPO5Red7RkcRPwALCW6Md9A4CZXQ4819OJPbI37BaHlwMXhvMCLAauDNvzwz7h+EUWPSc/H7jP3Q+GGBJ0sYa3iEjcqhNJ5k4dRVFh7k9J3lm3f5G7P+XuM9x9lLt/OaX8IXdPa+ismRWa2WpgB9GT4OuIRlN1TES4BRgftscDm8M1WoE9wKjU8i4+k3qthWa20sxW1tXVpROeiEiv2bSzic31+7kgD5ug4PjWs0hb6OM4k2j9i3OAGRm81iJ3r3L3qtGj82NKYBHJHcvDlOT59nxFhz65V3L33cBjwLnACDPr6CCfAGwN21uJJiwkHB8O7Ewt7+IzIiJZYUUiycnDS5hcPiTuUDIiY8nCzEab2YiwPQh4B9Ha3Y8BV4VqC4AHw/aSsE84/mgYjbUEuCaMlpoMVAJPZypuEZFj1dbuPLFuJ/Mqy/NmSvLO0npqxMzOAypS67v7T3r42DhgcRi5VADc7+6/M7OXgfvM7CtEHeV3h/p3Az81swRQTzQCCnd/yczuB14mWnzpBndvS/PvExHJuBe27mHP/hbm5cmqeF1J53mJnwJTgdVAx4+0A0dNFu7+PDC7i/L1dDGayd0PAO/r5lxfBb7aU6wiInGorokG1Zw/Nb+m+EiVzp1FFXCa5oMSEXm9HY0H+PETGzlr0ghGDR0YdzgZk06fxYvA2EwHIiKSa9ranZvvW83eg618471nxB1ORqVzZ1EOvGxmTxM9lQ2Au1+RsahERHLADx5L8MS6nXzzvWdQOaY07nAyKp1k8cVMByEikmue3lDPt//wV+afeTLvq5oQdzgZl856Fn/si0BERHJFfVMzn7j3OSaNHMxX3/PGvB0um6rHPgszm2tmz5jZXjNrNrM2M2voi+BERLKNu/PpX/2F+qZmvveBs/Ju3YrupNPB/T2iZVRrgEHA3wPfz2RQIiLZ6u7qDTy6dgeff+cbOH18/s0u2520nuB29wRQGOZ6+hHRVOEiIv3K6s27+cbDa7lk5hg+fO4pcYfTp9K5f9oXFihabWbfBLbRR3NKiYhki4YDLXz83lWcVFrCN987q1/0U6RK50f/Q6HejUAT0aR+781kUCIi2cTdueXXz/Pa7gPcce1shg8ujjukPpfOaKhNYSLAce7+pT6ISUQkq/z8qVd56IVabrlsBm86pSzucGKRzmiodxPNC/Vw2D/TzJZkOjARkWywZlsDt/3uZd586mgWXjAl7nBik04z1BeJJv7bDeDuq4HJGYxJRCQrNB1s5YZfrGLEoGK+dfUsCgr6Vz9FqnSSRYu77+lUpkkFRSTv/euDL7Eh2cR3rjmT8jyeJDAd6SSLl8zsA0ChmVWa2Z3AExmOS0QkVr9+dgu/XrWFT1xYyXlT83Op1GORTrL4ODCTaBLBe4EG4OZMBiUiEqfEjr38y4MvMmfySD5xUWXc4WSFdEZD7QM+H14iInntQEsbN/5iFSXFhXz3mtkU9uN+ilTdJoueRjz1NEW5mU0kWk1vDFEfxyJ3/66ZjQR+SbRM60bganffZdETLt8FLgf2AX/n7qvCuRYAXwin/oq7L+75TxMROXZf+Z+XWVvbyI+uO5uxw0viDidrHO3O4lxgM1HT01PAsabXVuBT7r7KzEqBZ81sKfB3wDJ3v93MbgFuAT4LXAZUhtcc4C5gTkgutxKt2OfhPEvcfdcxxiMiclT/8/w2fvbkq3z0zVN42/ST4g4nqxytz2Is8M/A6UT/4n8HkHT3P6Yzbbm7b+u4M3D3RmANMB6YD3TcGSwGrgzb84GfeORJYISZjQMuAZa6e31IEEvR3FQi0ste3bmPW379PGdOHMGnL5kedzhZp9tkESYNfNjdFwBzgQTwuJndeKwXMbMKYDbRHcoYd98WDtUSNVNBlEg2p3xsSyjrrrzzNRaa2UozW1lXV3esIYpIP9bc2s7H710FBndeO5viQk1/19lRvxEzG2hmfwP8DLgBuAP47bFcwMyGAr8Gbnb3I9bBcHenl57ZcPdF7l7l7lWjR4/ujVOKSD/xb4+s5S9b9vBvV53BxJGD4w4nKx2tg/snRE1QDwFfcvcXj/XkZlZMlCh+7u6/CcXbzWycu28LzUw7QvlWokkKO0wIZVuBt3Yqf/xYYxER6cqja7fz38s38OFzT+HS08fFHU7WOtqdxd8SdTbfBDxhZg3h1ZjOSnlhdNPdwBp3/1bKoSXAgrC9AHgwpfzDFpkL7AnNVY8AF5tZmZmVAReHMhGRE7Jtz34+df9fOG3cMP758jfEHU5W6/bOwt1PtNHufKLpzV8ws9Wh7J+B24H7zex6YBNwdTj2ENGw2QTR0NnrQhz1ZvZl4JlQ7zZ3rz/B2ESkn2tta+eme1dzsLWd731gNiXFhXGHlNUytnisu1fT/XDbi7qo70T9Il2d6x7gnt6LTkT6uzuW1fD0xnq+/f5ZTBk9NO5wsp66/EWk31mRSHLnYwne96YJvGf2hLjDyQlKFiLSr9Q1HuTmX65m6uihfGn+zLjDyRkZa4YSEck27e3OJ+9fTcP+Fn56/TkMHqCfwHTpzkJE+o3//NM6ltckufXdM5kxdljc4eQUJQsR6RdWbqznP37/V951xjiuPWdizx+QIyhZiEje272vmU/c+xzjRwzi63/zRqLHwORYqMFORPKau/PpXz1P3d6D/Ppj51FaUhx3SDlJdxYiktd+tGIjf1iznVsuewNnTBgRdzg5S8lCRPLW81t28/X/XcPb3zCGj5xfEXc4OU3JQkTyUuOBFj5+73OUDx3Iv111hvopTpD6LEQk77g7n/vNC2zZtZ/7Fs6lbMiAuEPKebqzEJG8c98zm/nd89v45DtO5eyKkXGHkxeULEQkr7xS28gXl7zEBZXlfOwtU+MOJ28oWYhI3tjX3MoNv1hFaUkx37r6TAoK1E/RW9RnISJ544tLXmJd3V5++pE5jC4dGHc4eUV3FiKSF/7fc1u5f+UWbnjrNOZVlscdTt5RshCRnLe+bi+f/+0LnF1Rxs1vr4w7nLyUsWRhZveY2Q4zezGlbKSZLTWzmvBeFsrNzO4ws4SZPW9mZ6V8ZkGoX2NmC7q6loj0Xwda2rjxF89RXFTAHdfOpqhQ/wbOhEx+qz8GLu1UdguwzN0rgWVhH+AyoDK8FgJ3QZRcgFuBOcA5wK0dCUZEBODrD63h5W0N/PtVsxg3fFDc4eStjCULd/8TUN+peD6wOGwvBq5MKf+JR54ERpjZOOASYKm717v7LmApr09AItIP7dnfwrd+/wqL/7yJ6+dN5u2njYk7pLzW16Ohxrj7trBdC3T81x0PbE6ptyWUdVf+Oma2kOiuhEmTJvViyCKSTXY1NXPPig38eMVGGg+28s43juOzl86IO6y8F9vQWXd3M/NePN8iYBFAVVVVr51XRLJDcu9Bfrh8Az/980aamtu47PSx3HjhNGaePDzu0PqFvk4W281snLtvC81MO0L5ViB16aoJoWwr8NZO5Y/3QZwikiV2NBxg0Z/W87OnNnGwtZ13nXEyN75tGtPHlsYdWr/S18liCbAAuD28P5hSfqOZ3UfUmb0nJJRHgK+ldGpfDHyuj2MWkRhs27Of/3x8Hfc+s5m2dmf+mSdzw9umMXX00LhD65cylizM7F6iu4JyM9tCNKrpduB+M7se2ARcHao/BFwOJIB9wHUA7l5vZl8Gngn1bnP3zp3mIpJHNtfv464/ruOBlVtod+e9Z03gH982lVNGDYk7tH7N3POveb+qqspXrlwZdxgicgw2Jpv4weMJfrNqKwVmvK9qAh9761QmlA2OO7R+w8yedfeqro5pbigRiVVix16+/1iCB1dvpbiwgL+dewoffcsUPTORZZQsRCQWr9Q2cuejNfzPC9soKSrk+nmT+T9vnsJJpSVxhyZdULIQkT714tY9fO/RBA+/VMuQAYX8w1um8vfzJjNqqGaJzWZKFiLSJ1Zv3s2dy2pYtnYHpSVFfOLCaXxk3mRGDNaSp7lAyUJEMmrlxnrueDTBn/5ax4jBxXzqHafy4fMqGD6oOO7Q5BgoWYhIr3N3nlxfz52P1vDEup2MGjKAz146gw+dewpDB+pnJxfpv5qI9Bp3pzqR5I5lNTyzcRejSwfyhXe+gQ/MmcTgAfq5yWX6ryciJ8zdeeyVHdyxLMHqzbsZN7yEL10xk/efPZGS4sK4w5NeoGQhIsetvd1ZumY7dz5aw4tbGxg/YhBffc/pXPWmCQwsUpLIJ0oWInLMdu9rZnlNku8/lmBtbSOnjBrMN686g/fMHk+xVqrLS0oWItKt5tZ21tXt5ZXaRtbUNvBKbSNrtzVS23AAgCmjh/Dt98/i3WecrOVM85yShYjg7ry25wCv1DawNiSEV2obWVe3l9b2aP644kJj6uihnDt1FNPHljLz5GGcN7WcwgKLOXrpC0oWIv1M44EW/rq9kTUhIawNCaLxQOuhOuNHDGL62FIuesNJTB9byoyxw5gyeoiamPoxJQuRPNXa1s6GZFN0p9DRhFTbyJZd+w/VGTqwiBljS7li1snMGFvKjHHDOHVMqR6Yk9dRshDJce5OXeNB1tQ2HtGMlKjbS3NrOwCFBcaU8iHMnlTGtedMYvqYUmaMK2X8iEGYqRlJeqZkIZIDmlvbaTjQwp79Leze10xixyWeFXIAAAdYSURBVN4jmpF27Ws5VHfMsIFMHzuMeZXlzBhbyvSxpUw7aaiGssoJUbIQ6QPt7c7e5lYa9kc/+A37Ww/9+Dd0vA60Htrfs78l5Xgr+1vaXnfOQcWFTB9byiUzxx7qV5gxtpSyIZqYT3pfziQLM7sU+C5QCPzQ3W+POSTpJ9ydtnanpc1pPBj9eHf8mKfzQ79nfwuNB1poP8qilGYwrKSYYYOKGD6omGElxUwpHxptd5QNKj70PqV8CBPLBlOgkUjSR3IiWZhZIfB94B3AFuAZM1vi7i/HG1n/4u60O7S70+6OO7S1e9jvdLz99XU76rW1+zGfq7XdaWlrp6Wt4z16Nbc5La2d9tvaD5U1d67feni/tc1pTjnW0uY0t3baD9vprD5cUlxw6Id++KBiTiotofKkYoaVHP6xjxLCkUlh+OBihg4o0g+/ZLWcSBbAOUDC3dcDmNl9wHygV5PF2toGbvzFc4f2O69P/rrfC+9+t6fPdv7x8U413I+s4x7VcD9cN9ruqNe57PAZ3VP2/XA8qefsiKHj86SUdfzA54oBhQUUFxrFRQUUFxYc3i+M9ouLChgQ9gcNKI7qFKUcLzx8vLiogOKCw9tDBhYd8eM//FACKFKfgOS1XEkW44HNKftbgDmpFcxsIbAQYNKkScd1kZKiQqaPKT2y0I66+7qRJHbEseP/bEeBYYfOY+GcR5RZdCQqP1xmryuzI44d3g7vHce7uG6hGQUGBQVGQdg2O7xdWGBhn9cdLyw4sm6BRect7OZcqdfoqBudx8KPflc/7AUUh7KiEIuI9K5cSRY9cvdFwCKAqqqq4/pncEX5EL7/wbN6NS4RkXyQK49jbgUmpuxPCGUiItIHciVZPANUmtlkMxsAXAMsiTkmEZF+Iyeaody91cxuBB4hGjp7j7u/FHNYIiL9Rk4kCwB3fwh4KO44RET6o1xphhIRkRgpWYiISI+ULEREpEdKFiIi0iPrPC1FPjCzOmBT3HGcoHIgGXcQWUTfx5H0fRym7+JIJ/J9nOLuo7s6kJfJIh+Y2Up3r4o7jmyh7+NI+j4O03dxpEx9H2qGEhGRHilZiIhIj5QssteiuAPIMvo+jqTv4zB9F0fKyPehPgsREemR7ixERKRHShYiItIjJYssY2YTzewxM3vZzF4ys5vijiluZlZoZs+Z2e/ijiVuZjbCzB4ws7VmtsbMzo07pjiZ2f8N/5+8aGb3mllJ3DH1JTO7x8x2mNmLKWUjzWypmdWE97LeuJaSRfZpBT7l7qcBc4EbzOy0mGOK203AmriDyBLfBR529xnALPrx92Jm44FPAFXufjrR8gXXxBtVn/sxcGmnsluAZe5eCSwL+ydMySLLuPs2d18VthuJfgzGxxtVfMxsAvBO4IdxxxI3MxsOvBm4G8Ddm919d7xRxa4IGGRmRcBg4LWY4+lT7v4noL5T8XxgcdheDFzZG9dSsshiZlYBzAaeijeSWH0H+AzQHncgWWAyUAf8KDTL/dDMhsQdVFzcfSvw78CrwDZgj7v/Pt6ossIYd98WtmuBMb1xUiWLLGVmQ4FfAze7e0Pc8cTBzN4F7HD3Z+OOJUsUAWcBd7n7bKCJXmpiyEWhLX4+URI9GRhiZn8bb1TZxaNnI3rl+QgliyxkZsVEieLn7v6buOOJ0fnAFWa2EbgPuNDMfhZvSLHaAmxx9447zQeIkkd/9XZgg7vXuXsL8BvgvJhjygbbzWwcQHjf0RsnVbLIMmZmRG3Sa9z9W3HHEyd3/5y7T3D3CqKOy0fdvd/+y9Hda4HNZjY9FF0EvBxjSHF7FZhrZoPD/zcX0Y87/FMsARaE7QXAg71xUiWL7HM+8CGif0WvDq/L4w5KssbHgZ+b2fPAmcDXYo4nNuEO6wFgFfAC0e9Zv5r6w8zuBf4MTDezLWZ2PXA78A4zqyG6+7q9V66l6T5ERKQnurMQEZEeKVmIiEiPlCxERKRHShYiItIjJQsREemRkoXIcTKztpThzavNrNeepjazitSZREXiVhR3ACI5bL+7nxl3ECJ9QXcWIr3MzDaa2TfN7AUze9rMpoXyCjN71MyeN7NlZjYplI8xs9+a2V/Cq2PKikIz+++wXsPvzWxQbH+U9HtKFiLHb1CnZqj3pxzb4+5vBL5HNHMuwJ3AYnc/A/g5cEcovwP4o7vPIprr6aVQXgl8391nAruB92b47xHplp7gFjlOZrbX3Yd2Ub4RuNDd14dJIWvdfZSZJYFx7t4Syre5e7mZ1QET3P1gyjkqgKVhARvM7LNAsbt/JfN/mcjr6c5CJDO8m+1jcTBluw31MUqMlCxEMuP9Ke9/DttPcHjZzw8Cy8P2MuBjcGi98eF9FaRIuvQvFZHjN8jMVqfsP+zuHcNny8LMsAeBa0PZx4lWufsnohXvrgvlNwGLwoyhbUSJYxsiWUR9FiK9LPRZVLl7Mu5YRHqLmqFERKRHurMQEZEe6c5CRER6pGQhIiI9UrIQEZEeKVmIiEiPlCxERKRH/x8Dt2nef4VmmgAAAABJRU5ErkJggg==\n" }, "metadata": { "needs_background": "light" } } ] }, { "cell_type": "markdown", "source": [ "Here I train the model using the sigmoid function" ], "metadata": { "id": "Eh_FS1LLIti8" } }, { "cell_type": "code", "source": [ "# train the model\n", "weights, mse_history = train_using_sigmoid(X, y, learning_rate, epochs)\n", "\n", "print(weights)\n", "# plot the mean squared error history\n", "plt.plot(range(1, epochs+1), mse_history)\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Mean Squared Error')\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 348 }, "id": "zWToviN6FNVl", "outputId": "cdabb050-9920-485c-bb41-d62d8cd20cb8" }, "execution_count": 65, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[[ 1.91296989]\n", " [-0.12380581]\n", " [-0.25892827]\n", " [-0.52065251]]\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEGCAYAAAB/+QKOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXhV1b3/8fc3A0mYAoQwzzMRGSQyOCKIUkGxV72KVm1r6+9ax6u12jrcW4derVerXqtX6sU6W2snC4rigFpkCorMIIR5DPMQINP398fZYKABDiQn+yTn83qe8+Tsvc8+58t5HvLJ2mvttczdEREROVxS2AWIiEh8UkCIiEiFFBAiIlIhBYSIiFRIASEiIhVKCbuAqtK0aVPv0KFD2GWIiNQos2bN2uzu2RUdqzUB0aFDB/Ly8sIuQ0SkRjGzlUc6pktMIiJSIQWEiIhUSAEhIiIVUkCIiEiFFBAiIlIhBYSIiFRIASEiIhVK+IDYvb+ERycuYuWWPWGXIiISVxI+IPbsL+GlL1bwq3cXhl2KiEhcSfiAaN4wnZ8M6cz78zfyxbLNYZcjIhI3Ej4gAH50ZidaN8rgwfELKS3TCnsiIqCAACA9NZlfXNCThet38oeZq8MuR0QkLiggAhec3IIBHZrw+AeL2bmvOOxyRERCp4AImBn3jcpha2ERz3y8NOxyRERCp4Ao5+Q2mVx6ShtenLKcFZs17FVEEpsC4jB3juhOneQkHtawVxFJcAqIwzRrkM6NQ7swacFGpizVsFcRSVwKiAr88PSOtG2SwQN/X0BJaVnY5YiIhEIBUYH01GR+8Z2eLN64izc17FVEEpQC4ghG9GrBgI5NeGLSEnbs1bBXEUk8CogjMDPuH5XDtsIi/uejb8IuR0Sk2ikgjqJX60wuz23L779YQX7B7rDLERGpVgqIY7jjvO6kpyZrtlcRSTgKiGPIbpDGTUO78OHCTXz+TUHY5YiIVBsFRBR+cHoH2jWpy4PjNexVRBKHAiIKaSmR2V6XbNzNGzNWhV2OiEi1UEBE6fyTmjO4U1Zk2Guhhr2KSO2ngIjSgdled+wt5ikNexWRBKCAOA45rRpy+anteHnqCpZu0rBXEandFBDH6Y7zupGRmszDExaEXYqISEwpII5T0/pp3DysC58sLmDy4k1hlyMiEjMKiBPw/dM60iGrLg9NWEixhr2KSC0V04AwsxFmttjMlprZ3RUc/zczm2tms83sH2aWU+7Yz4PzFpvZ+bGs83jVSUniFxf0ZOmm3bw+XcNeRaR2illAmFky8FvgO0AOMKZ8AARed/eT3b0v8GvgieDcHOAK4CRgBPBs8H5xY3hOc07vksVvPlzC9sKisMsREalysWxBDACWunu+uxcBbwKjy7/A3XeW26wHePB8NPCmu+939+XA0uD94saBYa879xbz5Ica9ioitU8sA6I1UH61nTXBvkOY2Y1mtoxIC+KW4zz3ejPLM7O8goLqnyepR4uGjBnQjlemrWTppl3V/vkiIrEUeie1u//W3TsDdwH3Hue5Y909191zs7OzY1PgMdw+vBt16yTz4HjN9ioitUssA2It0Lbcdptg35G8CVx8gueGJqt+GrcO68qnSwr4ZJGGvYpI7RHLgJgJdDWzjmZWh0in8zvlX2BmXcttjgQOXMx/B7jCzNLMrCPQFZgRw1or5ZrBHejUtB4PTligYa8iUmvELCDcvQS4CXgfWAi85e7zzewBM7soeNlNZjbfzGYDtwPXBufOB94CFgATgRvdvTRWtVZWnZQk7hnZk/yCPbwydWXY5YiIVAlz92O/qgbIzc31vLy80D7f3blm3Ay+Xr2dT+88h8b16oRWi4hItMxslrvnVnQs9E7q2uLAsNc9RaX85sMlYZcjIlJpCogq1K15A64a2I7Xpq9iyUYNexWRmk0BUcVuO7cb9eok8+D4BdSWy3cikpgUEFWsSb063HZuNz7/ZjMfa9iriNRgCogYuHpwezpl1+PhCQspKtGwVxGpmRQQMZCanMR9I3PI37yHl6euCLscEZETooCIkXN6NOPsbtk89dE3bNm9P+xyRESOmwIihu4d2ZNCDXsVkRpKARFDXZs34OpB7Xl9+ioWbdh57BNEROKIAiLGbju3Kw3SUzXsVURqHAVEjDWqW4d/P7crU5Zu4cOFGvYqIjWHAqIaXDWoPV2a1efhCQvYXxK3cw6KiBxCAVENUpOTuHdkT1ZsKeTlLzTbq4jUDAqIajKkezPO6Z7N0x99w2YNexWRGkABUY3uGZnD3uJSHv9Aw15FJP4pIKpRl2b1uXpwe/4wcxUL1mnYq4jENwVENbttWDcyMzTsVUTinwKimmXWTeX24d2Ymr+FDxZsDLscEZEjOmpAmFmSmZ1WXcUkijED2tGteX1+9e5CDXsVkbh11IBw9zLgt9VUS8JISU7ivlE5rNxSyItTVoRdjohIhaK5xPSRmV1iZhbzahLImV2zGdajGc98vJSCXRr2KiLxJ5qA+H/AH4EiM9tpZrvMTENwqsA9I3uyv6SUxz9YHHYpIiL/5JgB4e4N3D3J3VPdvWGw3bA6iqvtOmXX59rBHfhD3mrmrd0RdjkiIoeIahSTmV1kZv8dPEbFuqhEcvOwrjSuW0fDXkUk7hwzIMzsEeBWYEHwuNXM/ivWhSWKzIzIsNfpy7cycd6GsMsRETkomhbEBcBwdx/n7uOAEcDI2JaVWK44tS09WjTg4XcXsq9Yw15FJD5Ee6Nco3LPM2NRSCJLSU7i/gtzWLt9Lze9/hUlpWVhlyQiElVA/Ar4ysx+b2YvAbOAh2NbVuI5rXNTfnnRSXy4cCN3/WkuZWXqjxCRcKUc7aCZJQFlwCDg1GD3Xe6ui+UxcM3gDmwvLOaJSUtomJHC/aNy0O0nIhKWowaEu5eZ2c/c/S3gnWqqKaHdPLQL2wuLGTdlOY3r1uGWYV3DLklEEtRRAyLwoZn9FPgDsOfATnffGrOqEpiZce/InuzYG2lJNKqbyjWDO4RdlogkoGgC4vLg543l9jnQqerLEYCkJOPRS05mx95i7v/bfBqmp3Jxv9ZhlyUiCeaYs7kCd7t7x8MeUYWDmY0ws8VmttTM7q7g+O1mtsDM5pjZR2bWvtyxUjObHTwS7vJWSnISz1zZj8Gdsrjjj1/z8SJNDS4i1Sua2VzvPJE3NrNkIjPBfgfIAcaYWc5hL/sKyHX33sDbwK/LHdvr7n2Dx0UnUkNNl56azNhr+pPTsiE3vPolM5brqp6IVJ9ohrl+aGY/NbO2ZtbkwCOK8wYAS909392LgDeB0eVf4O6fuHthsDkNaHNc1SeABump/P4Hp9KmcQbX/X6m5mwSkWoTTUBcTqT/4TMi90DMAvKiOK81sLrc9ppg35FcB7xXbjvdzPLMbJqZXVzRCWZ2ffCavIKCgihKqpmy6qfxynUDaZiRyrXjZpBfsDvskkQkAUQzm+vh/Q9R90FEy8y+B+QCj5Xb3d7dc4ErgSfNrHMFtY1191x3z83Ozq7KkuJOq0YZvHLdAACu/r8ZrN+xN+SKRKS2O2JAmNnPyj2/7LBjv4rivdcCbctttwn2Hf455wL3ABe5+8GVc9x9bfAzH5gM9IviM2u1Ttn1eemHA9i5t5jvvTCdrXuKwi5JRGqxo7Ugrij3/OeHHRsRxXvPBLqaWUczqxO83yGjkcysH/A8kXDYVG5/YzNLC543BU4nMpNswuvVOpMXrs1lzba9fP/FGezaVxx2SSJSSx0tIOwIzyva/ifuXgLcBLwPLATecvf5ZvaAmR0YlfQYUB/442HDWXsCeWb2NfAJ8Ii7KyACAztl8exVpzB/3U6uf3mWZoAVkZiwIy1SY2Zfuvsphz+vaDse5Obmel5eNH3ntcdfv1rLbX+YzfCc5jx31SmkJEc7Oa+ISISZzQr6e//J0X6j9DmwBjXQO3h+YPvkmFQqx+Xifq355UUnMWmBZoAVkap3xKk23D25OguRE3PtaZEZYH/z4RIyM1K5b1RPzQArIlUimrmYJM7dMqwL2/cWBTPApnKzZoAVkSqggKgFzIz7RuawY28xj09aQqZmgBWRKqCAqCWSkoxfX9KbnXtLuP9v88nMSGV0X80AKyInTsNeapEDM8AO6tSEO97SDLAiUjlHu5N6V7mRS//0qM4iJXrpqcn87ppcemoGWBGppCMGhLs3cPeGwFPA3UQm2msD3AU8WT3lyYk4MANsa80AKyKVEM0lpovc/Vl33+XuO939OQ6btlviT1b9NF69biAN0lM0A6yInJBoAmKPmV1lZslmlmRmV1FubWqJX60aZfDKjwYCmgFWRI5fNAFxJfCvwMbgcVmwT2qAzsEMsDs0A6yIHKdo1oNY4e6j3b2pu2e7+8XuvqIaapMqcvgMsLv3l4RdkojUAMcMCDPrZmYfmdm8YLu3md0b+9KkKg0qNwPsj1/K0wywInJM0Vxi+h2R9SCKAdx9DoeuFSE1xLCezXn8sj5Mzd/CzW98RUlpWdgliUgciyYg6rr7jMP26RpFDXVxv9b854U5TFqwkbv/rBlgReTIoplqY3OwHrQDmNmlwPqYViUx9f3TO7Jjbwm/+XAJDdM1A6yIVCyagLgRGAv0MLO1wHLgqphWJTF3y7AubCvUDLAicmRHDQgzSwZ+4u7nmlk9IMndd1VPaRJLZsb9o3LYGcwA26huKldrBlgRKeeoAeHupWZ2RvBcN8fVMklJxqOX9mbnvhLuf2c+DTUDrIiUE80lpq/M7B3gj5S7g9rd/xyzqqTapAYzwF47bgZ3vPU1DdJTGNqjedhliUgciGYUUzqwBRgKXBg8RsWyKKle6anJvHBtLj1aNtAMsCJykLnXjmGOubm5npeXF3YZNdqW3fu57PmpbNyxj4e/ezIX99PlJpHazsxmuXtuRceiuZM63cxuNLNnzWzcgUfVlylhy6qfxus/GkTPlg257Q+zueWNr9ixtzjsskQkJNFcYnoFaAGcD3xKZE0IjWSqpVpkpvPm9YO4Y3g3JsxdzwVPfc70/C1hlyUiIYgmILq4+33AHnd/CRgJDIxtWRKmlOQkbh7WlT/dcBqpycYVv5vGoxMXUVSiqTlEEkk0AXHgGsN2M+sFZALNYleSxIu+bRsx4ZYz+df+bXlu8jIuee4LlmnhIZGEEU1AjDWzxsB9wDvAAuDXMa1K4ka9tBQevbQ3//u9/qzeVsiop//Ba9NXUlsGN4jIkWkUk0Rt4859/PSPX/P5N5s5t2dzHr3kZLLqp4VdlohUwtFGMR0zIMzs/or2u/sDVVBblVFAVI+yMufFL1bw6HuLyKybymOX9mZId11xFKmpKjXMlcjd0wcepcB3gA5VVp3UKElJxnVndORvN51Ok7p1+P6LM/nPd+ZrASKRWui4LzGZWRrwvrsPiUlFJ0gtiOq3r7iURycu4sUpK+jWvD5PXdGPni0bhl2WiByHyrYgDleXyL0Q0XzwCDNbbGZLzezuCo7fbmYLzGxOsKxp+3LHrjWzb4LHtSdQp8RYemoy/3HhSbz0wwFsKyxm9DNTeOHzfC1CJFJLRHMn9dzgF/gcM5sPLAaejOK8ZOC3RC5J5QBjzCznsJd9BeS6e2/gbYLRUWbWBPgPIvdbDAD+IxhJJXHo7G7ZTLz1TM7uns1DExZyzbgZbNy5L+yyRKSSomlBjOLbSfrOA1q5+zNRnDcAWOru+e5eBLwJjC7/Anf/xN0Lg81pfNsyOR+Y5O5b3X0bMAkYEcVnSkiy6qcx9ur+/Oq7JzNr5TbOf/IzJs7TwoMiNVk0AbGr3GMv0NDMmhx4HOW81sDqcttrgn1Hch3w3vGca2bXm1memeUVFBQc+18iMWVmXDmwHRNuOYO2jevyb69+yV1vz2HPfi1hLlITRRMQXwIFwBLgm+D5rOBRJb3CZvY9IBd47HjOc/ex7p7r7rnZ2dlVUYpUgU7Z9fnTDafxkyGdeWvWakY+/TmzV28PuywROU7RBMQk4EJ3b+ruWUQuOX3g7h3dvdNRzlsLtC233SbYdwgzOxe4B7jI3fcfz7kSv+qkJPGzET1488eDKC51LnnuC/7no28oVQe2SI0RTUAMcvd3D2y4+3vAaVGcNxPoamYdzawOcAWRqToOMrN+wPNEwmFTuUPvA+eZWeOgc/q8YJ/UMAM7ZfHurWcy8uSWPD5pCZc/P5XVWwuPfaKIhC6agFhnZveaWYfgcQ+w7lgnuXsJcBORX+wLgbfcfb6ZPWBmFwUvewyoD/zRzGYHS5vi7luBB4mEzEzggWCf1ECZGak8PaYfT17el8UbdvGdpz7nL1+t0XxOInEumqk2Dgw5PSvY9Rnwy3j7ha0b5WqG1VsLuf2t2cxcsY0L+7TioYt7kZmRGnZZIgmrUnMxHfZGjYHtHod/+ikgao7SMue5yUt58sNvaNYgjScu78ugTllhlyWSkE7oTmozu9/MegTP08zsY2ApsDHoWBY5IclJxk1DIwsSpaUmM0YLEonEpaP1QVxO5K5pgGuD1zYDzgZ+FeO6JAH0aduI8TefweW5kQWJ/uW5KVqQSCSOHC0gispdSjofeMPdS919IZAS+9IkEdRLS+GRSyILEq3dtpeRT3/Oq9O0IJFIPDhaQOw3s15mlg2cA3xQ7ljd2JYliWZErxZMvO0sTu3QhHv/Oo8fv5zHlt37j32iiMTM0QLiViIT6C0CfuPuywHM7AIik+yJVKnmDdN56QcDuG9UDp8t2cy5T3zK76csp7hUfRMiYdCSoxKXFm/YxQPj5zNl6RY6Na3H3d/pwfCc5phZ2KWJ1CpVvR6ESMx1b9GAV68byLjv52IG178yizG/m8a8tTvCLk0kYSggJG6ZGUN7NGfibWfx4OiTWLJxNxc+8w9uf2s263fsDbs8kVpPl5ikxti5r5hnP1nGuCnLSTL48Zmd+LezO1MvTYPqRE5Upe+kNrPTgA6UG97q7i9XVYFVQQGROFZvLeTX7y/m71+vo2n9NH56Xjcuy21LcpL6J0SOV6UCwsxeAToDs4HSYLe7+y1VWmUlKSASz1ertvHQhIXMWrmNHi0a8IsLenJWN60LInI8KhsQC4GceJx/qTwFRGJyd96bt4FH3lvEqq2FnN0tm3tG9qRb8wZhlyZSI1R2FNM8oEXVliRSNcyMC05uyaTbz+LekT35atU2Rjz5GT//81wKdulGO5HKiKYF8QnQF5gBHPwf5+4XHfGkEKgFIQDb9hTx1Eff8Oq0laSlJPGTc7pw3RkdSU9NDrs0kbhU2UtMZ1e0390/rYLaqowCQsrLL9jNI+8t4oMFG2mVmc6dI7ozuk9rktSRLXKIKlsPIp4pIKQi0/K38PCEhcxdu4PebTK554KeDNTaEyIHVaoPwswGmdlMM9ttZkVmVmpmO6u+TJGqN6hTFn+78XR+c3kfCnbt5/Kx07j+5TyWb94TdmkicS+aTupngDHAN0AG8CPgt7EsSqQqJSUZ3+3Xhk9+OoQ7z+/OlKWbGf7Ep/znO/PZtqco7PJE4lZUU224+1IgOVgP4kVgRGzLEql66anJ3HhOFybfeQ6X5bbl5akrOPuxT3jh83z2l5Qe83yRRBNNQBSaWR1gtpn92sz+PcrzROJSdoM0/utfTua9W8+iX7vGPDRhIcOf+Ix3567XQkUi5UTzi/7q4HU3AXuAtsAlsSxKpDp0b9GAl344gJd/OICM1GR+8tqXXPa/U/lq1bawSxOJC9HOxZQBtHP3xcd8cUg0ikkqo7TMeStvNY9/sITNu/dzUZ9W/GxEd9o01uKJUrtVdhTThUTmYZoYbPc1s3eqtkSRcCUnGWMGtGPynUO4eWgXPliwgaGPf8oj7y1i577isMsTCUU0N8rNAoYCk929X7BvrrufXA31RU0tCKlK63fs5bH3F/PnL9fSID2Fawa35/undSS7QVrYpYlUqcrOxVTs7ocv46WePKnVWmZm8MS/9mX8zWdwVtdsnp28jDMe/Zj7/jqP1VsLwy5PpFpEs9LKfDO7Ekg2s67ALcAXsS1LJD70ap3Jb686hfyC3Yz9LJ83Z67i9RmrGNW7JTcM6UyPFg3DLlEkZqK5xFQXuAc4DzDgfeBBd98X+/Kip0tMUh027NjHuCnLeW3aSvYUlTK0RzNuGNKZUzs0Cbs0kROiuZhEqtiOwmJembaCcVNWsHVPEbntG3PDkM4M7dEMM00IKDXHCQXEsUYqabpvEdhbVMpbeasZ+1k+a7fvpXvzBtwwpDOjerckJVn3k0r8O9GAKABWA28A04lcXjpI032LfKu4tIzxc9bx3ORlLNm4mzaNM7j+rE5c1r8tGXW0FoXErxMdxdQC+AXQC3gKGA5sdvdPow0HMxthZovNbKmZ3V3B8bPM7EszKzGzSw87Vmpms4OH7ruQuJaanMR3+7Vh4q1n8cI1uTRrkMb9f5vPGY9+zDMff8OOQt1LITVPtHdSpxGZ0fUx4Jfu/kwU5yQDS4gEyxpgJjDG3ReUe00HoCHwU+Add3+73LHd7l4/2n+IWhAST9ydmSu28dzkpXyyuID6aSlcNbAdPzyjI80bpoddnshBR2tBHHWYaxAMI4mEQwfgaeAvUX7uAGCpu+cH7/UmMBo4GBDuviI4Vhble4rUCGbGgI5NGNBxAAvW7eT5z5bxu8/zeXHKCi7p35rrz+pMx6b1wi5T5KiOGBBm9jKRy0vvEmk1zDvO925NpA/jgDXAwOM4P93M8oAS4BF3/+txfr5IXMhp1ZCnrujHHcO7M/bzZbyVt4Y3Z67mgl6Reyl6tc4Mu0SRCh2tBfE9IrO33grcUm7ongHu7rG+Q6i9u681s07Ax8H0HsvKv8DMrgeuB2jXrl2MyxGpnHZZdXno4pO5dVg3XpyynFemrmTC3PWc2bUpNwzpzOBOWRoiK3HliJ3U7p7k7g2CR8NyjwZRhsNaIlODH9Am2BcVd18b/MwHJgP9KnjNWHfPdffc7OzsaN9aJFTZDdL42YgeTPn5UO4a0YOF63dx5e+mc/GzX/D+/A2UldWOe5Ok5ovlQO2ZQFcz6xgsOHQFENVoJDNrHPR/YGZNgdMp13chUhs0TE/lhiGd+cdd5/Dwd3uxbU8R/++VWQz/zaf8MW81RSXqmpNwxfROajO7AHgSSAbGufvDZvYAkOfu75jZqUQ6vRsD+4AN7n6SmZ0GPA+UEQmxJ939/472WRrFJDVdSWkZ783bwLOTl7Fw/U5aZqbzozM7ccWpbamXFs20aSLHT1NtiNQg7s6nSwp4bvIypi/fSqO6qVw7uANXD25P0/qablyqlgJCpIaatXIb//vpMiYt2EhqsnHeSS24ckA7BnfKIilJHdpSeQoIkRpu6abdvDFjFX/6cg3bC4vpkFWXKwa049L+bdSqkEpRQIjUEvuKS5k4bwOvz1jFjOVbI62KnBZcOVCtCjkxCgiRWmjppt28OWMVbwetivZZdbni1HZclqtWhURPASFSi+0rLuX9+Rt4bfqhrYoxA9pxWme1KuToFBAiCeJIrYpL+7chu4FaFfLPFBAiCeZAq+L16auYvnwrKUnGeSc1Z8yAdpzeualaFXKQAkIkgS0r2M0b0yMjoLYVFtOuSV2uGNCWy/q3VatCFBAi8m2r4o0Zq5iWr1aFRCggROQQywqCvopZh7YqLu3fhmYNtKBRIlFAiEiF9pdE7qso36oYntOcKweqVZEoFBAickzLCnbzh5mreXvWGrbuKaJtk4yD91WoVVF7KSBEJGr7S0p5f/5G3pi+iqn5Ww62KsYMaMcZXdSqqG1OeE1qEUk8aSnJXNSnFRf1aUV+wW7eDFoV783bQNsmGYzu05oL+7Sie4sGYZcqMaYWhIgc0/6SUj6Yv5G38lYzZelmyhy6NqvPhX1aMap3Szpl1w+7RDlBusQkIlWmYNd+Js5bz9/nrGfmiq24Q07LhgfDom2TumGXKMdBASEiMbFhxz4mzF3P+Dnr+GrVdgD6tm3EqN4tGdW7FS0y1bkd7xQQIhJzq7cWMmHuev7+9Trmr9uJGZzavgmj+rTkO71a6q7tOKWAEJFqlV+wm/FzIi2LJRt3k2QwuHMWF/ZuxYheLWhUt07YJUpAASEioVm8YRfj56xj/Jz1LN+8h5Qk44yuTbmwdyuGn9SchumpYZeY0BQQIhI6d2f+up38fc46xn+9nrXb91InOYmzu2dzYZ9WnNuzGXXraOR9dVNAiEhccXe+Wr2d8V+vZ8LcdWzcuZ/01CSG9WzOhb1bMqR7M9JTk8MuMyEoIEQkbpWVOTNXbGX8nPW8O3c9W/YUUT8theE5zRnVuyVnds2mTkpS2GXWWgoIEakRSkrLmJa/lb9/vY6J8zewY28xmRmpnH9Scy7s04rBnbJISVZYVCUFhIjUOEUlZfxjaQHjv17PBws2snt/CVn16jCiVwtG9W7FqR0aKyyqgAJCRGq0fcWlTF5cwPg56/ho4Sb2FpfSMD2Fs7plM7RHM87ulk1Wfd1ncSI0WZ+I1GjpqcmM6NWCEb1aUFhUwqeLC/h40SY+WVzA+DnrMYvcwT20ezPO6dGMk1o1xEyzzlaWWhAiUmOVlTnz1u2IhMWiTXy9ZgcAzRqkcU4QFmd0bUr9NP0tfCS6xCQiCaFg134+XVLAJ4s28dmSAnbtLyE12RjYMYtzejRjaI9mdGxaL+wy44oCQkQSTnFpGXkrtvHJ4k18vGgTSzftBqBj03pB6yKbAR2bkJaS2PdbKCBEJOGt3lrIx4siYTE1fwtFJWXUq5PM6V2aMrRH5HJU84aJN/usAkJEpJzCohK+WLqFjxdH+i7W79gHwEmtGh4Miz5tGpGcAMurhhYQZjYCeApIBl5w90cOO34W8CTQG7jC3d8ud+xa4N5g8yF3f+lon6WAEJET4e4s3rjrYEf3rJXbKHNoUq8OQ7plM6RHM87umk1m3do5qWAoAWFmycASYDiwBpgJjHH3BeVe0wFoCPwUeOdAQJhZEyAPyAUcmAX0d/dtR/o8BYSIVIXthUUHO7onLylge2ExyUlG/3aND3Z0d2tev9YMow3rPogBwFJ3zw+KeBMYDRwMCHdfERwrO+zc84FJ7r41OD4JGAG8EcN6RURoVLcOo/u2ZnTf1pSWOX25QMsAAAciSURBVLNXbwv6Lgp4dOIiHp24iNaNMjinRzZDujVjQKcmtXbK8lgGRGtgdbntNcDASpzb+vAXmdn1wPUA7dq1O7EqRUSOIDnJ6N++Cf3bN+HO83uwfsdePlkUuUnvT7PW8uq0VSQZ9GqdyeBOWQzqlEVuh8Y0qCWBUaPvHnH3scBYiFxiCrkcEanlWmZmcOXAdlw5sB37ikv5ctU2puVvZdqyLYybspznP8snOcno1TqTQZ2aMKhTFqd2aFJjb9SLZdVrgbblttsE+6I9d8hh506ukqpERKpAemoyp3Vuymmdm8Jw2Ft0IDC2MHXZFsb9YznPfxoJjJNbZzK4c9DCaN+YejUkMGLZSZ1CpJN6GJFf+DOBK919fgWv/T0w/rBO6lnAKcFLviTSSb31SJ+nTmoRiSeFRSV8uXI7U/M3My1/K1+v3k5JmZOSZPRuk8mgTlkM7pxF//aNQ11JL8xhrhcQGcaaDIxz94fN7AEgz93fMbNTgb8AjYF9wAZ3Pyk494fAL4K3etjdXzzaZykgRCSe7dlfwqyVQQsjfwtz1uygNAiMPm0bHezD6N++MRl1qu/ubt0oJyISZ3bvLyFvxdZIH0b+FuaujQRGarLRt1xgnNK+cUyXX1VAiIjEuV37islbuY1py7YcDIwyhzrJSfRt1yhySapTFv3aNarSwFBAiIjUMDv3FR9sYUxdtoX564LASEmiX9tGBzu9+7VrVKkJBxUQIiI13I69xcxcHrkcNW35Fuav24k7pKUkMTynOc9cecqx36QCWlFORKSGy8xI5dyc5pyb0xyAHYXFzFgRaV2kp8ZmbW4FhIhIDZRZN5XhOc0ZHgRGLMQmdkREpMZTQIiISIUUECIiUiEFhIiIVEgBISIiFVJAiIhIhRQQIiJSIQWEiIhUqNZMtWFmBcDKsOuopKbA5rCLiCP6Pg6l7+Nb+i4OVZnvo727Z1d0oNYERG1gZnlHmhMlEen7OJS+j2/puzhUrL4PXWISEZEKKSBERKRCCoj4MjbsAuKMvo9D6fv4lr6LQ8Xk+1AfhIiIVEgtCBERqZACQkREKqSAiANm1tbMPjGzBWY238xuDbumsJlZspl9ZWbjw64lbGbWyMzeNrNFZrbQzAaHXVOYzOzfg/8n88zsDTNLD7um6mRm48xsk5nNK7eviZlNMrNvgp+Nq+KzFBDxoQS4w91zgEHAjWaWE3JNYbsVWBh2EXHiKWCiu/cA+pDA34uZtQZuAXLdvReQDFwRblXV7vfAiMP23Q185O5dgY+C7UpTQMQBd1/v7l8Gz3cR+QXQOtyqwmNmbYCRwAth1xI2M8sEzgL+D8Ddi9x9e7hVhS4FyDCzFKAusC7keqqVu38GbD1s92jgpeD5S8DFVfFZCog4Y2YdgH7A9HArCdWTwM+AsrALiQMdgQLgxeCS2wtmVi/sosLi7muB/wZWAeuBHe7+QbhVxYXm7r4+eL4BqJKFqhUQccTM6gN/Am5z951h1xMGMxsFbHL3WWHXEidSgFOA59y9H7CHKrp8UBMF19ZHEwnOVkA9M/teuFXFF4/cu1Al9y8oIOKEmaUSCYfX3P3PYdcTotOBi8xsBfAmMNTMXg23pFCtAda4+4EW5dtEAiNRnQssd/cCdy8G/gycFnJN8WCjmbUECH5uqoo3VUDEATMzIteYF7r7E2HXEyZ3/7m7t3H3DkQ6Hz9294T9C9HdNwCrzax7sGsYsCDEksK2ChhkZnWD/zfDSOBO+3LeAa4Nnl8L/K0q3lQBER9OB64m8tfy7OBxQdhFSdy4GXjNzOYAfYFfhVxPaIKW1NvAl8BcIr/DEmraDTN7A5gKdDezNWZ2HfAIMNzMviHSynqkSj5LU22IiEhF1IIQEZEKKSBERKRCCggREamQAkJERCqkgBARkQopIESOg5mVlhuKPNvMquyuZjPrUH6GTpGwpYRdgEgNs9fd+4ZdhEh1UAtCpAqY2Qoz+7WZzTWzGWbWJdjfwcw+NrM5ZvaRmbUL9jc3s7+Y2dfB48B0Eclm9rtgvYMPzCwjtH+UJDwFhMjxyTjsEtPl5Y7tcPeTgWeIzEgL8D/AS+7eG3gNeDrY/zTwqbv3ITK30vxgf1fgt+5+ErAduCTG/x6RI9Kd1CLHwcx2u3v9CvavAIa6e34w8eIGd88ys81AS3cvDvavd/emZlYAtHH3/eXeowMwKVj0BTO7C0h194di/y8T+WdqQYhUHT/C8+Oxv9zzUtRPKCFSQIhUncvL/ZwaPP+Cb5fEvAr4PHj+EXADHFx/O7O6ihSJlv46ETk+GWY2u9z2RHc/MNS1cTDj6n5gTLDvZiKrwd1JZGW4HwT7bwXGBjNxlhIJi/WIxBH1QYhUgaAPItfdN4ddi0hV0SUmERGpkFoQIiJSIbUgRESkQgoIERGpkAJCREQqpIAQEZEKKSBERKRC/x8oS4g8RmXWXQAAAABJRU5ErkJggg==\n" }, "metadata": { "needs_background": "light" } } ] } ] }