Jensen-holm commited on
Commit
31747ca
·
1 Parent(s): 4483f95

python example for creating a plot of loss history over time for neural_network

Browse files
Files changed (2) hide show
  1. example/main.ipynb +0 -142
  2. example/main.py +41 -0
example/main.ipynb DELETED
@@ -1,142 +0,0 @@
1
- {
2
- "cells": [
3
- {
4
- "cell_type": "markdown",
5
- "metadata": {},
6
- "source": [
7
- "# Data-Mining-From-Scratch Example Jupyter Notebook Useage\n",
8
- "### by: Jensen Holm"
9
- ]
10
- },
11
- {
12
- "cell_type": "code",
13
- "execution_count": 1,
14
- "metadata": {},
15
- "outputs": [],
16
- "source": [
17
- "import matplotlib.pyplot as plt\n",
18
- "import seaborn as sns\n",
19
- "import requests\n",
20
- "import json"
21
- ]
22
- },
23
- {
24
- "cell_type": "markdown",
25
- "metadata": {},
26
- "source": [
27
- "## Defining the API endpoint and parameters"
28
- ]
29
- },
30
- {
31
- "cell_type": "code",
32
- "execution_count": 2,
33
- "metadata": {},
34
- "outputs": [],
35
- "source": [
36
- "ENDPOINT: str = \"https://data-mining-from-scratch-backend.onrender.com/\"\n",
37
- "\n",
38
- "request_params = {\n",
39
- " \"algorithm\": \"neural-network\",\n",
40
- " \"arguments\": {\n",
41
- " \"epochs\": 100,\n",
42
- " \"activation_func\": \"tanh\",\n",
43
- " \"hidden_size\": 8,\n",
44
- " \"learning_rate\": 0.01\n",
45
- " }\n",
46
- "}\n",
47
- "\n",
48
- "headers = {\n",
49
- " \"Content-Type\": \"application/json\",\n",
50
- "}\n"
51
- ]
52
- },
53
- {
54
- "cell_type": "markdown",
55
- "metadata": {},
56
- "source": [
57
- "## Sending the Post request using the requests library"
58
- ]
59
- },
60
- {
61
- "cell_type": "code",
62
- "execution_count": 3,
63
- "metadata": {},
64
- "outputs": [],
65
- "source": [
66
- "r = requests.post(\n",
67
- " ENDPOINT,\n",
68
- " data=json.dumps(request_params),\n",
69
- " headers=headers,\n",
70
- ")\n",
71
- "\n",
72
- "model = r.json()\n",
73
- "loss_hist = model[\"loss_history\"]"
74
- ]
75
- },
76
- {
77
- "cell_type": "markdown",
78
- "metadata": {},
79
- "source": [
80
- "## Making animated plot with the loss history data"
81
- ]
82
- },
83
- {
84
- "cell_type": "code",
85
- "execution_count": 4,
86
- "metadata": {
87
- "scrolled": false
88
- },
89
- "outputs": [
90
- {
91
- "data": {
92
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHJCAYAAABjZPjUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABXlUlEQVR4nO3deVxU9f4/8NeZfVhGNhEStzQhFBMV3HAtzV9xvVfzdtPUm6nZSrdMzTSzbPG6Ue5ZYKmZflOzLCtvWVrmglq2uO9oICjIsM1+fn8Mc2wClWU2htfz8eAhnHNm+MzbqXn52Y4giqIIIiIiIj8l83YDiIiIiNyJYYeIiIj8GsMOERER+TWGHSIiIvJrDDtERETk1xh2iIiIyK8x7BAREZFfY9ghIiIiv8awQ1QPcS9Qqo/4viVvYdihemfUqFEYNWqUt5txXbGxsVi0aFGV5/bu3YvY2Fjs3bu3yp9vxmQy4fXXX8eWLVtc1t7aevXVVzF9+vQqzzle142+du7c6eEWA88//zz69+9f68d/9dVXGDFiBADgwoULiI2NxdChQ2GxWCpdW9O/W0+50fsTABYtWoTY2Fi89957VZ6vTQ31ej0mT56M/fv31+hxrtK/f388//zz1z2/YcMGPPLIIx5sEXkaww6RF7Vr1w7r169Hu3btqnV9Xl4e3n///So/XD1t586d6NOnzw2vmTFjBtavX1/lV2Jiooda6hpXrlzByy+/jGnTpjkd//333/HOO+94qVXuk56ejnPnzrnkuY4cOYJPPvkENpvNJc/navfddx/y8/OxYcMGbzeF3ETh7QYQNWRBQUHo2LGjt5tRY+fOncMff/yB7t273/C6Nm3a1MvXV5Vly5ahQ4cOlYKpTqfDkiVLcNddd+G2227zUutcT6VS4YUXXsCaNWsgCIK3m+NWgiBgwoQJeOWVV5CamgqNRuPtJpGLsWeH/NauXbswYsQIdO7cGV27dsXEiRORk5MjnbfZbEhPT0f//v3Rvn179O/fH/Pnz4fZbJau+eyzzzB48GB06NAB3bp1w3PPPYdLly65rI1/HeowGAyYOXMmevfujfbt22PQoEHIyMgAYB82ufPOOwEAU6dOdRpKuNlr3bRpE+Lj4/HRRx+hZ8+eSE5OxgcffIDY2FicOXPGqU2ffPIJbr/9dqfH/9WOHTvQqVMnBAUF1bkGmzZtQmxsLA4dOoQhQ4agQ4cO+Nvf/oYvv/zS6bri4mK88cYbuOuuu5CQkIDU1NRK/xIXRRHvvfce/t//+3/o0KEDBgwYgIyMjEpzRTZt2oS7774bCQkJGDx4MHbs2HHDNhYUFGDDhg1ITU2tdG7ChAkICgrC888/D6vVesPnuXr1KmbMmIEePXogISEB999/P3bv3i2ddwyNbdq0yelxfx06GjVqFJ577jmkpaWhY8eOGDNmjPT4yZMnIyUlBe3atUP37t0xefJkFBYW3rBdVXn++eexf/9+rFq16qbX7t+/HyNHjsQdd9yB5ORkTJkyBQUFBQDs7/HRo0cDAEaPHo1Ro0bhySefxODBg52e49///jfat28Pg8EgHXvttddw9913Sz9v3boVQ4cORWJiInr27IkZM2agqKhIOr9o0SIMGDAAixcvRnJyMlJSUpzOO2zYsAFxcXFYsmSJdKxfv34wGo3YuHFjNStE9QnDDvmlzZs34+GHH0Z0dDQWLFiAqVOn4qeffsK//vUvXLlyBQDwzjvv4MMPP8QTTzyBzMxMDB8+HBkZGVi2bBkA4MCBA5g8eTIGDhyId955B1OnTsWePXswceLEm/5+m80Gi8VS6etm3fivv/46du7ciSlTpiAjIwN33nkn5syZg40bNyIyMhKLFy8GADz22GPS99V5rQBgtVqRmZmJ1157DVOnTkVqairUajU++eSTSrXr3r07oqOjr9vOHTt23HQI60Z1qCoUTJgwAXfeeScWL16MVq1a4T//+Y8UQgwGA0aMGIEtW7Zg3LhxWLp0KTp37oxp06Zh+fLl0nPMmTMHc+bMQf/+/bF8+XIMGzYM8+bNw4oVK6RrcnJysGLFCjz99NNYtGgRBEFAWlqaU63+atu2bbBYLOjXr1+lc2FhYZgxYwZ+++03vPvuu9d9DqPRiH//+9/45ptv8Mwzz2Dx4sWIiorCuHHjnAJPdX3xxRcIDAzEsmXLMG7cOJSXl2P06NE4deoUXnrpJWRkZGD06NH4/PPPkZ6eXuPnv++++9C7d2+kp6fj/Pnz170uKysLDz30EDQaDd5880288MIL2LdvH0aPHg2DwYB27dphxowZAOzDmi+99BL69OmD48ePSzU3Go346aefYDab8fPPP0vPvXPnTqnmS5cuxbPPPouOHTti4cKFeOKJJ/DVV19h1KhRTgHpjz/+wI4dO5Ceno6pU6eiUaNGTu3dunUrXnzxRTz++ON44oknpONqtRr9+vXziflw5HocxiK/Y7PZMG/ePKSkpGD+/PnS8U6dOuGee+5BRkYGJk+ejH379qF9+/a47777AADJycnQarUIDg4GYA87Go0GjzzyCFQqFQAgJCQEv/76K0RRvGHX/tKlS7F06dIat33fvn3o2bMn7r33XgBA165dERAQgPDwcKhUKtx+++0AgObNmyM+Pr7ar9Xh0UcfRd++faWfBwwYgE8//RRPP/00BEFAbm4u9uzZg7lz5163jQaDAVlZWZg6depNX89DDz1U5fHbbrsNn332mdOxUaNGSR8+vXr1wpAhQ7BkyRL06dMHmzZtwvHjx7Fu3Tpprk+vXr1gsViwdOlSPPDAA5DJZFi1ahVGjhyJSZMmAQB69OiB/Px8ZGVlYcKECQDs748lS5agdevWAOwfcg899BB+/vlnqefsr/bs2YPWrVsjMDCwyvP33HMPvvjiCyxevBj9+/evcjjrk08+wdGjR/F///d/uOOOOwAAvXv3xqhRozBv3rwa9ygolUq8/PLL0nvzyJEjiIqKwn//+180a9YMANCtWzccOnQI+/btq9FzO8yaNQupqal44YUXsHr16irf8/Pnz0erVq3w9ttvQy6XAwDuuOMO3Hvvvdi4cSMefPBBtGnTBoB9WLNNmzbQ6XQAgN27dyM1NRUHDx6EXC5Hq1atkJWVhW7duiE7Oxtnz55Fv379UFRUhGXLluH++++XghMAtG3bFg8++KD0ewDAYrFgypQp6NKlS6W2fvvtt5g8eTIeeeQRpKWlVTqfkJCArVu3oqSkxCW9luQ7GHbI75w5cwb5+fmVemCaN2+OxMRE6X/8Xbt2xfz58zFixAj0798fffv2xciRI6Xrk5KSkJ6ejtTUVNx9993o06cPUlJSqtWjcf/99+P++++vdPz333/HSy+9dN3Hde3aFevWrUNubi769OmDPn36OP3rs7av1cERlhyGDRuGzz77DPv370dSUhI2b96MwMBADBgw4Lq/c8+ePYiIiJA+wG7k5ZdfrnLydVVzIoYMGSJ9LwgCBgwYgEWLFsFgMGDfvn1o2rRppUnNgwcPxoYNG3Do0CEIggCLxYKBAwc6XfPXFWOhoaFS0AGAmJgYAPZhsuvJzs6WrruemTNn4p577sHUqVOxfv36Sud3796Nxo0bo127dk4TzPv164c5c+ZUOdxyI7feeqsUdAD73+3atWths9lw9uxZnDt3DidPnsTp06drPaE9KioKU6ZMwfTp07F69WppOMqhvLwchw4dwtixYyGKovR7mjVrhtatW2PXrl1SCPmzyMhIxMfH48cff0Rqaip2796NTp064ZZbbpHeszt37oROp0Pnzp2xa9cumEymSsOIXbp0QdOmTbFv3z6n3/PX9zlg/29v69atiIyMxNNPP13l623atCmsVityc3Or9f6m+oNhh/zO1atXAQARERGVzkVERODw4cMAgHHjxiEwMBAbN27EvHnzMHfuXNx2222YPn06unXrhsTERKxYsQLvvfceVq5ciRUrViAiIgKPPvroTZe+R0ZGIiEhodLxsrKyGz5u2rRpiIqKwqeffopZs2Zh1qxZSExMxMyZMxEXF1fr1+oQEBDg9HO3bt0QExODzZs3S2HnnnvugVqtvm4bd+zYgV69et3wdTi0atWqyjpUJTIy0unn8PBwiKIIvV6PoqIiNG7cuNJjHK9br9dL83LCwsJu+Hv+WgNHb8WNhhhLSkqg1Wpv+Lzh4eF48cUXMXHiRGRkZEi9Nw5Xr15Ffn7+dVfe5efn12hibFW9TCtXrsTy5ctx9epVREREoH379tBqtTcMcjfzz3/+E19++SUWLFhQaRhPr9fDZrPhnXfeqXJF2o3eR3369JGGUHfv3o0BAwYgOjoan3zyCUwmE77//nv06tULCoVCCoLXe5//9fVVVZvjx4+jb9+++O677/DBBx9U+d+w471Rl3qRb+KcHfI7ISEhAIDLly9XOpefn4/Q0FAAgEwmw4MPPohNmzZh165deOONN2AymfDUU0/BZDIBsA+VZGRkICsrC8uXL0fbtm3x6quv4pdffnFL21UqFR577DF88cUX+PbbbzFjxgxkZ2dfd55QdV/r9QiCgCFDhuDrr7/Gb7/9hjNnzkjDetdTnSXnteEIbg6XL1+GXC5HSEgIGjVqhPz8/EqPcRwLDQ2VhkYcE2Md/vjjD+zZs8dp4nlNhYaGVusDMDU1FXfddRcWLVqEU6dOOZ0LDg5Gy5YtsWHDhiq/YmJipOD11zlNNwvJALBlyxbMnj0b48ePx+7du7Fr1y68/fbbaNmyZfVf6HW8+uqrkMvleOGFF5wmewcGBkIQBIwZM6bK1zR79uzrPmffvn1x8eJF/P777/j999+RnJyMrl27wmg0Yv/+/di7d6805OqYd1Pb9zlg/2/57bffxj333IMFCxZUOQHfEaqq83xUvzDskN9p1aoVGjduXGlOSHZ2Nn7++Wd06tQJAPDAAw/g1VdfBWD/V/nQoUPx4IMPQq/Xo6SkBP/9739x3333QRRFaLVa9OvXD1OmTAFg/wB1NYPBgLvvvhuZmZkAgFtuuQUPPvgg7r33Xun3OeZE1PS13sjQoUOh1+vx3//+F61bt67UI/Fnp06dQl5eHrp161bTl3dTX3/9tfS9KIrYtm0bOnfuDJVKhaSkJFy8eBE//fST02M+/fRTKJVKdOjQAR06dIBSqcS3337rdE1mZiaeffbZSrWriVtuueWGq9P+7OWXX0ZAQAAWLFjgdDw5ORk5OTkIDw9HQkKC9LVr1y68++67kMvl0jyRP6/4M5vN1QrXBw4cgE6nw7hx46TerdLSUhw4cKDO+9tER0djypQp2LdvH7755hvpeFBQEOLj43H69Gmn13Tbbbdh0aJF0irDqmqfkJCAsLAwLF26FGq1Gu3bt0dkZCRuvfVWLF68GEajEb179wZgnwOkUqkqvc/379+PP/74o1rvc0ev0NSpUyGXyzFz5sxK11y6dAlyuRxNmjSpdm2ofuAwFtVLubm5Ve7w2rZtW/To0QPPPvsspk6diokTJ2Lw4MEoLCzE4sWL0ahRI2mZblJSEjIzMxEREYHExERcunQJK1euRHJyMsLCwtCtWzesXLkSzz//PAYPHgyz2Yx3330XISEhbvmw12g0aNeuHRYvXgylUiktC//444+l5beOydO7d++Wgkl1XuuN3HLLLejRowd++OEHPPfccze8dufOnUhKSqo0FHQ9J0+evO5QRuPGjdG0aVPp5zlz5sBoNKJVq1b46KOPcOrUKbz//vsA7IFs7dq1eOKJJ5CWloaYmBhs374dGzduxJNPPin16owePRrvvfceVCoVkpOTcejQIXz44YeYPHkyZLLa/9uuZ8+e+OKLL1BcXCz9HVxPREQEpk2bJk2Sdhg6dCjWrFmDMWPG4NFHH0V0dDR+/PFHvPPOOxg5ciSUSiUaNWqExMRErF69Gi1atECjRo2watUqGAyGm9a8Q4cO+PDDDzF79mz069cPeXl5yMjIwOXLlyutSKqN+++/H19++SV27dol1RsAnn32WTzyyCPS+8+x6u/QoUN4/PHHAVx733733Xdo1KgR4uLiIJPJ0Lt3b2zevBkpKSlQKOwfR127dsWHH36ILl26SD2XISEheOSRR7BkyRIolUr069cPFy5cwFtvvYU2bdo4zfe6mcjISDzzzDN45ZVX8NlnnznNAzpw4AC6dOly0yFLqn8YdqheOn/+PN54441Kx4cNG4YePXpg6NChCAwMxNtvv40nnngCQUFB6NWrF5599llp7sfTTz8NlUqFjRs3YsmSJQgODkb//v2lIaM+ffpg3rx5yMzMxJNPPglBENC5c2esWrVK+p+wq73yyit48803kZmZifz8fISHh2PYsGHShMqgoCCMGTMG69evx44dO7Br165qvdab6du3L3bv3o2///3vN7yupkNYr7zyynXPjR492mk34pkzZ+Ltt99GdnY24uPjkZmZKa2o0Wq1WL16NebPn4+33noLJSUluPXWW/Haa69h2LBh0nNMmjQJ4eHhWLduHd59913ExMTgxRdfxAMPPFDtNlelX79+UCgU+P7773HPPffc9PrBgwfjiy++wPbt26VjAQEB+OCDDzB//nzMnTsXxcXFaNq0KSZOnIiHH35Yum727NmYNWsWpk+fjqCgIAwbNgydO3fGRx99dMPfOWTIEFy4cAEbN27E2rVr0aRJE/Tp0wcjRozAiy++iFOnTjlNzK6NV199tdIk4ZSUFGRkZGDx4sVIS0uDUqlEu3btsHLlSmlDydtuuw2pqan44IMP8P3330s9NH369MHmzZvRtWtX6fkcYefPqwYB4KmnnkJERATWrFmD9evXIyQkBIMGDcJ//vOfaodvh+HDh2Pz5s147bXX0LNnT4SGhsJoNGLv3r34z3/+U+O6kO8TRN6ZjajBGzduHNRqtdMma56yadMmTJ06Fd98881NVzx506xZs3DixIlqbbJH9c/mzZsxb948fP3119xB2Q+xZ4eoAVuyZAnOnDmDH374AWvXrvV2c3zao48+invvvRe//PILOnTo4O3mkAvZbDapB5dBxz9xgjJRA7Z9+3bs2LEDkydPrtYkz4ascePGmDlzJl5//XVvN4VcbOPGjWjcuHGdhzvJd3EYi4iIiPwae3aIiIjIrzHsEBERkV9j2CEiIiK/xrBDREREfo1Lz2Hfmt5mc888bZlMcNtzkzPW2nNYa89hrT2H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ROQ6DDs+SM0JykRERC7DsOODru2zw54dIiKiumLY8UEq3giUiIjIZRh2fBBXYxEREbkOw44PurYai8NYREREdcWw44NUvBEoERGRyzDs+CBHz47VJsJiZe8OERFRXTDs+CC18tpfi5l77RAREdUJw44PUshlECq+51AWERFR3TDs+CBBEK7ttcOeHSIiojph2PFRjqEsk4k9O0RERHXBsOOjrvXsMOwQERHVBcOOj+JeO0RERK7hsrDz22+/Ydu2bdDr9a56ygaNe+0QERG5Rq3CTl5eHkaNGoWlS5cCANasWYN//vOfSEtLw8CBA3HixAmXNrIhknp2OEGZiIioTmoVdubOnYszZ84gISEBNpsNy5cvR48ePbB582a0adMG8+fPd3U7GxzpZqDs2SEiIqqTWoWdH374AVOmTEGvXr1w8OBBXL58GaNHj0ZcXBzGjRuH/fv3u7qdDQ5vBkpEROQatQo7ZWVliIqKAgDs3LkTKpUK3bp1AwCoVCqIoui6FjZQKgUnKBMREblCrcJOy5YtsX//fpjNZnz11VdITk6GWq0GAHz66ado2bKlK9vYIKk5jEVEROQStQo748ePx+LFi9G9e3dkZ2djzJgxAIBhw4bh008/xdixY13ayIaI++wQERG5hqI2D0pNTUV0dDQOHDiA5ORkdOzYEQCQlJSEtLQ09O7d25VtbJCuTVDmMBYREVFd1CrsAEDnzp3RuXNn6WeLxYIJEyYgJCTEFe1q8K7N2WHPDhERUV3UahjLYrFg8eLF2LJlCwBg79696NmzJ7p3745///vfKCoqcmkjGyKuxiIiInKNWoWdhQsXYtmyZdJuya+++ipCQkIwdepUnD9/nvvsuACHsYiIiFyjVmHn888/x7PPPosHH3wQp06dwokTJ/DYY49h9OjReOaZZ7B9+3ZXt7PBubaDMnt2iIiI6qLWt4u44447AADfffcdZDKZNCk5KioKxcXFrmthA8V9doiIiFyjVmEnMjISFy5cAABs374dt99+O8LCwgAAP/30k7ThINUe99khIiJyjVqFndTUVLzxxhsYO3YsDhw4gPvuuw8A8Nprr2HRokX429/+5tJGNkTX9tlhzw4REVFd1Grp+X/+8x8EBAQgKysLEydOxIgRIwAAv/76Kx5++GE8/vjjLm1kQ8QbgRIREblGrcKOIAiYMGECJkyY4HR8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zGg0iomJieIHH3wgHSsqKhI7dOggbtmyxYstq//Onj0rtm3bVty/f790zGaziXfddZf45ptvii+++KI4bNgwp8c8++yz4sMPP+zppvqV+fPni6NHj3YKO8uXLxdTUlJEs9nsdN3AgQO91cx6y2azif369RNnz57tdPzhhx8Wly9fLm7ZskVs3769ePXqVencunXrxE6dOvEfULUwePBg8Y033pB+Li4uFtu2bSt+9dVXfF/XUW5urjhhwgSxY8eO4qBBg5zCzs1q6+7PTg5judjRo0dRWlqK7t27S8d0Oh3i4+ORlZXlxZbVf6GhoVixYgUSEhKkY4IgQBAE6PV67N+/36nuANCtWzccOHAAoih6url+ISsrC+vXr8fs2bOdju/fvx/JyclQKBTSsW7duuHs2bO4fPmyp5tZr505cwYXL17E3/72N6fjGRkZmDBhAvbv34927dqhUaNG0rlu3bqhpKQER44c8XRz673w8HB8++23uHDhAqxWK9avXw+VSoW4uDi+r+vo999/h1KpxKeffoo77rjD6dzNauvuz06GHRfLzc0FAERHRzsdj4yMlM5R7eh0OvTp0wcqlUo69tVXX+HcuXPo1asXcnNzERUV5fSYyMhIlJeXo7Cw0NPNrff0ej0mT56M6dOnV3o/X6/WAJCTk+OxNvqDM2fOAADKysowduxYdO/eHf/85z+xfft2AKy1q02bNg1KpRJ33nknEhISkJ6ejoULF6J58+asdR31798fixYtQrNmzSqdu1lt3f3ZybDjYuXl5QDg9IEMAGq1Gkaj0RtN8lsHDx7E1KlTMXDgQPTt2xcGg6FS3R0/m0wmbzSxXps5cyYSExMr9TgAqLLWarUaAPg+r6GSkhIAwJQpU5CamorMzEz07NkTjz/+OHbv3s1au9jJkycRHByMJUuWYP369Rg6dCiee+45HDlyhLV2o5vV1t2fnYqbX0I1odFoANg/XB3fA/a/TK1W661m+Z2vv/4azz33HDp16oR58+YBsP9H8ddQ4/iZta+ZzZs3Y//+/diyZUuV5zUaTaVaO/6HFBAQ4Pb2+ROlUgkAGDt2LIYMGQIAuP3223H48GGsXLmStXahnJwcTJw4Ee+99x66dOkCAEhISMDJkyexaNEi1tqNblZbd392smfHxRxdcHl5eU7H8/Ly0KRJE280ye+sWbMGTz31FPr1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",
93
- "text/plain": [
94
- "<Figure size 640x480 with 1 Axes>"
95
- ]
96
- },
97
- "metadata": {},
98
- "output_type": "display_data"
99
- }
100
- ],
101
- "source": [
102
- "# using seaborn default styling\n",
103
- "sns.set()\n",
104
- "\n",
105
- "# plotting loss history / Epoch\n",
106
- "# this works super easily b/c loss\n",
107
- "# is automatically tracked at each epoch\n",
108
- "# inside of the API\n",
109
- "plt.plot(loss_hist)\n",
110
- "\n",
111
- "# setting axis labels\n",
112
- "plt.title(\"Loss History / Epoch (Neural Network)\")\n",
113
- "plt.ylabel(\"Loss\")\n",
114
- "plt.xlabel(\"Epoch\")\n",
115
- "\n",
116
- "# showing the plot\n",
117
- "plt.show()"
118
- ]
119
- }
120
- ],
121
- "metadata": {
122
- "kernelspec": {
123
- "display_name": "Python 3 (ipykernel)",
124
- "language": "python",
125
- "name": "python3"
126
- },
127
- "language_info": {
128
- "codemirror_mode": {
129
- "name": "ipython",
130
- "version": 3
131
- },
132
- "file_extension": ".py",
133
- "mimetype": "text/x-python",
134
- "name": "python",
135
- "nbconvert_exporter": "python",
136
- "pygments_lexer": "ipython3",
137
- "version": "3.11.2"
138
- }
139
- },
140
- "nbformat": 4,
141
- "nbformat_minor": 2
142
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
example/main.py ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import matplotlib.pyplot as plt
2
+ import seaborn as sns
3
+ import requests
4
+ import json
5
+
6
+ ENDPOINT: str = "https://data-mining-from-scratch-backend.onrender.com/"
7
+
8
+ request_params = {
9
+ "algorithm": "neural-network",
10
+ "arguments": {
11
+ "epochs": 100,
12
+ "activation_func": "tanh",
13
+ "hidden_size": 8,
14
+ "learning_rate": 0.01
15
+ }
16
+ }
17
+
18
+ headers = {
19
+ "Content-Type": "application/json",
20
+ }
21
+
22
+ r = requests.post(
23
+ ENDPOINT,
24
+ headers=headers,
25
+ data=json.dumps(request_params),
26
+ )
27
+
28
+ model = r.json()
29
+
30
+
31
+ def plot():
32
+ sns.set()
33
+ plt.plot(model["loss_history"])
34
+ plt.xlabel("Epoch")
35
+ plt.ylabel("Loss")
36
+ plt.title("Loss History")
37
+ plt.show()
38
+
39
+
40
+ if __name__ == "__main__":
41
+ plot()