Skip to content

Instantly share code, notes, and snippets.

@marty1885
Created April 11, 2020 02:10
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marty1885/4dea496da91124ae845dd4ee756cf5fe to your computer and use it in GitHub Desktop.
Save marty1885/4dea496da91124ae845dd4ee756cf5fe to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is an experiment to decode HTM Grid Cell encoders using Machine Learning. I've been thinking about this problem for quite a long time - Grid Cells provide a low ambiguous, deterministic way to encode real values into SDR. But unlike Scalar Encoder, there's no known way to decode a GridCell. (Yeah, we could use a SDR classifer, but that sucks, It's slow and all...) So here we go. Let's try to decode GridCells using ML!"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import math\n",
"import random\n",
"import matplotlib.pyplot as plt\n",
"from sklearn import linear_model\n",
"import seaborn as sns\n",
"\n",
"# initalize stuff\n",
"sns.set_style(\"whitegrid\", {'axes.grid' : True})"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [],
"source": [
"# A python version of Etaler's GridCell encoder, simplifed\n",
"def gcm1d(v, scale, bias, num_cells):\n",
" res = [0]*num_cells\n",
" loc = math.fmod(v*scale+bias, num_cells)\n",
" if loc < 0:\n",
" loc += num_cells\n",
" idx = ((int(loc) + 1 if math.fmod(loc, 1) > 0.5 else 0) % num_cells)\n",
" res[idx] = 1\n",
" return res\n",
"\n",
"def grid_cell_1d(v, num_gcm=16, length_per_gcm=16, scale_range=(0.1, 0.25), seed=42):\n",
" rng_state = random.getstate()\n",
" \n",
" res = []\n",
" random.seed(seed)\n",
" scale = lambda : random.uniform(scale_range[0], scale_range[1])\n",
" bias = lambda : random.uniform(0, length_per_gcm)\n",
" for _ in range(num_gcm):\n",
" gcm = gcm1d(v, scale(), bias(), length_per_gcm)\n",
" res += [gcm]\n",
" \n",
" random.setstate(rng_state)\n",
" return np.array(res).flatten()"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"def make_dataset(left, right, num):\n",
" \"\"\" \n",
" This function should be self explantory. It generates `num` examples of data\n",
" ranging between `left` and `right`\n",
" \"\"\"\n",
" x = [None]*num\n",
" y = [None]*num\n",
" for i in range(num):\n",
" v = random.uniform(left, right)\n",
" x[i] = grid_cell_1d(v)\n",
" y[i] = v\n",
" return x, y"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The model\n",
"Ignoring the boring experimenting progress. The result is as follows\n",
" * Ridge and BayesianRidge **rocks**\n",
" * They run fast and is resistant to noise\n",
" * Linear Regression works, but is too fragil to noise\n",
" * PassiveAggressiveRegressor is okay but slow\n",
" * Lasso and ElesticNet *failed spectacularly*\n",
" * ARDRegression takes forever\n",
" \n",
"Also remember to generate enough traning samples to make the model robust."
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,\n",
" normalize=False, random_state=None, solver='auto', tol=0.001)"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x, y = make_dataset(-50, 50, 10000)\n",
"model = linear_model.Ridge()\n",
"model.fit(x, y)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [],
"source": [
"yp = model.predict(x)"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEICAYAAAC6fYRZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOydeWBU1fn+P/fOngxZSSCQiICoLGULSwAVGhAFWfwVXAELKCEoxQ2qraK1WFuKbV0hhFpUcEFB8Su4s1oRlBBLKwGRRROWbCQhmcx2587vj8lcMsxMCCQBEs7nr8zce885N5m898xz3vO8ktfr9SIQCASCFol8oQcgEAgEgqZDBHmBQCBowYggLxAIBC0YEeQFAoGgBSOCvEAgELRgRJAXCASCFowI8pcIO3bs4LrrrrvQw2gUXnzxRebOnXuhh3HBSE9PZ9u2bQBkZWXx2GOPNXmfTfX5ee+997jjjjsavV3BKfQXegCCQNLT0ykpKUGn0xEREcG1117L/PnziYyMbNJ+v/jiC1588UXy8/MxGAxcffXV/OlPfyI5OZkXX3yRrKwsjEYjAImJiQwZMoTMzEwSExMBXxD49a9/jcVi0c7JyMhgwoQJTTruS53MzMx6nffoo4/Spk0bHnzwwSYekeBiQ8zkL0KysrLIzc1l7dq17Nmzh+zs7Cbt76effuKRRx7h0UcfJScnhw0bNnDnnXciy6c+HqNGjSI3N5dvvvmGl156iZKSEn71q19RVFSknZOYmEhubi67du3i97//PfPnz+fgwYNNOvbmjqIoF3oIghaOCPIXMQkJCVxzzTXk5eVp73333Xfcfvvt9OvXj3HjxrFjxw7t2Jo1axg1ahR9+vRh+PDhvP322/XqJy8vj+TkZAYNGoQkSVitVm644QbatWsXdK7BYKBLly784x//IC4ujuXLlwedI0kSQ4cOJTo6mn379oXs8+6772blypUB740bN47PPvsMgKeffpqhQ4fSt29ffvWrX7Fz586Q7YSSEWrLGaqqkp2dzYgRIxg4cCD3338/5eXlIdsaNWoUmzZt0l4risLAgQP5/vvvcTqdzJ07l4EDB9KvXz8mTJhASUlJyHbS09NZunQpo0ePpn///vzud7/D6XQGjDc7O5shQ4bwu9/97oxjXLt2Lb/85S8ZOHAgS5YsCejrdOlq586d2udj6NChvPfee6xatYoPP/yQV155hT59+miz/8LCQn7zm9+QlpZGeno6r7/+utaOw+Hg0UcfpX///owePZr//ve/Ie8V4IknnmDhwoUB782aNUv7bPjvrU+fPowePZrPP/88ZDsFBQVcddVVAQ++KVOm8O6772qvV69ezahRo+jfvz933303R44cCTsugQ8R5C9ijh8/zpdffslll10G+P4pZ86cyaxZs/jmm2945JFHmDNnDidOnAAgPj6epUuXsmvXLv785z/z5z//me+///6M/XTv3p2DBw/yzDPPsH37dmw22xmv0el0DB8+PGTwVVWVDRs2UFZWRocOHUJeP3bsWNatW6e9/vHHHzl69CjDhg0D4Be/+AVr167lm2++YcyYMdx///1aoDwbXn/9db744gtWrlzJl19+SXR0NH/84x9DnnvTTTcFjOnf//43sbGxdO/enffff5+qqio2b97Mjh07eOqppzCbzWH79QfVzz//nEOHDrF48WLtWElJCRUVFWzatIkFCxbUOcYff/yRp556ir/+9a98+eWXlJeXc/z48ZB9Hj16lBkzZjB58mS+/vpr1q5dS9euXbntttsYO3Ysd999N7m5uWRlZaGqKrNmzeKqq65i69atvPbaa7z22mt8+eWXALz00kv8/PPPfP7557zyyiusXbs27L2OHTuWjz76CL9DSkVFBV999RWjR48GICUlhTfeeIOcnBxmz57NvHnzAr4B1pcvvviCpUuX8tJLL/H111+TmprKww8/fNbtXGqIIH8Rct9999GnTx+GDh1KXFwcc+bMAeCDDz7guuuuY+jQociyzJAhQ+jRowdbtmwBYNiwYVx22WVIksSAAQMYMmRI2BlwbVJSUlixYgWFhYU88MADpKWl8eijj54x2CcmJlJRUaG9Lioqol+/fvTs2ZPZs2fz6KOP0q1bt5DXjhgxgr1792ozsQ8//JDrr79e0/3Hjx9PbGwser2e6dOn43K5OHTo0Jl/eaexatUqHnzwQdq2bYvRaGT27Nl8+umnIWWSsWPHsnHjRux2uzamMWPGAKDX6ykvL+enn35Cp9PRo0cPrFZr2H4nTZpEUlISMTExzJo1i/Xr12vHZFlmzpw5GI1GzGZznWP85JNPGDZsGP3798doNHL//fcHyGi1+fDDDxk8eDBjxozBYDAQGxtL165dQ5773//+lxMnTjB79myMRiMpKSnceuutfPTRRwB8/PHHZGZmEhMTQ1JSElOmTAl7r/369UOSJO2z9umnn9K7d2/atGkD+L4htWnTBlmWGT16NB06dGD37t1h2wvH22+/TUZGBp07d0av15OZmUleXp6YzZ8BsfB6EfLyyy8zePBgvvnmGx5++GHKysqIiori6NGjfPLJJyElBYAtW7bw8ssvc/jwYVRVxeFwcOWVV9arz969e/P8888DsHv3bh588EGysrLqnCkVFhYSHR2tvU5MTGTr1q24XC6effZZtm/fztSpU0Nea7VaGTp0KOvXrycjI4P169ezYMEC7fi//vUv3n33XYqKipAkiaqqKsrKyup1L7U5evQo9913X0BglGWZ0tJSLQj56dChA507d2bTpk388pe/ZOPGjdoMdvz48Rw/fpyHHnqIkydPMm7cOB588EEMBkPIfpOSkrSf27VrFzBzjY2NxWQy1WuMRUVFtG3bVns/IiKCmJiYkH0eO3ZM+9Z3Jo4cOaI9lP14PB7tdVFRUdA9hEOSJEaPHs26devo378/H374IePGjdOOr127luXLl2vBuLq6+pz/ls8880yANOT1eiksLKR9+/Zn3d6lggjyFzEDBgzgV7/6FQsXLmTx4sUkJSUxfvx4nn766aBzXS4Xc+bMYeHChQwfPhyDwcC9997LuZiM9uzZk5EjR7J///6w56iqyqZNmxg8eHDQMaPRyNy5c7nxxhv54osvGDFiRMg2xowZw0svvUT//v1xOBzaw2rnzp0sW7aMV199lS5duiDLMv379w95LxaLBYfDob32eDyafAXQtm1bnnnmGVJTU+t172PGjGHdunWoqsoVV1yhyU0Gg4HZs2cze/ZsCgoKyMjIoGPHjtxyyy0h2zl27Jj289GjR7UsJPAFxdrUNcbExEQOHDigvbbb7WHXFJKSksLOkE/vMykpieTkZG0N5HQSEhI4duwYXbp0CbqfUIwZM4bp06eTkZHB7t27efnllwHfw+Txxx/n1VdfpU+fPuh0OsaPHx+yjYiICMC3HuD/llRcXBww5szMzIAHiODMCLnmIufXv/4127ZtIy8vj3HjxrFp0ya+/PJLPB4PTqeTHTt2cPz4cVwuFy6Xi7i4OPR6PVu2bOGrr76qVx87d+7knXfeobS0FIADBw6wceNGevXqFXSu2+3m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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.title('Real SDR value vs predicted value')\n",
"sns.scatterplot(y, yp)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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hz/Az88Pd911F2699VbrPbZv347f/e53GDBgABQKBaZMmQI/Pz8cP368xX2vTalUorKyEqdOnYIQAj169IBGo7H72ocffhh+fn4YMWIEAgMD8csvv8BsNmPfvn3405/+BLVajVtuuQUpKSmN3nf69OkIDg6GSqXCn/70J/z444+oqKhoVptzcnJwww03YNq0aVAqlejXrx/GjRuHzz77zNrOgoICXL16FR07dkS/fv1a9D155JFHEBAQgN69e6N3797WT0x79+5FWloaOnbsiMjISMyZM8fuNex9X4UQ2LFjB5544gmEhIQgODgYaWlpyMrKalEbfQFz8u3A+fPn8fDDD0Muv/aeK5fLUVpaismTJ6OoqAiPPvoorly5gkmTJmHRokXw8/Nr1rVrB+6AgABUVVUBAIqLixEZGWl9TiaT1fm6uTp16mT9f7Vabb3++fPn8emnn2L//v3W500mE4YOHdqstvr7+zfa9s6dO1ufk8vliIqKglarhUKhQEREBGQymfX52q89f/48du/ejXfeecf6mNFoRHFxcYv6XV9CQgJmzpyJFStW4Pz58xgzZgyWLVtm8w05JCQESuW1Pz3L9+3SpUswmUyIioqyPlf7/+szm81Yu3YtPv30U1y6dMn6+1NWVoYOHTo02eZz584hNzcX8fHxda5pSce99tprWL9+PV566SVER0dj8eLFiI2Nbfqb8ZvaP7/avxvFxcV1+tXY752976ter4dOp8PUqVOtrxVCQJKkZrfPVzDItwORkZF47rnnEBcXZ/P5Rx55BI888ggKCwuRmpqKm2++GTNmzHDonp06daqTpxRCoKioyO7rawfN5oiKisLkyZOxatWqVrfRHo1GY83LAjVtv3DhgjW4a7VaCCGsbT5//rx1xVFUVBTmz5+PBQsWtPi+arUaOp3O+nVJSUmd5+fMmYM5c+agtLQU6enp2Lx5M9LT05t9/bCwMCiVShQVFeHmm28GAFy4cMHu6z/++GNkZ2djy5Yt6NKlCyoqKjB48GCIZhaWjYqKwuDBg7Flyxabz8fExGD9+vUwGo149913kZ6ejgMHDrT4d6G+Tp06oaioCLfccgsANPp7B9j+vi5cuBABAQHIyspCREREg3/jaBu9CdM17cB9992HV155BefOnQMAXLp0CV988QUA4Ntvv0V+fj7MZjOCg4OhVCqhUCgA1IyUWrsmfsSIEcjPz8cXX3wBk8mEd999t0HQqi08PBznzp1r9khp0qRJ2L9/P7766iuYzWbo9XocOXKkyT/o5hg/fjwOHDiAb775BkajEW+++SZUKhViY2MxcOBAKJVKbNu2DSaTCfv27cN///tf67+dMWMG3n//fXz//fcQQqCqqgo5OTm4evVqk/ft06cPPv/8c+h0Opw5cwaZmZnW53Jzc62pIrVaDZVKZf05NZdCocCYMWPw97//HTqdDidPnsRHH31k9/WVlZVQqVQIDQ2FTqfDyy+/3Oj16/++jBw5EqdPn8bu3bthNBphNBqRm5uLkydPwmAw4F//+hcqKirg5+eHoKAga3/Cw8NRXl7e7LRQfePHj0dGRgYuX74MrVZb51NVffa+r3K5HDNmzMBzzz2H0tJSAIBWq8VXX33llDZ6Ewb5dmDOnDlISkrC/fffj9jYWNxzzz3Izc0FUDNaXLhwIeLi4jBhwgQMGTLE+nF6zpw5+OyzzzB48OAWj5jDwsLw6quvYs2aNRg6dCgKCgrQv39/u2mgu+66CwAwdOhQTJkypcnrR0VFYd26dcjIyEBCQgJGjBiBN954wykfp7t37441a9Zg5cqVGDZsGPbv348NGzZApVJBpVLh9ddfx65duzB48GB88sknGDNmjPXf3nrrrVi5ciVWrFiBwYMHY+zYsfjwww+bdV9Lnv+2227DsmXLMHHiROtzlZWV+Mtf/oIhQ4bgzjvvREhICO6///4W92358uWoqKhAYmIiHnvsMSQnJ0OlUtl8bUpKCjp37ow77rgDycnJGDhwYKPXrv/7EhwcjDfeeAOffPIJ7rjjDtx+++148cUXYTAYANTMqyQlJWHQoEF4//338cILLwAAevTogeTkZIwePRrx8fEtXrny8MMPIzIyEqNGjcLcuXMxbtw4u31s7Pu6dOlSdOvWDffccw8GDRqEuXPn4pdffnFKG72JTDT3sx15NUmSMHz4cLz44osYNmyYu5tDv1mzZg1KSkqwevVqdzfFZd577z188sknjY7oqfU4kvdhX331Fa5cuQKDwYANGzYAQJOjQXKtkydP4scff4QQArm5ucjMzKzzScQbFBcX4+jRo5AkCadOncKWLVswevRodzfLa3Hi1YcdP34cS5YsgcFgwC233IJ//OMfCAgIcHezfFplZSUWL16M4uJihIeH4/7778eoUaPc3SynMhqNePrpp1FYWIgOHTogOTkZv//9793dLK/FdA0RkRdjuoaIyIu1q3TN8ePH4e/v7+5mtJher/fIdjuK/fY9vtr39t5vvV5vdz6tXQV5f39/9OnTx93NaLG8vDyPbLej2G/f46t9b+/9tpQTsYXpGiIiL8YgT0TkxRjkiYi8GIM8EZEXY5AnIvJi7Wp1DRGRp5MkgdJKAwwmM1RKBcKDVJDL3Vf6mEGeiKgFJEmgXGeAzmCGWQgE+ClwfZA/5HIZJEkgX1uBB7f9B4VlOnQJVWPTnHhER3RwW6BnuoaIqJkkSeB0aSXyiyrwu43fYvgLOZi67jDytRXWEbwlwANAYZkOD277D0orDW5rM4M8EVEzlVYacKa0Ckszc20GcoPJbH3corBMB4PJ7I7mAmCQJyJqNoPJjECVwm4gVykV6BKqrvNcl1A1VMqWnRLmTAzyRETNpFIqUGUw2w3k4UEqbJoTb33ekpMPD7J98lVb4MQrEVEzhQep0C08EGumx1hTNrUDuVwuQ3REB+x6KJGra4iIPI1cLsNN4UEICfTDB6nDYBZAgJ/currG8ppOHdpPxUoGeSIiNH99u1wuQ1iQPxDkhka2AoM8Efk8R9a3t7fNT/Vx4pWIfF5r17db3hymrDuExNX7MWXdIeua+faCQZ6IfF5r17c7Y/OTJAlcrNDjXFkVLlbonf4GwXQNEfk8y/r22oG+OevbHd381BZlEJw2kjebzUhJSUFaWhoAoLy8HPPmzcPYsWMxb948XL582Vm3IiJyqtaub3d081NblEFwWpDftm0bevToYf1648aNSEhIwL59+5CQkICNGzc661ZERE5Ve337oWV3YtdDic0aTTu6+aktyiA4JcgXFRUhJycH06dPtz6WnZ2NlJQUAEBKSgq++OILZ9yKiKjVJEmguKIav16qxLmyKlyqvJYDt6xvvyE0EJ06+DcrXdLaNweLtiiD4JSc/HPPPYelS5eisrLS+lhpaSk0Gg0AQKPR4NKlS01eR6/XN3rqeHtVXV3tke12FPvtezy57/4BAajyC8H8d49Z899rpsegU7Af5FWXoK+utvtvW9Lvkha2acPM2Dpt2jAzFhUl51FSaL89LeFwkN+/fz/CwsLQv39/HDlyxKFr+fv7o0+fPo42qc3l5eV5ZLsdxX77Hk/u+8UKPeasO1Qn/700MxcrJ/dH/xs646Ygld317q7styQJG2UQQlt0jcbegBwO8t999x2+/PJLHDx4EHq9HlevXsWSJUsQHh6O4uJiaDQaFBcXIywszNFbERG1mr38d6BKAYPJ7LbDPlxdBsHhnPzixYtx8OBBfPnll3j55ZcxbNgwvPjii0hKSsLu3bsBALt378aoUaMcbiwRUWvZy39XGcyQyWTt7rAPZ3HZZqjU1FQcOnQIY8eOxaFDh5CamuqqWxERNcnWSpg102PQLTwQChna3WEfzuLUzVBDhw7F0KFDAQChoaF46623nHl5IqJWs6yE+fCh21BtlKCQAWqVAiHqmlx8azZDeQKWNSAir9FUiQC5XAZNhwDcGBaIG0IDEfZbieD2eNiHs7CsARF5hZaWCJAkgXKdATqDGWYhEB6kwr8eSYTO0D6rSbYWR/JE5BVaUiJAkgROl1Yiv6gCv9v4LYa/kIOp6w9De0WPqI7qZm+G8gQM8kTkFVpSIqC00oAzpVXWI/wsr/WWFTW1McgTkceqnYOXyWTNLhFgMJkRqFJ47Yqa2piTJyKPVD8HP7avBhtmxWH+O0cbHLBdn0qpQJXB7LUrampjkCcij1Q/B7/vRDEAYHtaAoQQjU6ehgep0C08EGumx1hTNt60oqY2Bnki8ki2cvD7ThTj6YkCN4QGNvpv5XIZbgoPQkigHz5IHQazAAL85Lg+yHsmXC0Y5InII7X2NCcLuVyGsCB/IMhVLWwfOPFKRB7JmzcwORNH8kTkkWof2GGrPDDVYJAnIo/l6jK93oDpGiIiL8aRPBG5jSQJu6cxkXMwyBORW7S0oBi1DtM1ROQWLSkoRq3HIE9EbtGSgmLUegzyROQW9s5c9bbaMe7GIE9EbuHqzUxNnRLlKzjxSkRu4crNTJzUvYYjeSJyG8tmpqiONaP5C5d1Thl1c1L3Go7kicitXDHqNpjM6BTsj6fu7osQtR/KdUZsyDnpk5O6DPJE5Fb2Rt27HkpsdckCtUqBx+6KrlMrfs30GKhVvjepy3QNEbmVK5ZSmiTR4PzWpZm5MPng5CuDPBG5lSuWUhpNks03DqNJavU1PRWDPBG5lSuWUnIN/jXMyRORQyRJoFxngM5ghlwOCCGzecaqvWJkrlhKaXnjqD+Z64sHijDIE1GrSZLA6dJKaK9UY8uhX/CH227Gsp25DVbJAGh0BY2z68LzQJFrmK4hIpuas2O0tNKAM6VVWJqZi2lxXa0BHqi7Nt0d69Ytbxw3hAaiUwfvO6C7uTiSJ6IG7K1d9w8IqPM6g8mMQJUChWU6hKj9Gl0lw2Jk7sGRPBE1YG/krQwKqfM6lVKBKoMZXULVKNcZ7U52ciLUfTiSJ6IG7K1dl+qNC8ODVOgWHog102Ow5dAvWD0tpkFO3jLZuWlOPNZ+no9pcV0RHqSCpoM/QtV+bdYnX+VwkL9w4QIee+wxlJSUQC6X45577sEf/vAHlJeXY9GiRTh37hxuuOEGvPLKK+jYsaMz2kxELqZSKjC2rwbT4rpaywLsPHoWctRdZy6Xy3BTeBBCAv3w9MR+kMtl2J6WYHN1Tc9Owfjz6F5Ie/uo9U0gY3Ycrg9SQS6X++zEqKs5nK5RKBR4/PHHsXfvXnzwwQd47733UFBQgI0bNyIhIQH79u1DQkICNm7c6Iz2ElEbCFX7YeGoXli55wR+t/FbrNxzAgtH9YLMWNXgtXK5DGFBNROcUR3V6ByitjnZWaYzWgM8UPPJIO3tozheeBlT1h1CvrbCZ8sBu5LDQV6j0aBfv34AgODgYHTv3h1arRbZ2dlISUkBAKSkpOCLL75w9FZE1EbKdEbMf+coOgX7I2N2HF6/LxYBfgooAkNaXSXSXgrIMmHrq1UiXc2pE6+FhYXIy8vDgAEDUFpaCo1GA6DmjeDSpUvOvBURuZCliuOScdFYuecEpqw7jLlb/g+/lOrw5K7cVo267U2+luuMALjaxlWcNvFaWVmJhQsX4oknnkBwcHCrrqHX65GXl+esJrWZ6upqj2y3o9hv7xUUHomFo3o2WPe+bGcunrq7Lx7c9h+8Ny8WlaVFzb6mf0AANsyMxfx3j1lz8qunxeDFz/IB1AR8s1GPvLwzLumTIzz5Z+6UIG80GrFw4UJMnDgRY8eOBQCEh4ejuLgYGo0GxcXFCAsLa/I6/v7+6NOnjzOa1Kby8vI8st2OYr+9lyQJSPKqRtMrCr+W/71KkrDuQjVLAquyTuDY2XLrSpwu13eAXBPqzK44RXv/mTf2BuRwkBdC4Mknn0T37t0xb9486+NJSUnYvXs3UlNTsXv3bowaNcrRWxGRC9SuKaNWKWCSBIwmCSqlHGP7arDvRLH1tbXXw7dmjXvt8gWSJPDslBg8PdG3yw64msNB/ujRo/joo4/Qq1cvTJ48GQDw6KOPIjU1Fenp6cjMzERUVBReffVVhxtLRK1nq0AYcK2mTKdg/wYHbWyYFQcA2Hei2JpeeevwL04p9uXsejVkm8NBPj4+Hvn5+Tafe+uttxy9PBE5gb0yBRHX+Vsfe+ruvg0O2pj/zlFsT0vA0xMFZDIZhGTCs1NiOOr2ICxrQOQD7JUp0BmuLWu0V3tGCIEbQgPROUSNK9pCny725YkY5Il8gL016mYB67LGxmrPNKY51SrJfRjkiXyAvTXqAX5y66lMG3JOYs30mBad0GRJA01ZdwiJq/dz52o7xAJlRD7A3klJ1wf54/ogf+uyRrVKgQ8fuu231TVNr3ixlwba9VAiJ1XbCQZ5Ii9nWVUTFuhnt3hYawOyvTQQd662HwzyRF7M3qqa6Ai1UyZPLWmg2oG+rerE2zszlupiTp7IC1kmQwvLq1B0uRqdgmtG6s4uBGZJA7Ukj+8MnAtoPo7kibyMrdG7pUbMsbPlTk2nuOvAbM4FNB9H8kRexlYAXLYzF/NH9gDg/HSKOw7M5lxA83EkT+QFauenzULYLSzWVukUV3PnXICn4UieyMPVz0+fLK60uSa+S6gaux5KRHREB4+foHTXXIAn4kieyMPVT8+8lv0z1kyPqVNobNOceER1dM6KmvbAXXMBnohBnsgDmEwSiq/qYTRL8FPIoQn2h1JZ80G8fn762NlyvPBpPj5IHQYAXhsAWcWyeRjkido5k0nCj9oKzH/naJ0SwL0jOkCplNvMT1+8qodKqWAQJObkidorSRK4VKmHtqLaGuCBayWAtRXVkCTB/DQ1iiN5onZIkgROl1ZCe6UaEdcF2FwtozdJyNdWIDqiA/PTZBdH8kTtUGmlAWdKq7A0MxdmSdhcLWOWhHX3qjvWqpNnYJAnaocMJjMCVQoUlumw6eAprJs5qE46Zt3MQdh08BQ3AFGTmK4hcrPaG5lkMhkUMtQctYeagL79aCEA4L0Hh8FklmCWBDYdPIXtRwu5AYiaxCBP5Eb26sy8dfgXPHZXb6y9ZwAWbf8e248WolxnwMJRveqssuEEKzWFQZ7IjezVmXnq7r6Yu+Xf+HDBbfggdRjMAgjwkyNMreIEK7UIgzyRG9krtGU5VNtolnBDaGCd57n2nVqCE69EbmTv7FXLodrMt5OjGOSJXEySBMqr9DhXVoUzpZU4X66DySQBsF1oa/W0GOw8epb5dnIKpmuIXEiSBM6VV6GsyoiH3v3OZlmC2huZLKtrnp0Sw3w7OQVH8kQuVFppgN4krAEeuFaWoPiqHkDdQzc6h6gR0VHNDU3kNBzJEzlZ7XXvAKCQwebkqsksuaN55GM4kidyotoHeDzy3jH8pL0KuVyGLXMHI7ZriPV1XULVUCr450eux5E8kRNZ1r13CvbHknHRWLbz2sEda6bH4IVP83Hxqh4bZsVBE8ylkOR6DPJEDqidmlEpFZAkCYVlOjx1d19rgAdq0jNLM3PxfuowyGWyOod+ELkSgzxRK9kqSZAxOw5j+2qsm5lqKyzTQQagc4ja9gWJXIBDCaJWslWSIO3to/hLcl9UGcw2NzlxcxO1NQZ5ohaQJIGg8EicK6uCwWRGp3p59cIyHRRyGQZ07YiMWXE8rYnczuXpmoMHD+LZZ5+FJEmYMWMGUlNTXX1LIqeSJIGSSj3MkoRLV41Ie+dYg8nUY2fLAVwbrYcF+SOExcSoHXDpSN5sNmPFihXYvHkzsrKysGfPHhQUFLjylkROZcm7T113GLmFV5BW76zVpZm5WDiqJ4CGo3We1kTtgUtH8rm5uejWrRu6du0KAEhOTkZ2djZuueUWV96WyGlq593tTab20ATj0LI7OVqndsmlQV6r1SIyMtL6dUREBHJzc+2+Xq/XIy8vz5VNconq6mqPbLejfKHf6vDO1sBuqQxZO9B3CVUDJj2ulBYBAErc0sq24ws/c1s8ud8uDfJCiAaPyWT2Rzn+/v7o06ePK5vkEnl5eR7Zbkf5Qr8vVuitgX1DzkmsnhZTZ4NTxuw4dLn+Osg1oe5uapvwhZ+5Le293429Abk0yEdGRqKoqMj6tVarhUajceUtiVql9qYmP6UcSrkMOoMZapUCm2bH48G3/4NjZ8vx1uFfsO3+IZDJAKVcjqjrApieoXbNpUH+1ltvxenTp3H27FlEREQgKysLL730kitvSdRitjY11S5BsO3+IfhwwW2oNpkhl8mglNcc9hGiZv6d2j+Xrq5RKpVYvnw5HnjgAUyYMAHjx49Hz549XXlLohaRJIGiK9UNNjUtzczF/JE9UFimw5w3/w8ymQw3hgWhS2ggys6fQVgQV8uQZ3D5OvkRI0ZgxIgRrr4NUYtZRvCVepPdc1Yt/28pG0zkabjjlXyWZXlkaaXB7jmrlv9nOQLyVAzy5JMkScBgMuOlGQMQpFLg77+PrVOCYM30GGzIOclyBOTxWIWSfEL91TNXq02Y8+b/WSdaX5oxAGumx8BPIUdYkMoa+LnBiTwdR/Lk9Wqf1pS4ej+mrjsM7ZVqa3GxwjIdFu/4HtVGCXqThL/tzYNcLmc5AvIKDPLk9WyVBLasnrEoLNOha5gabx3+BYvGRDM9Q16D6RryegaTudHVM0BNHl7tp8CzU2KYniGvwpE8eT2VUmFz9UyVwWz9/01z4hHVUc30DHkdjuTJ64UHqbBpTnydHa2b5sQj4jp/Vo8kr8cgT15PLpchOipmyKwAABHCSURBVKKD7QM8gtzdOiLXYpAnj1V7WWRTo3HLAR5EvoZBnjySraJim+bEIzqiA9MuRLVw4pU8kq1lkZYSBUR0DUfy5DFqp2fMQthcFslCYkR1cSRPHqH+rtWTxZU2l0WykBhRXQzy1K6ZTBLOl+twtqwKfgo5buseDgB4LftnrJkeU6eoGAuJETXEdA21WyaThB+1FZj/zlHr5Oq6mYMAANuPFuKFT/PxQeowAOBadyI7OJKnZpEkgYsVepwrq8LFCj0kqeEh7c5WfFVvDfBATc79oXe/w4PDuwMALl7VQ6VUsJAYUSM4kqcm2Vuu6B8Q4NL7Gs2SzclVhVzG9AxRM3EkT02yt1xRGRTi1PvU/7Tgp5DbnFz1V8qx66FEroknagaO5KlJ9qo4Sg6OEZo6yOOfDw7FhllxdXLyG2bFIaJDAJRKjk+ImoNBnppkqeJYO9B3CVVDDqnV17SVAlozPQadgv1RWKZDYZkO9206gj1/SsT2tASYzBKUCjk0wf4M8EQtwL8WapKlimP95YqmynLra1o6Mdvcgzwq9WZ0DlHjxvAgdA5RM8ATtRBH8tQke1Uc8/PPAWhdHZnmHuTBzU1EjuGwiJrFUsXR1nLF1tSRae5BHlw9Q+QYjuTJYfZG5Y3VkeFBHkRtg0GeHGZvYraxVAsP8iBqG0zXkMPsTcz6KYBzZVX49VIliiuqG0zGNpYCIiLn4EieHFZ/VO6nlENvNCPvQgWWZubyUA8iN+JInpyi9qhcBhkKiiutAR7goR5E7sIgT05nMJkRqFLwUA+idoBBnpxOpVSgymDmoR5E7QCDPLWaf0CAzV2u4UEqdAsP5KEeRO2AQxOvq1evxv79++Hn54cbb7wRzz//PK677joAQEZGBjIzMyGXy/GXv/wFd9xxh1MaTO4nSQJlOj38Okbgss6Ioss6bPvmNBaNibZOrN4UHoSQQD98kDoMZgEE+MlxfRBX0BC1NYdG8omJidizZw8+/vhj3HTTTcjIyAAAFBQUICsrC1lZWdi8eTOeeeYZmM3MxXqq2nVpLlXqcbq0Ej8VXcV9m77F6JcP4PEP/4s/3t4daz/Pt06syuUyhAXVTMTeGBYITYcABngiN3AoyN9+++1QKms+DAwcOBBFRUUAgOzsbCQnJ0OlUqFr167o1q0bcnNzHW8ttbn6B2h/f/YyzpRWNVg5s3jH95gW1xU6o7lNTo0iouZx2jr5nTt3Yvz48QAArVaLAQMGWJ+LiIiAVqtt8hp6vR55eXnOalKbqa6u9sh2N0dQeCQe3HbMGtADVTUTp7ZWzoQHqXCy+CquVOkRaCyHvrq6zdvbFrz5590UX+27J/e7ySA/d+5clJSUNHg8PT0do0ePBgCsX78eCoUCkyZNAgAI0XAkJ5M1/VHd398fffr0afJ17U1eXp5Htrs5zpVV1Qno5TojVL+d2FS/jEFYkArPZuXh4lU9dj2UiO4d/N3RZJfz5p93U3y17+293429ATUZ5Ldu3dro87t27UJOTg62bt1qDeSRkZHW1A1QM7LXaDTNbC61J/Xr0mzIOYm/TuqLNdNj6uxmXTdzEDbknMSxszU15rkenqh9cChdc/DgQWzatAnvvPMO1Opra6KTkpKwePFizJs3D1qtFqdPn0ZMTIzDjSXnqX/0nkohQ6XeDLMQCPBTWFfC1K8WefGqHh0C/NAlTI33HxwKSQDnL1fj6Y/+Zw3wXA9P1H44FORXrlwJg8GAefPmAQAGDBiAFStWoGfPnhg/fjwmTJgAhUKB5cuXQ6HgH317YeuQj3UzB+HvX/6MfSeKG9SZsVctMu/XPERH90alwYyLV/UAuB6eqL1xKMh//vnndp9bsGABFixY4MjlyUVsHfLx0Lvf4am7+2LfiWJrnZldDyVaq0N2spNfb7RkMBG5HatQ+qDmHL3Xkjozjb0JEJF7sayBl2nOgdr2jt4r1xnrfM28OpHnY5D3IvU3Lk1Zdwj52ooGgd7WIR/rZg7CzqNnrV8zr07kHZiu8SL2DtS25NYt6ufR5TIZ/BQyLJ/YD3+5u2+d1TVE5NkY5L1ISw7UtiyPrL/KZtOceHQJCWSAJ/ISTNd4EVu59rF9NZDJZDZz9PZG/jy9ich7MMh7kfq59rF9NVg4qhfuyfjGZo6+JSN/IvJMTNd4kfq5dplMhnsyvrGbo69fsgDgqhoib8Mg72Vqr1mvXVwstmsI5o/sgRC1H/QmM0wmqUHJAq6qIfI+DPJezDJS7xTsjyXjorFs57WCYhtmxaF3RAfuViXycgzyXswyUi+6XG0N8EBN2mb+O0exPS0BnUPU3K1K5MUY5L2YJUcfqFLYnGA1mSU3tYyI2gpX13g5uVwGv98O+aitS6gaSgV//ETejn/lbmQySThfrsOZ0kqcL9fBZHLNyFoT7I8Ns+LqlDHYMCsOmmCmaYi8HdM1bmIySfhRW4H57xxtMBmqVDr3vVeplKN3RAdsT0uAySxBqZBDE+zv9PsQUfvDv3I3Kb6qtwZ44NpkaPFvh284m1IpR+cQNW4MD0LnEDUDPJGP4F+6mxjNEidDicjlGOTdhJOhRNQWGFHchJOhRNQWOPHqJpwMJaK2wCDvRpbJUCIiV+GwkYjIizHIExF5MaZr3ESSBEorDQ5Xf3TWdYjIOzHIu4EkCZtnq0ZHdGhRgHbWdYjIezFd4wZNna0qSQIXK/Q2z2VtyXWIiDiSd4PGzlZtyeicZ7QSUVM4kncDy4lNtVnOVm3J6Lyx6xARAQzybmE5san2blfL2aotGZ03dh0iIoDpGrewnNhk62xVy+i8dqC3Nzpv7DpERABH8m4jl8vQqYM/bggNRKcO/tbA3NLRub3rEBEBHMm3OxydE5EzMcg7iTM3JVlG50REjnJKuuaNN95AdHQ0Ll26ZH0sIyMDY8aMwbhx4/DVV1854zZtprnr1C38AwKQr63AlHWHkLh6P6asO4R8bUWT/46IyNUcDvIXLlzA4cOH0blzZ+tjBQUFyMrKQlZWFjZv3oxnnnkGZrNnrN22rFNvScBWBoVwUxIRtUsOB/nnn38eS5cuhUx2LTWRnZ2N5ORkqFQqdO3aFd26dUNubq6jt2oTrdlFKkHOTUlE1C45lJPPzs6GRqNB79696zyu1WoxYMAA69cRERHQarVNXk+v1yMvL8+RJjlMHd7ZZsCu1FWjpPCUzX8TFB5pc9mjZDa6vT+uVF1d7dX9s8dX+w34bt89ud9NBvm5c+eipKSkwePp6enIyMjAm2++2eA5IRqmNmqP9O3x9/dHnz59mnydq0iSQNGVapsBO0gdgJvstO3CpctYMz0GSzNzraUI1kyPQZA6AF3d2B9Xy8vLc+vPy118td+A7/a9vfe7sTegJoP81q1bbT6en5+PwsJCTJ48GQBQVFSEqVOnYseOHYiMjERRUZH1tVqtFhqNpoXNbluWXPzaz/OxeloMlu3MrVM7prFdpHoT8MKn+Xjq7r4IUfuhXGfEC5/m4++/jwWC2rATRET1tDpdEx0djW+++cb6dVJSEjIzMxEWFoakpCQsXrwY8+bNg1arxenTpxETE+OUBrtK7Vz8xQoDnrq7L8KDVOgcokbkdQGNLoeUQ8LFq3qkvX3U+hhryBBRe+CSdfI9e/bE+PHjMWHCBCgUCixfvhwKRfsOeLVrxhw7W24N2IeW3dnkendTZTk2zYlvUDmSNWSIyN2cFuS//PLLOl8vWLAACxYscNblXaL2BiaZTIaxfTXYd6LY+nxzR+P66mpEd+MuVSJqf3xmx2v9Hamhaj/8fPFqndH3hllxAIB9J4pbPBrnLlUiao98IsjbOojjvQeGNlgPP/+do9ieloCnJwqOxonIK/hEkLe1wam4Qm9zPbzJLEGtUloDPA/KJiJP5hOlhm0dxFFaabB5qlJeUYW1lIHJJLEmDRF5NJ8I8raOydt59CwyZsfVqdu+eloMNuSctJYyKL6qZ00aIvJoXpuusaRZZBAwmgXe/uMQnC6pwmvZP+PiVT0WjYlGz07B2PVQInQGE/KKKvDiZ/k4drYcQE1AN5ol1qQhIo/mlUHeMtG6+7uzSB5wAx5697s6K2iiQvwRqva3roi5WAGs3HOiQSkDP4W82UfxERG1R16ZrrFMtE6Pv9Ea4IFrK2j0RlFn8tTekXuaYH8elE1EHs3rRvKSJGAwmfHSjAEI8FOgU7B/nZG4ZQVNbY0ducej+IjIk3lFkLfk3yVJQkmlAWlvH61TDfKFT6/l2ruEqqFUNPwAY28zEzc5EZEn8/h0Te2TnI4XXrYGeKBm1L40MxcLR/UEAGtOXhPMoE1EvsHjR/K1NzqFqP1srobp0SkIB5eOhFIhhybYH0qlx7+3ERE1i8cH+dobncp1RpurYdQqJVMuROSTPH5IW3uj04ack1g9LYarYYiIfuPxI/nwIBUyZsch7e2jOHa2HG8d/gXb7h+CimoTOnXwb/LADyIib+bxQV4ulyFa0wHvPTAUxRV6lFYa8Le9eVg0JpoBnoh8nscHeQBQKuXoEhoItUqJqI4BGHRjDNezExHBS4I8wPXsRES2ePzEKxER2ccgT0TkxRjkiYi8GIM8EZEXY5AnIvJiMiFEuzmw9Pjx4/D35woZIqKW0Ov1GDhwoM3n2lWQJyIi52K6hojIizHIExF5MQZ5IiIvxiBPROTFGOSJiLwYgzwRkRdjkHfQG2+8gejoaFy6dMn6WEZGBsaMGYNx48bhq6++cmPrnG/16tW46667MHHiRDz88MO4cuWK9Tlv7rfFwYMHMW7cOIwZMwYbN250d3Nc5sKFC5g9ezbGjx+P5ORkvPXWWwCA8vJyzJs3D2PHjsW8efNw+fJlN7fUNcxmM1JSUpCWlgbAs/vNIO+ACxcu4PDhw+jcubP1sYKCAmRlZSErKwubN2/GM888A7PZ7MZWOldiYiL27NmDjz/+GDfddBMyMjIAeH+/gZo//BUrVmDz5s3IysrCnj17UFBQ4O5muYRCocDjjz+OvXv34oMPPsB7772HgoICbNy4EQkJCdi3bx8SEhK89o1u27Zt6NGjh/VrT+43g7wDnn/+eSxduhQy2bXDSbKzs5GcnAyVSoWuXbuiW7duyM3NdWMrnev222+HUllzDMHAgQNRVFQEwPv7DQC5ubno1q0bunbtCpVKheTkZGRnZ7u7WS6h0WjQr18/AEBwcDC6d+8OrVaL7OxspKSkAABSUlLwxRdfuLOZLlFUVIScnBxMnz7d+pgn95tBvpWys7Oh0WjQu3fvOo9rtVpERkZav46IiIBWq23r5rWJnTt3Yvjw4QB8o9++0EdbCgsLkZeXhwEDBqC0tBQajQZAzRtB7TSlt3juueewdOlSyOXXwqMn99trToZyhblz56KkpKTB4+np6cjIyMCbb77Z4DlbVSJqj/Q9QWP9Hj16NABg/fr1UCgUmDRpEgDv6HdTfKGP9VVWVmLhwoV44oknEBwc7O7muNz+/fsRFhaG/v3748iRI+5ujlMwyDdi69atNh/Pz89HYWEhJk+eDKDm493UqVOxY8cOREZGWlMYQM3ozzIC8BT2+m2xa9cu5OTkYOvWrdYg5w39boov9LE2o9GIhQsXYuLEiRg7diwAIDw8HMXFxdBoNCguLkZYWJibW+lc3333Hb788kscPHgQer0eV69exZIlSzy734Icduedd4rS0lIhhBA//fSTmDhxotDr9eLXX38VSUlJwmQyubmFznPgwAExfvx4a38tvL3fQghhNBpFUlKS+PXXX4VerxcTJ04UP/30k7ub5RKSJImlS5eKVatW1Xn8b3/7m8jIyBBCCJGRkSFWr17tjua1iW+//VakpqYKITy73xzJO1nPnj0xfvx4TJgwAQqFAsuXL4dCoXB3s5xm5cqVMBgMmDdvHgBgwIABWLFihdf3GwCUSiWWL1+OBx54AGazGdOmTUPPnj3d3SyXOHr0KD766CP06tXL+on10UcfRWpqKtLT05GZmYmoqCi8+uqrbm5p2/DkfrPUMBGRF+PqGiIiL8YgT0TkxRjkiYi8GIM8EZEXY5AnIvJiDPJERF6MQZ6IyIv9P+Lic8YryKZjAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"L1 loss = 1.830116347379676\n"
]
}
],
"source": [
"test_x, test_y = make_dataset(-50, 50, 100)\n",
"test_yp = model.predict(test_x)\n",
"plt.title('Testing the model using a testing set')\n",
"sns.scatterplot(test_y, test_yp)\n",
"plt.show()\n",
"\n",
"print(\"L1 loss = {}\".format(np.abs(test_y-test_yp).mean()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evalulation\n",
"(If a good regressier is used) As you can see. Given a well encoded SDR. It is quite easy to decode it back into real values.\n",
"But that's not useful in the realworld. We are always dealing with messy data. Fortunately noisy bits seems not to be a big problem given the encode value is big enough. There's no crazy values and the predict values follows the general trend."
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"L1 loss for 1 noisy bits = 4.201512220700864\n",
"L1 loss for 2 noisy bits = 9.1996834748837\n",
"L1 loss for 3 noisy bits = 9.490406787819948\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABBYAAAF1CAYAAABcemn5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeXxU5dkH/N9MkpkMAckik7A9VCLSoAZTEIzBoqCABUowdFNBYzVS2g8FEXGDPhW1RbGCT18KwVcIVroIJlB5VCRKaaMgYNo8voxRcUuCZINAMkkmy5n3DzrDZDL7nH1+379IZrtPQu5zn+tc13UbnE6nE0REREREREREETAqPQAiIiIiIiIi0i4GFoiIiIiIiIgoYgwsEBEREREREVHEGFggIiIiIiIioogxsEBEREREREREEWNggYiIiIiIiIgixsACKe7UqVPIyclBb2+v3+eMHTsWX331lYyjCi6UcYfrtddew09+8hO/j997770oLS0V7fOIiFw4F1/EuZiIlMB5+CLOw9rDwEIMOXbsGH784x9jwoQJmDRpEn784x+jqqoKwIU/3qysLOTk5CAnJwfTpk3DI488gi+++ML9+traWowdO7bPc4qLi6Me17Bhw1BZWYm4uDgAwMKFC/Hqq69G/H6ffPIJfvrTn2Ly5MkYO3Zs1OPzx3vccnjxxRcxf/58AMEnXCJSp1iZi0tLS3HbbbfhO9/5Dr773e/imWeeQU9PT9Tj9Ma5mIjCFSvz8L59+zBz5kxMmDABubm5WLVqFdra2qIepzfOwwQwsBAz2trasHjxYtx555344IMPcOjQIfziF7+AyWRyP+eaa65BZWUljh07hu3bt8NsNuO2227DJ5980ue9jh49isrKSmzcuBGbNm1CRUWF3IcTUHx8PGbNmoWnnnpK6aEQEfURS3NxR0cHHn30URw+fBivvvoqDh8+jJdeeknpYRFRjIulefg73/kO/vSnP+H48eM4cOAAenp6sGHDBqWHRTrFwEKMcEVZ58yZg7i4OCQmJmLKlCn49re/3e+5cXFx+K//+i/893//NyZNmoTf//73Pt/z6quvxuWXXw6bzebz8RdeeAFr164FAHR3d+Oaa67BM888AwDo7OzE1VdfjXPnzrmjvj09PXj++edx7NgxPPHEE8jJycETTzzhfr/3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\n",
"text/plain": [
"<Figure size 1296x432 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize = (18, 6))\n",
"sub = fig.subplots(1, 3)\n",
"\n",
"for n_bits in range(1, 4):\n",
" noisy_x = np.array(test_x)\n",
" \n",
" # HACK: a hacky way to set noisy bits\n",
" for sdr in noisy_x:\n",
" for i in range(n_bits):\n",
" sdr[random.randint(0, len(sdr)-1)] = 1\n",
" noisy_yp = model.predict(noisy_x)\n",
" ax=sub[n_bits-1]\n",
" ax.set_title('SDR with {} noisy bit'.format(n_bits))\n",
" sns.scatterplot(test_y, noisy_yp, ax=ax)\n",
" print(\"L1 loss for {} noisy bits = {}\".format(n_bits, np.abs(test_y-noisy_yp).mean()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Also try what happens with out-of-range values. Unfortunatelly no models I've tried can handle them correctly.\n",
"\n",
"As you see. The training data ranges between (-50, 50) and the testing data ranges from (-100, 100). The model can decode values within the training range correctly but can't do so properly out of it. Which is not surprising but well..."
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"large_x, large_y = make_dataset(-100, 100, 100)\n",
"large_yp = model.predict(large_x)\n",
"plt.title('Out-of-range values')\n",
"sns.scatterplot(large_y, large_yp)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Conclusion\n",
"Hopefully my conclusions are sound.\n",
"* Decoding Grid Cells are doable and easy. \n",
"* It can resist noise\n",
"* The ML model have to be trained with enough data"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.8.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment