diff --git a/mlp.ipynb b/mlp.ipynb index c6779d1..ec06b70 100644 --- a/mlp.ipynb +++ b/mlp.ipynb @@ -9,7 +9,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'d': {'index': 2, 'count': 45, 'vector': [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]}, 'i': {'index': 4, 'count': 75, 'vector': [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]}, 'a': {'index': 0, 'count': 36, 'vector': [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}, 'c': {'index': 1, 'count': 30, 'vector': [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}, 'r': {'index': 8, 'count': 42, 'vector': [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]}, 'n': {'index': 6, 'count': 75, 'vector': [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]}, 't': {'index': 10, 'count': 64, 'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]}, 'o': {'index': 7, 'count': 39, 'vector': [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]}, 'e': {'index': 3, 'count': 117, 'vector': [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]}, 's': {'index': 9, 'count': 40, 'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]}, 'l': {'index': 5, 'count': 64, 'vector': [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]}, 'u': {'index': 11, 'count': 55, 'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]}}\n", + "{'u': {'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 'count': 55, 'index': 11}, 'i': {'vector': [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], 'count': 75, 'index': 4}, 't': {'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], 'count': 64, 'index': 10}, 'd': {'vector': [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'count': 45, 'index': 2}, 'l': {'vector': [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], 'count': 64, 'index': 5}, 'o': {'vector': [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], 'count': 39, 'index': 7}, 'c': {'vector': [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'count': 30, 'index': 1}, 'e': {'vector': [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], 'count': 117, 'index': 3}, 'a': {'vector': [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'count': 36, 'index': 0}, 'n': {'vector': [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], 'count': 75, 'index': 6}, 'r': {'vector': [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], 'count': 42, 'index': 8}, 's': {'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], 'count': 40, 'index': 9}}\n", "12\n", "1\n", "number of batches=1\n", @@ -21,8 +21,8 @@ ], "source": [ "from letters import LettersData\n", - "data = LettersData(\"data/\", \"list_expected_data.txt\")\n", - "data.process()\n", + "letters_data = LettersData(\"data/\", \"list_expected_data.txt\")\n", + "letters_data.process()\n", "#x,y = data.get_data()\n", "#classes = data.get_classes()\n", "#ysize = data.get_class_element_size()\n", @@ -34,12 +34,12 @@ "#print(len(y))\n", "#print(y[5])\n", "#print(data.get_vocab())\n", - "v=data.get_vocab_with_min_count(30)\n", + "v=letters_data.get_vocab_with_min_count(30)\n", "print(v)\n", "print(len(v))\n", - "batch = data.get_batches()\n", + "batch = letters_data.get_batches()\n", "print(len(batch))\n", - "batch = data.get_batches()#min_count=40, mini_batch_size=577)\n", + "batch = letters_data.get_batches()#min_count=40, mini_batch_size=577)\n", "print(\"number of batches={}\".format(len(batch)))\n", "print(\"size of first batch={},{}\".format(len(batch[0][0]),len(batch[0][1])))\n", "print(\"size of last batch={},{}\".format(len(batch[-1][0]),len(batch[-1][1])))\n", @@ -56,14 +56,14 @@ "source": [ "# BATCH LOAD AND SAVE FUNCTIONS\n", "\n", - "def save_batch(filename):\n", + "def save_batch(filename, data):\n", " with open(filename, \"w\") as f:\n", - " f.write(str(batch))\n", + " f.write(str(data))\n", " print(\"ok\")\n", "\n", "def load_batch(filename):\n", " batch = None\n", - " with open(\"batch\") as f:\n", + " with open(filename) as f:\n", " sbatch = f.read()\n", " batch = eval(sbatch, {\"__builtins__\":None})\n", " return batch\n" @@ -71,26 +71,31 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "ok\n" + "ok\n", + "batch-2018-01-20_21:54:09\n" ] } ], "source": [ "# SAVE BATCH\n", + "import datetime\n", "\n", - "save_batch(\"batch\")" + "tm = str(datetime.datetime.now()).replace(\" \", \"_\").split(\".\")[0]\n", + "name = \"batch-\" + tm\n", + "save_batch(name, batch)\n", + "print(name)" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -104,7 +109,7 @@ "source": [ "# LOAD BATCH\n", "\n", - "batch = load_batch(\"batch\")\n", + "batch = load_batch(\"batch-2018-01-20_21:41:29\")\n", "xsize = len(batch[0][0][0])\n", "ysize = len(batch[0][1][0])\n", "print(xsize, ysize)" @@ -112,7 +117,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -180,7 +185,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -231,76 +236,6 @@ "print(all_axis_equal(b))" ] }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "# FEATURES SAVE/LOAD FUNCTIONS\n", - "\n", - "import struct\n", - "\n", - "param_type = {\n", - " \"uint32\": {\"fmt\": 'I', \"size\": 4},\n", - " \"float64\": {\"fmt\": 'd', \"size\": 8},\n", - "}\n", - "\n", - "def save_params(params, name):\n", - " ret = False\n", - " # nb layers\n", - " nb = len(params)\n", - " # nbs features per layer\n", - " sizes = [p.size for p in params]\n", - " # packing format string\n", - " fmt = \"<{fnb}{fsizes}{fparams}\".format(\n", - " fnb=param_type[\"uint32\"][\"fmt\"],\n", - " fsizes=param_type[\"uint32\"][\"fmt\"]*nb,\n", - " fparams=\"\".join([param_type[\"float64\"][\"fmt\"]*n for n in sizes])\n", - " )\n", - " # build the list of sizes and all parameters\n", - " data = [nb] + sizes\n", - " for p in params:\n", - " data += p.flatten().tolist()\n", - " print(sizes)\n", - " # packing raw data\n", - " raw = struct.pack(fmt, *data)\n", - " print(len(raw))\n", - " # save\n", - " with open(name, \"wb\") as f:\n", - " f.write(raw)\n", - " ret = True\n", - " print(\"ok\")\n", - " return ret\n", - "\n", - "def load_params(name):\n", - " \"\"\"Load parameters from file.\n", - " A main list contains lists of all parameters for each layer\n", - "\n", - " :return: dict with results\n", - " \"\"\"\n", - " ret = {\"result\": False}\n", - " with open(name, \"rb\") as f:\n", - " # get nb layers\n", - " raw = f.read(param_type[\"uint32\"][\"size\"])\n", - " fmt = \"<{fnb}\".format(fnb=param_type[\"uint32\"][\"fmt\"])\n", - " nb = struct.unpack(fmt, raw)[0]\n", - " # get nbs features per layer\n", - " raw = f.read(param_type[\"uint32\"][\"size\"]*nb)\n", - " fmt = \"<{fsizes}\".format(fsizes=param_type[\"uint32\"][\"fmt\"]*nb)\n", - " sizes = struct.unpack(fmt, raw)\n", - " # get params\n", - " total = sum(sizes)\n", - " raw = f.read(param_type[\"float64\"][\"size\"]*total)\n", - " fmt = \"<{fparams}\".format(fparams=param_type[\"float64\"][\"fmt\"]*total)\n", - " params = struct.unpack(fmt, raw)\n", - " # result\n", - " ret[\"params\"] = params\n", - " ret[\"sizes\"] = sizes\n", - " ret[\"result\"] = True\n", - " return ret\n" - ] - }, { "cell_type": "code", "execution_count": 8, @@ -365,7 +300,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -378,15 +313,15 @@ "tanh factor=0.05773502691896258\n", "softmax factor=0.01\n", "lenX,m 300 815\n", - "nb errors before training=808/815\n", + "nb errors before training=783/815\n", "Training...\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAHuFJREFUeJzt3XmUXGd55/HvU0tX9d5Sd6m178JYNl47wowZYJw4IzuMnRlMMCfDFsADgWOYJGfCMscJ5OScMExIIDgYgz22CQMmZhnHY8cYMNh48NK2JaEF2y3LsmS11YusXtVLdT3zR92WSq1qdbVUS1fV73NOnbp171t1H91u/e7tt957r7k7IiJSWUKlLkBERPJP4S4iUoEU7iIiFUjhLiJSgRTuIiIVSOEuIlKBFO4iIhVI4S4iUoEU7iIiFShSqhW3tbX52rVrS7V6EZGy9PTTT/e5e2KudiUL97Vr19LZ2Vmq1YuIlCUz259LO3XLiIhUoDnD3cziZvakmW03s11m9rksbd5vZr1mti14fKgw5YqISC5y6ZYZB65w92EziwK/NLMH3P3xGe3udveP579EERGZrznD3dPXBB4OXkaDh64TLCKygOXU525mYTPbBvQAD7n7E1mavcPMdpjZPWa2Kq9ViojIvOQU7u4+5e4XASuBLWZ2/owm/wKsdfcLgIeAO7N9jpndYGadZtbZ29t7NnWLiMhpzGu0jLsfBR4Gts6Y3+/u48HLbwKXzvL+W929w907Eok5h2mKiMgZymW0TMLMWoLpWuBK4Dcz2izLeHkNsCefRWZ67tUh/uaB3zA4NlmoVYiIlL1cjtyXAQ+b2Q7gKdJ97veZ2efN7JqgzY3BMMntwI3A+wtTLrx8ZJRbfrGXF3tHCrUKEZGyl8tomR3AxVnm35Qx/Wng0/ktLbv1iXoAXuwd5qJVLcVYpYhI2Sm7M1RXLaojHDL29enIXURkNmUX7jWREKsX16lbRkTkNMou3AHWtdXzoo7cRURmVbbhvq9vmFRKJ8qKiGRTluG+PlHP2GSKVwfHSl2KiMiCVJbhvq5tesSMumZERLIpy3DfkGgAYF/f8BwtRUSqU1mG+5LGGHU1YfbqyF1EJKuyDHczY21rPfv7Fe4iItmUZbgDLGuOc3hwfO6GIiJVqGzDfUlTnMMaLSMiklXZhvvSpjj9IxNMJFOlLkVEZMEp23Bvb4oB0DOko3cRkZnKN9yb4wDqdxcRyaJ8w71xOtx15C4iMlPZhvvSZoW7iMhsyjbcF9VFqQmHdH0ZEZEsyjbczYwlTTF61OcuInKKsg13gPamOK8O6MhdRGSmsg73pU1xDmsopIjIKco63NUtIyKS3ZzhbmZxM3vSzLab2S4z+1yWNjEzu9vMuszsCTNbW4hiZ1raFGd4PMnweLIYqxMRKRu5HLmPA1e4+4XARcBWM7tsRpsPAq+5+0bg74Av5LfM7NqbNBxSRCSbOcPd06bvihENHjNvXnotcGcwfQ/w22ZmeatyFkuCSxAo3EVETpZTn7uZhc1sG9ADPOTuT8xosgI4AODuSWAAaM3yOTeYWaeZdfb29p5d5UCiIR3ufcMTZ/1ZIiKVJKdwd/cpd78IWAlsMbPzz2Rl7n6ru3e4e0cikTiTjzhJojEd7r1D+lJVRCTTvEbLuPtR4GFg64xFrwCrAMwsAjQD/fko8HSaa6NEw0bfsMJdRCRTLqNlEmbWEkzXAlcCv5nR7F7gfcH0dcDP3H1mv3zemRltDTEduYuIzBDJoc0y4E4zC5PeGXzP3e8zs88Dne5+L3Ab8C0z6wKOANcXrOIZ2hpiOnIXEZlhznB39x3AxVnm35QxPQa8M7+l5SbRGNMNO0REZijrM1QB2hpq1C0jIjJDBYR7jP7hCVKpgnfxi4iUjbIP90RjjGTKOXpsstSliIgsGGUf7m3HT2RS14yIyLSyD3edyCQicqqyD3cduYuInKrsw11H7iIipyr7cG+KR6gJh+jVkbuIyHFlH+5mRqJRlyAQEclU9uEO6ROZdNlfEZETKiLcdeQuInKyigh3XTxMRORkFRHuicYYR0YmmNIlCEREgAoJ97aGGFMp57VR9buLiECFhPv0WHd1zYiIpFVEuE+fpaovVUVE0iok3GsAHbmLiEyriHDXJQhERE5WEeHeEIsQj4YU7iIigYoI9+lLEOgsVRGRtDnD3cxWmdnDZrbbzHaZ2SeytHmbmQ2Y2bbgcVO2zyqkRIPOUhURmRbJoU0S+FN3f8bMGoGnzewhd989o92j7v72/JeYm0RjjJf6Rku1ehGRBWXOI3d373b3Z4LpIWAPsKLQhc1XojGmy/6KiATm1eduZmuBi4Ensix+k5ltN7MHzOy8Wd5/g5l1mllnb2/vvIs9nURDnCMjE0xOpfL6uSIi5SjncDezBuD7wCfdfXDG4meANe5+IfAPwI+yfYa73+ruHe7ekUgkzrTmrKaHQ/brS1URkdzC3cyipIP92+7+g5nL3X3Q3YeD6fuBqJm15bXSOWisu4jICbmMljHgNmCPu39pljZLg3aY2Zbgc/vzWehcjof78FgxVysisiDlMlrmcuA9wK/NbFsw7zPAagB3vwW4DviomSWBY8D17l7U6+/qyF1E5IQ5w93dfwnYHG2+Cnw1X0WdienryyjcRUQq5AxVgFgkTHNtVOEuIkIFhTtorLuIyLTKCnddgkBEBKi0cG9UuIuIgMJdRKQiVVy4j0xMMTKeLHUpIiIlVVnh3qAbZYuIQKWFu05kEhEBFO4iIhWpMsNd3TIiUuUqKtwX1dUQDpmO3EWk6lVUuIdDRmt9DT2DCncRqW4VFe6gSxCIiECFhnvPkK7pLiLVreLCvb0xrm4ZEal6lRfuTTH6hseZShX1XiEiIgtKxYX7kqY4KYd+9buLSBWruHBvb4oDcFhdMyJSxSow3NMnMh0e1JeqIlK9KjDcgyN3jZgRkSo2Z7ib2Soze9jMdpvZLjP7RJY2ZmZfMbMuM9thZpcUpty5tdbXEDJ1y4hIdYvk0CYJ/Km7P2NmjcDTZvaQu+/OaHMVsCl4vBH4WvBcdJFwiLaGGD3qlhGRKjbnkbu7d7v7M8H0ELAHWDGj2bXAXZ72ONBiZsvyXm2O2pvi6nMXkao2rz53M1sLXAw8MWPRCuBAxuuDnLoDKJr2ppi6ZUSkquUc7mbWAHwf+KS7D57JyszsBjPrNLPO3t7eM/mInCxpiusSBCJS1XIKdzOLkg72b7v7D7I0eQVYlfF6ZTDvJO5+q7t3uHtHIpE4k3pz0t4Yp294gsmpVMHWISKykOUyWsaA24A97v6lWZrdC7w3GDVzGTDg7t15rHNepse667ruIlKtchktcznwHuDXZrYtmPcZYDWAu98C3A9cDXQBo8AH8l9q7k6cpTrG8pbaUpYiIlISc4a7u/8SsDnaOPCxfBV1tpboLFURqXIVd4YqwPLm9NH6oaMKdxGpThUZ7i11UWqjYV45eqzUpYiIlERFhruZsWJRLYcU7iJSpSoy3AGWtyjcRaR6VWy4r2iJ84r63EWkSlVsuC9vrqVveJyxyalSlyIiUnQVG+4rFqVHzHQP6OhdRKpPxYb79MlL6ncXkWpUseG+Igh3DYcUkWpUseG+tDmOGbzymsJdRKpPxYZ7NByivTGubhkRqUoVG+4Ay1viHBpQuItI9anocF+xqI6D6pYRkSpU0eG+enEtr7x2jKRu2iEiVaaiw33N4nqSKdfVIUWk6lR0uK9urQNg/5GRElciIlJcFR3ua6bDvX+0xJWIiBRXRYd7e2OcWCTE/n4duYtIdanocA+FjNWL63TkLiJVp6LDHdJdMy8fUbiLSHWZM9zN7HYz6zGznbMsf5uZDZjZtuBxU/7LPHOrF9ezv3+U9D28RUSqQy5H7ncAW+do86i7XxQ8Pn/2ZeXPmtY6jk1O0Ts0XupSRESKZs5wd/dHgCNFqKUgjo+YUdeMiFSRfPW5v8nMtpvZA2Z2Xp4+My/WtNYD8FKfRsyISPWI5OEzngHWuPuwmV0N/AjYlK2hmd0A3ACwevXqPKx6bqsW1RINGy8q3EWkipz1kbu7D7r7cDB9PxA1s7ZZ2t7q7h3u3pFIJM521TmJhEOsba1nb89wUdYnIrIQnHW4m9lSM7Ngekvwmf1n+7n5tCHRQFevwl1Eqsec3TJm9h3gbUCbmR0E/gKIArj7LcB1wEfNLAkcA673BTbucMOSen6y5zCTUymi4Yof2i8iMne4u/u751j+VeCreauoADYkGkimnP39o2xc0lDqckRECq4qDmM3JNKBvlddMyJSJaoi3Ncn0sMhFe4iUi2qItwb41GWNsXZ26PhkCJSHaoi3CH9paqO3EWkWlRNuG9MNPDC4SFSqQU1kEdEpCCqJtw3L29iZGJK15gRkapQNeF+3vJmAHYdGihxJSIihVc14b6pvYFIyNh1aLDUpYiIFFzVhHssEmZTe6PCXUSqQtWEO8B5y5vYfWhAd2USkYpXdeHeNzxBj+7KJCIVrsrCXV+qikh1qKpw37y8iXDIePblo6UuRUSkoKoq3BtiEc5f0cyv9i6oy82LiORdVYU7wL/Z0Mq2A0cZGU+WuhQRkYKpunC/bH0ryZSz7YC6ZkSkclVduF+4Mv2lqsJdRCpZ1YV7S10N69rq2a5wF5EKVnXhDnDRqhaePXBUJzOJSMWqynDvWLuI3qFxXuzTzTtEpDLNGe5mdruZ9ZjZzlmWm5l9xcy6zGyHmV2S/zLz6/INbQD8Pw2JFJEKlcuR+x3A1tMsvwrYFDxuAL529mUV1prWOpY3x/nlC72lLkVEpCDmDHd3fwQ4cpom1wJ3edrjQIuZLctXgYVgZlxx7hIeeb6PYxNTpS5HRCTv8tHnvgI4kPH6YDBvQdt63jKOTU7xiI7eRaQCFfULVTO7wcw6zayzt7e0ofrG9YtpqYvy4M5XS1qHiEgh5CPcXwFWZbxeGcw7hbvf6u4d7t6RSCTysOozFw2H+J1z23loz2EmkqmS1iIikm/5CPd7gfcGo2YuAwbcvTsPn1twV52/lKGxJL96UaNmRKSyROZqYGbfAd4GtJnZQeAvgCiAu98C3A9cDXQBo8AHClVsvl2+sY36mjD/urObt76utH9JiIjk05zh7u7vnmO5Ax/LW0VFFI+GueLcdn686zB/ec0UsUi41CWJiORFVZ6hmuldHavoH5ngu08emLuxiEiZqPpwv3xjKx1rFnH7Y/t0rRkRqRhVH+5mxh/81ir294+y46DurSoilaHqwx1g6/lLqYmE+PYT+0tdiohIXijcgaZ4lP/8xjXc8/RB9vYOl7ocEZGzpnAP/PG/20AkFOJbv9LRu4iUP4V7oK0hxlVvWMoPnjnIsG6eLSJlTuGe4Y8uX8fgWJI7HttX6lJERM6Kwj3DhatauHJzO//4873s79ddmkSkfCncZ/jcNecRMuN//vj5UpciInLGFO4zLG+p5bpLV/Lgzlc5MjJR6nJERM6Iwj2Ld29ZzcRUiq8/srfUpYiInBGFexbnLG3kDzpWctuj+3jh8FCpyxERmTeF+yz+fOvrqY9F+MwPf81UStecEZHyonCfRWtDjJvevpmnXnqNL//0hVKXIyIyLwr303jHpSu57tKV/MPPXuCxrr5SlyMikjOF+xz+6trzWd9Wz5/983b6h8dLXY6ISE4U7nOorQnz9++6mNdGJ/jAHU/p0gQiUhYU7jl4w8pm/vEPL2HXoUE+8q2nmUimSl2SiMhpKdxzdMXr2/nCOy7gl119/Mn3tmkEjYgsaDmFu5ltNbPnzKzLzD6VZfn7zazXzLYFjw/lv9TSu+7SlXzqqtdz345ubvzOs4wnp0pdkohIVpG5GphZGLgZuBI4CDxlZve6++4ZTe92948XoMYF5SNv3UDYjL++fw8Dxyb5+nsupT4252YUESmqXI7ctwBd7v6iu08A3wWuLWxZC9uH37KeL153Ab96sZ/fv/kxunp0FquILCy5hPsK4EDG64PBvJneYWY7zOweM1uVl+oWsHd2rOKuP9rCkZEJrvnqY/zw2YO4qx9eRBaGfH2h+i/AWne/AHgIuDNbIzO7wcw6zayzt7c3T6suncs3tnHfjW9m87Im/uvd2/nwXU9zeHCs1GWJiOQU7q8AmUfiK4N5x7l7v7tPn+HzTeDSbB/k7re6e4e7dyQSiTOpd8FZ1lzL3f/lTXz26nN59IVefudvf8HND3cxOqHx8CJSOrmE+1PAJjNbZ2Y1wPXAvZkNzGxZxstrgD35K3HhC4eMD79lPQ9+8i1ctqGVLz74HG/94s/5p8f3a0SNiJTEnOHu7kng48CDpEP7e+6+y8w+b2bXBM1uNLNdZrYduBF4f6EKXsjWttXzjfd2cM9H3sSaxXX89x/t5M1feJibH+5iYHSy1OWJSBWxUn0J2NHR4Z2dnSVZdzG4O4919fP1R/by6At91NWEeeelK3lnxyrOW96EmZW6RBEpQ2b2tLt3zNlO4V54uw8N8o1HX+T/7uhmYirFOe2N/KdLVvAfLlzO8pbaUpcnImVE4b4AHR2d4L4d3fzgmYM88/JRAN6wopnf3dzOlee1c057o47oReS0FO4L3L6+Ef5156v8ePerPBsE/erFdVy+sY3L1i/msvWttDfFS1yliCw0Cvcy0jM4xk/29PDTPYd5ct8RhoLLCq9rq+eN6xZz6ZpFXLiqhQ2JBsIhHdmLVDOFe5maSjm7Dw3y+Iv9PLGvnyf2HWFoLB32dTVhzl/ezAUrm3nDymbOWdrI+rYGaiK6uKdItVC4V4iplLOvb5jtBwbYcfAo2w8OsLt78Pg15SMhY21bPee0N/K69kZe197A65Y2smZxHZGwQl+k0uQa7rqc4QIXDhkblzSycUkj77h0JQCTUym6eoZ5/vBQ8Bhm56EB7t/ZzfS+uiYcYm1bHZuWNLJhSQOva2+gJhyiIR7hyMgEj3X1c9PbN1NbEy7hv05ECkXhXoai4RDnLmvi3GVNJ80fnUjS1TPMc68O0dU7zN6eYXYdGuCBnd1ku7fIz5/rob0pzhvXL+aCFS2cs7SRDYl6jdgRqQAK9wpSVxPhgpUtXLCy5aT5Y5NT7O4e5MjwBAPHJkm5Ew4ZP93TQ+/wOLc9uo9kkP7NtVE2LmlgY6Ih/dyenl65qFahL1JG1OcuDByb5MCRUZ59+TX2vDpEV88wXT3DHBmZON6mMRbh3GVNbF7exLnLGtm8rJlN7Q3Eo+rWESkm9blLzpprozSvaOb8Fc0nzT8yMkFXzzAv9Azxm+4hdncP8r3OA4xOpC+GFg4ZGxMNbF7exObjwd/E4vqaUvwzRCSDwl1mtbi+hi3rFrNl3eLj81IpZ/+RUXYfGmRP9yC7uwf51d5+fvjsiatAL22KnxT4m5c1sXpxHSGN0RcpGoW7zEsoZKxrq2ddWz2/d8GJKz33D4+zp3voeODvPjTIL57vZSroy6+vCXPusiY2tTeyprWONYvrWN1ax5rWehp0D1qRvNP/KsmL1oYYb94U482b2o7PG5uc4oXDw+zuHmBP9xC7Dg3w4K5XT+rLB2itr2F1ax0rF9WxvDnO0uY4y5prWdYcZ1lLnLb6mI76ReZJ4S4FE4+GeUNwNm2mobFJ9veP8vKR0eB5hP39o+w4eJQHd40dP0FrWjRstDXEaGuI0dpQc+K5PkZbYw2t9bFgeQ3NdVFiEX3JK6Jwl6JrjEc5P8sXuJC+Dv6RkQm6B8aCxzEOHR2jb3icvuFx+ocneP7VIfqGJ5iYSmX5dKiNhtNfEtdGaa6LHp9uyTKvMR6lIRahIR6hoSZCfSysM3ulIijcZUExM1obYrQ2xLKG/zR3Z2g8Sd/QOP0jE/QNjdM3MsHAaHos/9HRSQaOTR4f5rkzmJ4e6XM68WgoHfixCPXBozFzOh6hPtgR1NaEqY0Gj5rZn+ORsLqWpKgU7lKWzIymeJSmeJT187jX+kQydTz0B45NMjQ2ycj4FCPjSYbGk4yMJxkOHiPjSYbH0tOHh8YY7k0yHLQ9Njn/e+PGo6HjO4J4EPx1NWHi0ROPWCREPBoiFpmePvk5Fg0Rj4SJBW3iM57TbYLnSEgnnlUxhbtUlZpIiERjjERj7Kw+JzmVYnRyirGJKY5Nph+jEye/PjYx43l6Ong9FswbHk/SOzTORDLFeDLF2OQU48kU48kpJqfO7iTD6ZCPR0/dIWTdeZy0IznxHM94na1tNBwiEjYioRDRsBEJh4iEjGg4pMtUl4jCXeQMRMIhmsIhmuLRgq4nOZViYirF2GQ67McnU4xNPx/fCZy8Q5hum/meme+dfs/QWHLW9+aLWfrqpZFQegcQzQj+9A7BTt05zNo2vTwcOrEsEp75nuw7mZnvj4RChEIQCaV3QOl5RsiMSNAmbMH88InpE21PvD9kLLi/khTuIgtYJBwiEg5RV+STft2diamMHcdJO4wU4zN2CJNTKZIpJzmVYnLKSaaC55OmgzapFMkpP94uPZ1eNjmVOv6eY5OnLs/WdirlTKZSlOhKKscdD35L7yTCGTuESMgIBc/hkPHuLav50L9dX9B6cgp3M9sKfBkIA99097+ZsTwG3AVcCvQD73L3l/JbqogUi5kFXTfhgv91ki9TKc+6k8m6Q/D0TiE55aTcSaacqVSKqRRMpVLB65MfyVTQNtihTH/G9LKZ70/N8p5kymlrOLtuwVzMGe5mFgZuBq4EDgJPmdm97r47o9kHgdfcfaOZXQ98AXhXIQoWEckmfeSscxym5TKgdwvQ5e4vuvsE8F3g2hltrgXuDKbvAX7bFloHlIhIFckl3FcABzJeHwzmZW3j7klgAGid+UFmdoOZdZpZZ29v75lVLCIicyrqqXjufqu7d7h7RyIxj8HJIiIyL7mE+yvAqozXK4N5WduYWQRoJv3FqoiIlEAu4f4UsMnM1plZDXA9cO+MNvcC7wumrwN+5qW6xZOIiMw9Wsbdk2b2ceBB0kMhb3f3XWb2eaDT3e8FbgO+ZWZdwBHSOwARESmRnMa5u/v9wP0z5t2UMT0GvDO/pYmIyJnStU1FRCqQlapr3Mx6gf1n+PY2oC+P5eTTQq1Ndc2P6pof1TV/Z1rbGnefc7hhycL9bJhZp7t3lLqObBZqbaprflTX/Kiu+St0beqWERGpQAp3EZEKVK7hfmupCziNhVqb6pof1TU/qmv+ClpbWfa5i4jI6ZXrkbuIiJxG2YW7mW01s+fMrMvMPlXiWl4ys1+b2TYz6wzmLTazh8zsheB5URHquN3MesxsZ8a8rHVY2leC7bfDzC4pcl1/aWavBNtsm5ldnbHs00Fdz5nZvy9gXavM7GEz221mu8zsE8H8km6z09S1ELZZ3MyeNLPtQW2fC+avM7MnghruDi5RgpnFgtddwfK1Ra7rDjPbl7HNLgrmF+33P1hf2MyeNbP7gtfF217uXjYP0pc/2AusB2qA7cDmEtbzEtA2Y97/AD4VTH8K+EIR6ngLcAmwc646gKuBBwADLgOeKHJdfwn8WZa2m4OfZwxYF/ycwwWqaxlwSTDdCDwfrL+k2+w0dS2EbWZAQzAdBZ4ItsX3gOuD+bcAHw2m/xi4JZi+Hri7yHXdAVyXpX3Rfv+D9f0J8L+B+4LXRdte5XbknsuNQ0ot88YldwK/X+gVuvsjpK/pk0sd1wJ3edrjQIuZLStiXbO5Fviuu4+7+z6gi/TPuxB1dbv7M8H0ELCH9D0JSrrNTlPXbIq5zdzdh4OX0eDhwBWkb9ADp26zgt/A5zR1zaZov/9mthL4PeCbwWujiNur3MI9lxuHFJMDPzazp83shmBeu7t3B9OvAu2lKW3WOhbCNvx48Cfx7RndViWpK/jz92LSR3wLZpvNqAsWwDYLuhi2AT3AQ6T/Ujjq6Rv0zFx/TjfwKURd7j69zf462GZ/Z+n7PJ9UV5aa8+3vgf8GpILXrRRxe5VbuC80b3b3S4CrgI+Z2VsyF3r6b6ySD0daKHUEvgZsAC4CuoG/LVUhZtYAfB/4pLsPZi4r5TbLUteC2GbuPuXuF5G+p8MW4PWlqGOmmXWZ2fnAp0nX91vAYuDPi1mTmb0d6HH3p4u53kzlFu653DikaNz9leC5B/gh6V/4w9N/5gXPPSUqb7Y6SroN3f1w8J8xBXyDE90IRa3LzKKkA/Tb7v6DYHbJt1m2uhbKNpvm7keBh4E3ke7WmL66bOb6i34Dn4y6tgZdXO7u48D/ovjb7HLgGjN7iXT38RXAlyni9iq3cM/lxiFFYWb1ZtY4PQ38LrCTk29c8j7g/5SivtPUcS/w3mDUwGXAQEZXRMHN6N/8j6S32XRd1wejBtYBm4AnC1SDkb4HwR53/1LGopJus9nqWiDbLGFmLcF0LXAl6e8EHiZ9gx44dZsV/AY+s9T1m4ydtJHu187cZgX/Wbr7p919pbuvJZ1TP3P3P6SY2+tsv5Et9oP0t93Pk+7v+2wJ61hPeqTCdmDXdC2k+8l+CrwA/ARYXIRavkP6z/VJ0v14H5ytDtKjBG4Ott+vgY4i1/WtYL07gl/oZRntPxvU9RxwVQHrejPpLpcdwLbgcXWpt9lp6loI2+wC4Nmghp3ATRn/D54k/WXuPwOxYH48eN0VLF9f5Lp+FmyzncA/cWJETdF+/zNqfBsnRssUbXvpDFURkQpUbt0yIiKSA4W7iEgFUriLiFQghbuISAVSuIuIVCCFu4hIBVK4i4hUIIW7iEgF+v/WIots0I55TgAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -396,9 +331,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "learning duration=423.0116012096405(s)\n", - "{'iterations': 400, 'cost_function': 0.07465448444289242}\n", - "nb errors=1/815\n" + "learning duration=423.5131194591522(s)\n", + "{'iterations': 400, 'cost_function': 0.05707730196227899}\n", + "nb errors=0/815\n" ] } ], @@ -453,26 +388,26 @@ " [0 0 0 ... 0 0 0]]\n", "815\n", "11205435\n", - "out=[[7.02156302e-03 2.33280598e-05 4.02268624e-08 ... 1.30178221e-05\n", - " 1.63821129e-02 1.21589216e-02]\n", - " [1.68391781e-03 3.09986375e-07 4.26591269e-07 ... 9.55882496e-05\n", - " 5.12839707e-04 2.55024708e-03]\n", - " [1.47725468e-02 8.30785492e-04 7.21927595e-06 ... 3.47815949e-08\n", - " 1.19174745e-03 8.22096419e-02]\n", + "out=[[1.38390249e-02 1.96756491e-05 7.21641830e-07 ... 1.55135916e-05\n", + " 2.04312023e-02 4.01007342e-01]\n", + " [2.26919945e-03 1.47596120e-06 1.40291113e-06 ... 1.99084043e-05\n", + " 3.37053763e-04 3.57520412e-03]\n", + " [9.96004008e-03 1.06084483e-04 7.61141323e-06 ... 2.39898456e-07\n", + " 6.81609807e-03 1.42383557e-02]\n", " ...\n", - " [3.92805062e-03 1.97200169e-06 1.02163734e-04 ... 6.69744040e-05\n", - " 4.96492855e-04 1.50799104e-04]\n", - " [1.67386876e-04 9.89408390e-06 1.05090024e-03 ... 1.02952984e-04\n", - " 7.46969275e-06 4.33721488e-05]\n", - " [3.01240797e-02 2.29844924e-06 5.52163749e-05 ... 6.88642825e-06\n", - " 6.63783082e-05 1.94845737e-03]]\n", + " [2.18693695e-03 1.06932897e-05 6.26956877e-05 ... 1.73090800e-05\n", + " 1.73771347e-03 9.35053349e-04]\n", + " [1.36068704e-03 8.46870052e-05 1.03742817e-03 ... 1.03530640e-05\n", + " 4.33066815e-05 5.62964616e-05]\n", + " [1.21157208e-02 8.84508840e-06 4.39822882e-05 ... 6.85921168e-05\n", + " 4.30372135e-04 2.13959714e-03]]\n", "alleq? = False\n", - "eq? = [0.05040805 0.13959513 0.11492665 0.05502723 0.06011746 0.02361683\n", - " 0.02586794 0.02769004 0.2025706 0.06500607 0.18406011 0.22181191\n", - " 0.34456376 0.07416278 0.028787 0.28131057 0.26352134 0.24755618\n", - " 0.14341575 0.14964145 0.11307199 0.21138317 0.21132063 0.26183176\n", - " 0.20867916 0.13169467 0.04338615 0.08219188 0.02569916 0.15934616\n", - " 0.06531444]\n", + "eq? = [0.0398354 0.13953203 0.11592406 0.0546004 0.05237799 0.02873091\n", + " 0.0252462 0.03005645 0.2022703 0.06232326 0.17961341 0.22085328\n", + " 0.34397805 0.07515849 0.02781049 0.28329346 0.2645511 0.27388148\n", + " 0.17402787 0.14252466 0.11059087 0.20355302 0.21221428 0.2541548\n", + " 0.21194065 0.13138707 0.04435148 0.0817355 0.0295538 0.15537906\n", + " 0.06733432]\n", "hout=[[0. 0. 0. ... 0. 0. 0.]\n", " [0. 0. 0. ... 0. 0. 0.]\n", " [0. 0. 0. ... 0. 0. 0.]\n", @@ -480,7 +415,7 @@ " [0. 0. 0. ... 0. 0. 0.]\n", " [0. 0. 0. ... 0. 0. 0.]\n", " [0. 0. 0. ... 0. 0. 0.]]\n", - "11203805.0\n", + "11205435.0\n", "alleq? = False\n", "expout=[[0 0 0 ... 0 0 0]\n", " [0 0 0 ... 0 0 0]\n", @@ -490,7 +425,7 @@ " [0 0 0 ... 0 0 0]\n", " [0 0 0 ... 0 0 0]]\n", "11205435\n", - "nb errors=1\n", + "nb errors=0\n", "3174807889\n", "ieq? = [0. 0. 0. 0. 0.03500698 0.03500698\n", " 0. 0.03500698 0.04947692 0. 0. 0.\n", @@ -551,217 +486,217 @@ " [0 0 0 ... 0 0 0]]\n", "diff exp= [ 3 17 12 3 4 1 1 1 36 4 30 45 117 5 1 75 64 75\n", " 39 20 11 42 40 64 55 15 2 6 1 22 4]\n", - "[[ 0.0557544 0.07220544 0.02348561 ... 0.10377472 0.07024534\n", - " -0.03906525]\n", - " [-0.06879682 0.01771189 0.07511974 ... -0.08158879 0.04889255\n", - " -0.03149567]\n", - " [-0.03905324 0.02414413 0.02660072 ... 0.02757606 0.02100658\n", - " -0.01965769]\n", + "[[-6.60698722e-02 -7.29361896e-02 -2.52010918e-03 ... -1.59524072e-01\n", + " 4.56764256e-02 -6.63448815e-05]\n", + " [ 7.67937124e-03 -5.49511026e-02 1.01345633e-01 ... 4.67231078e-02\n", + " 4.02507169e-02 2.90096748e-02]\n", + " [-1.17670574e-01 -5.12343778e-02 9.50786298e-02 ... 4.10929609e-02\n", + " -7.07103509e-02 4.93241991e-02]\n", " ...\n", - " [-0.04725369 -0.06673883 0.01933836 ... -0.02371734 0.06508109\n", - " -0.03886366]\n", - " [ 0.10340191 0.07321227 -0.00748062 ... 0.06231394 0.01620147\n", - " -0.0616713 ]\n", - " [-0.08271943 0.04697974 0.00823985 ... -0.05828773 -0.10284097\n", - " -0.01427887]]\n", + " [ 6.85002500e-02 5.00301758e-02 -4.36550511e-02 ... -4.88110939e-02\n", + " -3.40756448e-02 -1.59853943e-03]\n", + " [ 7.41334647e-02 -5.33964212e-02 6.68686008e-03 ... -5.85214246e-03\n", + " -2.00952284e-02 -4.62444240e-02]\n", + " [-7.96763215e-02 -6.29254591e-02 1.72862299e-02 ... -5.76175961e-03\n", + " 4.65056101e-02 9.59061767e-02]]\n", "float64\n", - "[[ 0.02213613 0.05731779 -0.01394594 ... 0.04772608 0.07225857\n", - " -0.0825427 ]\n", - " [ 0.03485324 0.00096309 -0.05849745 ... -0.02192778 0.02390578\n", - " 0.0275471 ]\n", - " [ 0.00336947 -0.04794582 -0.02038197 ... -0.00901655 0.02860445\n", - " -0.0435919 ]\n", + "[[ 0.07869079 0.01784195 -0.01661446 ... -0.03781187 -0.033408\n", + " 0.00952081]\n", + " [ 0.02671465 -0.00897285 0.0321768 ... -0.00086714 -0.05703338\n", + " -0.01002881]\n", + " [ 0.01687378 0.00841117 0.01686227 ... -0.04498684 -0.05211184\n", + " 0.05117629]\n", " ...\n", - " [-0.0257934 0.02804016 -0.06647186 ... -0.01146406 -0.03654793\n", - " 0.01019006]\n", - " [ 0.04151595 -0.0675045 -0.03321654 ... -0.02684758 -0.01795175\n", - " 0.03171039]\n", - " [ 0.00528835 0.04428263 0.00381019 ... 0.00282927 0.07898217\n", - " -0.0762144 ]]\n", + " [-0.05044929 -0.03539152 -0.01326199 ... -0.00637028 0.07438454\n", + " 0.04007749]\n", + " [ 0.07533858 0.03509777 0.02189683 ... 0.02176267 0.00699071\n", + " 0.0462815 ]\n", + " [ 0.04403078 0.054973 0.00898661 ... 0.0175749 -0.07828776\n", + " -0.07952211]]\n", "float64\n", - "[[-0.02997247 0.03455656 -0.07417923 ... -0.02829024 0.05436532\n", - " 0.05134025]\n", - " [-0.07875419 0.00393465 -0.08026576 ... -0.05465974 0.0324817\n", - " -0.02375458]\n", - " [-0.07305269 0.02395509 -0.11152735 ... -0.12659137 0.06807575\n", - " 0.01484116]\n", + "[[ 0.05900678 -0.02829165 0.02863568 ... -0.05847156 0.05456701\n", + " 0.06037877]\n", + " [-0.0091646 -0.0290578 -0.00603066 ... -0.13805689 -0.00517954\n", + " 0.02099795]\n", + " [-0.05663264 -0.00841634 0.0306576 ... 0.05943252 -0.03177942\n", + " 0.0599138 ]\n", " ...\n", - " [ 0.08643974 0.02929352 0.01158213 ... -0.01526343 -0.07215164\n", - " 0.03576821]\n", - " [ 0.01417914 0.05976536 -0.03049588 ... 0.03925342 -0.01863501\n", - " -0.04170468]\n", - " [ 0.06499799 0.01864715 -0.00152425 ... -0.0446093 0.01481864\n", - " -0.04618011]]\n", + " [-0.0070786 -0.01648721 -0.05444909 ... 0.04625718 0.08137886\n", + " -0.06628168]\n", + " [ 0.06495866 -0.01196902 0.02260175 ... -0.02214369 0.00846185\n", + " 0.02323075]\n", + " [ 0.01837313 -0.01572588 0.06722422 ... 0.05229227 0.08095286\n", + " 0.01142394]]\n", "float64\n", - "[[-0.05889484 0.18344976 -0.00160981 ... -0.03903363 -0.12195829\n", - " -0.01015448]\n", - " [-0.10341429 0.0963354 -0.03478289 ... -0.08986487 0.10298888\n", - " -0.06136903]\n", - " [-0.01390351 0.01830357 -0.0745976 ... -0.07265028 -0.06033243\n", - " -0.05752233]\n", + "[[ 0.10696741 0.00240407 -0.15387654 ... 0.05435701 -0.05087933\n", + " -0.06593519]\n", + " [ 0.02772879 -0.08691446 -0.10054021 ... -0.00859098 0.06726323\n", + " -0.08753627]\n", + " [-0.15457361 0.07443451 0.02716356 ... 0.04303552 0.02146266\n", + " -0.03359605]\n", " ...\n", - " [ 0.11936787 0.05431646 -0.00324428 ... -0.1010773 0.11150053\n", - " 0.01251737]\n", - " [-0.12802571 -0.0775965 0.05992476 ... 0.02712887 -0.18085427\n", - " 0.05829372]\n", - " [-0.29162374 -0.06629717 -0.1275772 ... 0.04846268 -0.09815413\n", - " -0.01593007]]\n", + " [ 0.0777019 0.11091846 -0.01744185 ... -0.17505547 -0.19598354\n", + " 0.10278839]\n", + " [-0.12842631 -0.03147932 0.09359574 ... -0.09563449 0.11847634\n", + " -0.31498832]\n", + " [ 0.03896407 0.09883853 0.12169193 ... 0.03419102 0.03419029\n", + " 0.05204358]]\n", "float64\n", - "[[-0.1325509 -0.28917484 -0.36452295 0.38937275 0.29855446 -0.56633955\n", - " -0.11894985 0.14615452 0.27506117 -0.24378192 -0.34014836 0.21207197\n", - " 0.25185663 0.2990967 0.20847993 0.12416778 0.30845196 0.52906747\n", - " -0.25591803 0.0950176 0.20374602 0.12380838 -0.41130144 0.51340886\n", - " -0.22932788 0.25614323 0.40494047 0.29963032 0.09064212 -0.22466064]\n", - " [-0.21842741 0.43676121 0.32452456 0.27560908 0.28688555 -0.36684637\n", - " -0.2768973 0.29701715 0.19682916 -0.31462011 0.38411373 0.33629757\n", - " 0.34275558 0.23991198 0.26962312 0.20933339 0.21741257 0.33292256\n", - " -0.26847848 0.27164927 0.20145696 0.28183788 -0.36570778 -0.36743662\n", - " 0.29275853 -0.3609941 0.31134782 0.30701609 0.27148187 -0.35127274]\n", - " [-0.18599914 -0.22932647 -0.31723792 0.20418819 0.28729868 0.32326105\n", - " -0.26978205 0.28940955 0.23779453 -0.28113315 -0.28252582 -0.33966319\n", - " -0.34871357 0.18614191 0.17825152 0.20967203 0.28518052 0.25728927\n", - " -0.29057523 0.21341496 0.29856243 0.2924751 0.28642851 -0.34079255\n", - " -0.33091028 0.34753619 0.38126717 -0.77839147 0.26838924 0.77949332]\n", - " [-0.40169393 -0.25607432 -0.26595841 0.29851479 -0.14951521 -0.36084095\n", - " -0.18139971 0.20430822 -0.21556439 -0.1608901 -0.247382 -0.1748354\n", - " -0.39732983 -0.31562482 0.45752789 0.18159422 -0.21784561 0.36183266\n", - " 0.12945519 0.17901193 -0.27784385 0.17413807 -0.50380271 0.27528009\n", - " -0.18252525 0.19188617 -0.45737423 0.42686217 0.2288345 -0.29587747]\n", - " [-0.15284004 -0.2026549 -0.27157136 0.17058932 0.22224184 0.39031447\n", - " -0.14797518 0.18888431 0.19669651 -0.17162832 -0.27117957 -0.31872442\n", - " -0.41845489 0.15855717 0.15640793 0.12740839 0.22793032 0.39229163\n", - " -0.20033951 0.14076785 0.18689386 0.16807512 0.54858314 -0.48847065\n", - " -0.25785232 0.25003725 0.52842041 0.57522003 0.24027416 -0.76779422]\n", - " [-0.16269435 -0.22101611 -0.26564475 0.25660618 -0.11680178 0.4066733\n", - " -0.17336099 0.19325702 0.25785189 0.07929265 -0.25670364 0.08402639\n", - " 0.22129468 0.20311439 0.19174751 0.17662273 0.26511539 0.34131359\n", - " 0.09364041 0.12279871 0.21911012 0.17608278 -0.44638682 0.40532443\n", - " -0.19844155 0.20304209 0.26645852 0.30339491 0.14043021 -0.32977136]\n", - " [-0.20638367 -0.2956799 0.28066711 0.1954509 0.18261799 0.27356401\n", - " -0.16210314 -0.00223359 0.17245733 -0.18338077 0.31941986 -0.23080695\n", - " -0.29152289 0.12281143 0.25914849 0.19904965 0.18737266 0.45747444\n", - " -0.17952803 0.27794814 0.15737723 0.16461571 0.21821248 -0.27856394\n", - " 0.11016427 -0.10571796 -0.62591474 0.28720669 0.33389292 0.2035094 ]\n", - " [-0.22050631 -0.25286749 -0.26953045 0.37834351 0.13994768 0.28652657\n", - " -0.12953209 0.17627146 0.22070618 -0.15044046 -0.3156661 -0.1907288\n", - " -0.23970326 0.18682206 0.31507868 0.1599644 0.19687159 -0.49983208\n", - " -0.15579676 0.31519764 0.13486501 0.14867391 -0.39377148 -0.4115842\n", - " -0.19440296 0.22168248 -0.60043367 0.20596054 -0.36041086 -0.30412567]\n", - " [ 0.23725364 0.232269 0.3358541 0.38533614 -0.27655159 -0.31937577\n", - " 0.38835809 -0.1527393 -0.28846214 -0.38725845 -0.37205894 0.38767994\n", - " -0.33814773 -0.28432981 -0.19543037 -0.22426076 -0.29944027 0.36233396\n", - " 0.23096656 -0.26667835 0.31057796 -0.15387669 0.3711605 -0.37204284\n", - " 0.27964392 -0.34422825 -0.34702616 0.32679397 -0.25323086 0.38148361]\n", - " [-0.28136464 -0.35197033 0.58572854 -0.49150689 0.16590307 -0.36151608\n", - " -0.123372 0.13832011 0.23829353 -0.21289359 -0.46981036 -0.43507413\n", - " 0.3731331 0.37657815 0.36952183 0.19363351 0.27531143 -0.52124736\n", - " -0.17088236 0.29686848 0.22096809 0.1355081 -0.25947609 0.36644829\n", - " -0.18458954 0.21819228 0.4086827 0.17063448 0.34251301 -0.17429822]\n", - " [ 0.25133848 -0.41098215 -0.3520982 -0.26423149 0.46178095 0.27089767\n", - " 0.44654513 -0.14077847 -0.37100797 -0.46246192 -0.49946467 -0.2432107\n", - " -0.20472625 0.44892511 -0.24948815 -0.24926501 0.4704408 -0.27195505\n", - " 0.46524209 -0.25134345 -0.3945018 -0.19142922 0.1962772 -0.25094776\n", - " 0.24729043 -0.28370583 -0.25098298 -0.26314313 -0.27684739 0.20037508]\n", - " [ 0.22865932 0.19923317 0.23638424 0.47632851 -0.33085159 -0.22782283\n", - " -0.42024901 -0.29747022 -0.20939235 0.37385286 0.22563263 0.28725024\n", - " 0.32464 -0.16933172 -0.18395516 -0.21693742 -0.24693684 -0.20685558\n", - " 0.3211959 -0.1804937 0.35336637 -0.35274561 -0.26961425 0.26087096\n", - " -0.50318762 0.40675928 -0.51164734 0.22169163 -0.17326055 -0.24861885]\n", - " [ 0.26072773 0.35485058 -0.33020539 -0.25595515 -0.36449747 0.34852049\n", - " 0.27430986 -0.23271388 -0.27391331 0.38567377 0.38143339 -0.32685676\n", - " -0.3199825 -0.33443088 -0.25600089 -0.2393313 -0.29401318 -0.30889824\n", - " 0.26025367 -0.29960242 -0.32428516 -0.22722387 0.31788572 -0.33900581\n", - " 0.25162114 -0.29115866 -0.32001207 -0.34629479 -0.27660776 0.31193061]\n", - " [-0.4945423 -0.42688381 -0.46157494 -0.44988147 0.13610896 -0.29941681\n", - " -0.1435885 0.15323543 0.41112111 -0.13356885 -0.47942275 -0.20212103\n", - " -0.30397655 0.41348186 -0.38727232 0.35118387 0.2062873 -0.34593166\n", - " -0.16423655 -0.4128686 0.14939665 0.14140491 -0.2463531 0.38166041\n", - " -0.22295011 0.22316516 -0.3911026 0.1492317 -0.38251338 -0.24881655]\n", - " [ 0.0854394 -0.27936426 -0.33077924 -0.38280048 0.18901215 0.1918798\n", - " -0.15310969 0.17027026 0.24017082 -0.17158513 0.2176656 -0.24800393\n", - " 0.20056674 -0.26115848 0.34003346 0.20774728 0.23383834 -0.48759314\n", - " -0.16416862 0.26474999 -0.11615717 0.15502662 -0.29113322 0.30504138\n", - " -0.1641698 0.17626062 0.32548999 0.20128478 0.29200888 -0.21065557]\n", - " [-0.23417311 -0.43011248 -0.43503175 0.24771656 -0.22188664 0.2154642\n", - " 0.22312176 -0.19816269 0.40298213 0.23152692 -0.40826669 0.22499916\n", - " 0.26404724 0.24929604 0.24188434 0.4093906 -0.46271672 0.21524827\n", - " 0.21762978 0.20482595 -0.4793256 -0.19928453 0.19714477 -0.44794345\n", - " 0.4694556 -0.47386103 0.21473289 -0.20325124 0.21493616 0.18831664]\n", - " [-0.24592325 0.48325534 0.4563129 0.23178082 -0.2905243 0.25907037\n", - " 0.29588913 -0.26355106 0.26029627 0.30125561 0.44199938 0.24682005\n", - " 0.24248588 0.24735151 0.24330372 0.2615582 0.42166943 0.23235929\n", - " 0.29327792 0.24493469 0.41436112 -0.2525025 0.28464491 -0.25585653\n", - " 0.25204777 -0.27377021 0.24823772 -0.28345512 0.25196669 0.23852596]\n", - " [ 0.16955011 0.19852533 0.32076844 -0.40255553 -0.18841045 -0.29581985\n", - " 0.47200894 -0.19519046 -0.17735968 0.26149577 0.24164748 0.34646626\n", - " 0.3807342 -0.17854462 -0.15490903 -0.17423235 -0.20228916 -0.23093513\n", - " 0.18501136 -0.20705726 -0.78586764 -0.18452845 -0.35735279 0.3409857\n", - " 0.41402353 -0.39248486 -0.92594813 0.31864015 -0.18814035 -0.31942308]\n", - " [ 0.18873441 0.1548334 0.3385235 -0.33670861 -0.12917905 -0.26797894\n", - " 0.38428232 -0.14734577 -0.1826554 0.22119324 0.25349943 0.30391684\n", - " 0.33417976 -0.19354773 -0.16805905 -0.17731272 -0.1597804 -0.26231867\n", - " 0.1529347 -0.23942497 -1.05310839 -0.16989469 -0.31248883 0.29809725\n", - " 0.31710832 -0.41393381 0.8750729 0.29088307 -0.25207511 -0.29290745]\n", - " [ 0.27147662 0.25194653 0.2404362 -0.32551328 0.2731765 -0.1966141\n", - " -0.21464236 0.27830366 -0.29866638 -0.29772267 0.26356289 -0.30726081\n", - " -0.30189467 -0.28571272 -0.13966994 -0.31059602 0.29542614 -0.18564245\n", - " -0.2864951 -0.25291384 0.2105983 0.28079009 -0.20804756 0.2453756\n", - " -0.28497174 0.29380434 -0.26076532 0.19480014 -0.17437401 -0.2507283 ]\n", - " [-0.43546416 0.28610252 0.24563272 -0.38279164 0.30680311 -0.16174682\n", - " -0.24578522 0.31396347 0.40718273 0.30109553 0.3008191 0.32269498\n", - " 0.33090804 -0.32015576 -0.30590253 0.37653498 -0.39990787 -0.30551113\n", - " -0.31316886 0.35599666 0.2221606 0.30053462 -0.16817282 0.22245397\n", - " -0.29883457 0.2866909 0.37658469 0.15045594 -0.34202289 -0.16345502]\n", - " [ 0.58174524 -0.38036293 -0.12371625 -0.58953115 -0.03496946 0.42960706\n", - " 0.07981041 -0.01678514 -0.42752442 0.09707686 -0.20415672 -0.39930325\n", - " -0.57077582 -0.5732624 0.44166947 -0.49831284 -0.10388246 0.22528448\n", - " 0.03922221 0.21675925 -0.09118511 -0.04640922 0.08514536 0.41655103\n", - " -0.5388268 0.35444164 0.21959447 -0.14831794 0.24770064 0.1404669 ]\n", - " [ 0.34344785 0.52470703 -0.30207387 -0.34692644 -0.10710187 -0.46747203\n", - " 0.16852558 -0.12194306 -0.19728183 0.26989604 -0.31405313 0.52842723\n", - " -0.34971979 -0.30597677 -0.46436916 -0.23031576 -0.16409086 0.32400693\n", - " 0.07448135 0.34848751 -0.32521744 -0.09965054 0.30140678 0.33832832\n", - " 0.46210998 0.33877623 0.33647071 -0.33722428 0.37402961 0.29210687]\n", - " [-0.40026696 -0.2571476 -0.22715913 0.4523929 -0.17567459 0.27815996\n", - " 0.2660151 -0.19499637 -0.48344326 0.22926542 -0.23046939 0.37959823\n", - " 0.46723975 0.43109145 0.21965306 -0.48484388 -0.24350426 0.18304369\n", - " 0.21867198 0.18302082 -0.24423417 -0.22257808 0.19293941 0.43795414\n", - " -0.42368013 0.40634573 0.18557437 -0.20223412 0.19123416 0.23628946]\n", - " [ 0.20067388 0.17972366 0.258392 -0.43565131 -0.1881831 -0.25979871\n", - " 0.50992188 -0.19674711 -0.20716478 0.27721717 0.2574644 0.2520596\n", - " 0.32144983 -0.18317972 -0.18698139 -0.19556815 -0.2039489 -0.24379815\n", - " 0.21205838 -0.22347751 0.7151945 -0.21571999 -0.28661461 0.26133561\n", - " 0.42070747 -0.44814001 0.61711587 0.2398771 -0.22085111 -0.28450324]\n", - " [-0.25621537 -0.20588322 -0.21241789 0.27019802 -0.29045806 -0.38320329\n", - " -0.34345049 0.32419838 -0.3866418 -0.46000132 -0.18722989 0.40503982\n", - " 0.39830478 -0.41405026 0.22916122 0.32123524 -0.33529907 0.19281364\n", - " -0.40046807 0.16507402 -0.41475995 0.33622089 0.48843724 0.24777033\n", - " -0.22635939 0.19653097 0.30235507 -0.49346781 0.16237926 -0.35108631]\n", - " [ 0.32426821 -0.29325158 -0.31253514 0.33169679 0.2648384 -0.25218521\n", - " -0.15778054 0.1917039 -0.15036747 -0.17484011 -0.32225221 -0.16028381\n", - " -0.34795778 -0.30004198 -0.33959329 0.23771047 -0.20829783 0.46750362\n", - " -0.27478765 0.29938001 0.2750411 0.15034207 -0.32573619 0.26711827\n", - " -0.16234707 0.16172314 -0.40146416 0.25074182 0.34594557 -0.2294527 ]\n", - " [-0.39086492 0.33791729 0.25414414 0.32317143 0.21256975 -0.4470921\n", - " -0.21674408 0.29532214 0.26004134 -0.13979308 -0.52392183 -0.26257366\n", - " -0.23330853 0.28028351 -0.39352121 0.34194571 0.25478363 0.53539054\n", - " -0.20687121 -0.30287403 0.11174146 0.23049415 0.46617705 -0.23231521\n", - " 0.16600536 -0.10823017 -0.31983309 0.28450134 -0.32340862 0.34792134]\n", - " [ 0.15968989 0.04539796 0.13797866 -0.33090176 0.1551261 -0.27926428\n", - " -0.14101174 0.21062505 0.31322432 -0.1640927 0.21693746 -0.17905015\n", - " -0.22241877 0.00181916 -0.14322096 0.31862468 0.18874978 -0.28229745\n", - " -0.14949976 -0.10474744 0.14203505 0.18323023 -0.4414623 -0.5609364\n", - " 0.16476426 -0.11101744 -0.34873226 0.28405074 -0.22093934 0.35101786]\n", - " [ 0.26700571 0.47050586 0.43780121 -0.29181925 0.37043068 0.34028964\n", - " -0.40350734 -0.42949405 0.31350065 -0.35928447 0.38846802 -0.21866305\n", - " -0.19920717 0.35424354 -0.23298011 -0.40000894 0.3427951 -0.23520597\n", - " -0.37691376 -0.18746862 0.31498652 -0.53372021 0.29027364 -0.22985006\n", - " 0.21668987 -0.20602572 -0.20156348 -0.36831792 -0.18906395 0.23244866]\n", - " [-0.36746827 -0.46811686 0.28314736 0.41309417 0.17322531 0.36050697\n", - " -0.13050854 0.30692526 0.20300263 -0.17103054 0.39539739 -0.18433297\n", - " -0.18497732 0.16366456 0.44616947 0.27476185 0.15297747 -0.62442161\n", - " -0.15777164 -0.3991839 0.13190469 0.19668899 0.4007979 -0.23605135\n", - " 0.15509607 -0.11119275 -0.35150633 0.38848914 -0.45603468 0.29247722]]\n", + "[[-0.14973576 -0.36260224 0.29551313 -0.1744974 0.46032515 -0.5467562\n", + " -0.2345089 -0.20990169 0.34855824 -0.39262729 0.30583499 0.36635467\n", + " -0.18156976 -0.16424793 -0.1871476 0.23142369 -0.16092891 0.12968164\n", + " -0.31179845 -0.12507432 -0.30221033 -0.35845277 -0.26239196 -0.09717295\n", + " -0.14260611 -0.3136819 -0.28878178 0.38416913 -0.18776273 0.24372651]\n", + " [-0.2909065 -0.36142029 0.30660084 -0.23737996 0.21692402 -0.25688073\n", + " 0.36995612 0.41237566 0.36537192 0.27375295 -0.38260086 -0.2561971\n", + " -0.28135638 -0.2879116 -0.19361758 -0.3820055 -0.22655146 0.31371979\n", + " 0.45159988 -0.29220915 -0.25958387 -0.20126309 -0.28259112 -0.25464497\n", + " -0.3071605 -0.39981542 -0.31049403 0.39120459 -0.22269949 -0.39686082]\n", + " [-0.29804283 0.51078161 -0.49693209 -0.21358372 -0.45666682 -0.22756087\n", + " -0.2488299 -0.26187321 0.23457939 -0.3867514 0.25507427 0.23960302\n", + " -0.22252161 -0.4642595 -0.45212333 0.22189906 -0.36849644 0.2003641\n", + " -0.20083937 -0.20549131 -0.27916177 0.3396443 -0.26774176 -0.18934934\n", + " -0.19298721 0.51072081 -0.47610706 0.33785483 -0.41853297 0.28691688]\n", + " [ 0.16139944 0.08033216 -0.15991085 -0.20264071 -0.33184207 -0.19814382\n", + " -0.25540642 -0.3291699 0.27904376 0.47248443 0.2643735 0.27267801\n", + " -0.18892399 0.14677434 0.24109302 0.29661284 -0.28415144 0.22082215\n", + " -0.23643634 -0.21839491 -0.29166378 0.22677771 -0.21620926 -0.21136137\n", + " -0.21840886 -0.42533404 -0.3948052 -0.18634895 -0.23345746 0.34384318]\n", + " [-0.16801466 -0.3610321 0.33465942 -0.19542548 0.49433682 0.45254308\n", + " -0.24511313 -0.24614422 0.40292968 -0.39106598 0.30167816 0.34893062\n", + " -0.2657769 -0.19051816 -0.23211769 0.22803771 -0.18832064 0.13070543\n", + " -0.35139181 -0.14711688 -0.40850431 -0.28248311 -0.38867826 -0.15283255\n", + " -0.17170132 -0.31522199 -0.30840989 -0.00801928 -0.22187575 0.22605334]\n", + " [-0.15788831 -0.31726688 0.28489775 0.13078638 0.28482511 -0.18656436\n", + " -0.28064558 -0.32494889 0.41348963 0.36462225 0.38432815 -0.22859257\n", + " -0.2084439 -0.20283343 -0.18558134 -0.10852261 -0.17607629 0.17038491\n", + " 0.35482527 -0.17935643 -0.32649831 -0.19273519 -0.27973565 0.21021257\n", + " 0.08335903 -0.19958272 -0.20150297 -0.12860789 -0.22077416 0.33356316]\n", + " [-0.19612063 0.22461924 0.33655626 -0.19102189 0.29797855 -0.14584735\n", + " -0.19382869 0.17771602 0.34604843 0.28777091 0.23219864 -0.20763202\n", + " -0.15613039 -0.28162671 -0.18059611 -0.06259641 -0.19496241 0.2066153\n", + " -0.37733984 -0.21870787 -0.25553274 -0.21646679 -0.2010439 -0.18009247\n", + " -0.21858488 0.30006963 -0.1966044 -0.1112385 -0.20879291 -0.23732936]\n", + " [-0.16860213 -0.27973779 0.26256281 -0.16367003 -0.30087603 -0.36909745\n", + " -0.23508118 -0.24493457 0.62239599 -0.17332464 0.31925183 0.24068091\n", + " 0.31469156 -0.1992687 -0.17144307 0.18867997 -0.24437313 0.16849525\n", + " 0.21051972 -0.14033269 0.52057223 -0.31764664 0.44344947 -0.20943907\n", + " -0.16884015 0.24821052 -0.25854058 0.14178759 0.22374637 -0.33780504]\n", + " [ 0.01162944 0.39151727 -0.38951563 0.40426528 0.31582459 0.4147554\n", + " 0.27518256 -0.37067739 -0.38042659 0.40301207 -0.41786168 -0.33427828\n", + " -0.3316369 0.2517575 0.36514228 -0.28570312 0.33539267 -0.07221412\n", + " -0.34289718 0.12588544 -0.33288507 0.33211894 -0.34461691 -0.3159625\n", + " 0.13109375 -0.28359188 0.34110405 -0.21720696 -0.32097525 0.26717789]\n", + " [-0.18907625 -0.13269443 0.15706347 -0.23163456 0.18153311 0.25113168\n", + " -0.32313219 -0.14777351 -0.66899858 -0.70567618 0.68558827 -0.41329166\n", + " 0.28731179 -0.14803285 -0.12607743 0.2413902 -0.34940802 0.1996484\n", + " 0.37102958 -0.18982035 0.4109629 -0.31449243 0.34593493 0.10017559\n", + " -0.21608782 -0.28283466 -0.35947164 0.22646001 -0.5708301 0.22503122]\n", + " [-0.49633787 0.24755646 -0.24849818 -0.46321928 -0.2285622 0.20436383\n", + " 0.21322967 0.21800012 -0.21195621 -0.18892146 -0.24833 0.21000455\n", + " 0.21271922 0.19367462 0.73144829 0.22554473 0.155681 0.5231307\n", + " 0.57679619 -0.4847006 0.19537191 0.19743044 0.19643974 0.71021497\n", + " -0.56100103 0.20913396 0.20115071 0.20774666 0.17214792 -0.26011097]\n", + " [-0.47822108 -0.24624429 0.25934957 0.28384086 0.25803889 0.24197077\n", + " 0.23801684 0.57934308 -0.23649293 0.54888353 -0.22117489 -0.26750188\n", + " 0.14397689 -0.32372334 -0.31009984 -0.29631008 0.26077659 -0.27513666\n", + " 0.22140603 0.26736221 0.16150441 -0.34411066 0.22992564 0.23812075\n", + " 0.26061517 -0.26216649 0.43677147 -0.28568801 0.15262055 -0.54663688]\n", + " [ 0.40130992 0.31782063 -0.28939589 0.37542767 -0.31314133 0.27798926\n", + " 0.28366932 0.29140502 -0.26929064 -0.27084178 -0.27636876 0.30173772\n", + " 0.23808837 0.25301468 0.28558075 0.27500567 0.24569605 -0.38112444\n", + " 0.2582676 0.39553388 0.2515253 0.2534919 0.28251368 0.27658888\n", + " 0.39496107 0.3119005 0.31660067 0.3208386 0.24768142 -0.30714536]\n", + " [-0.19374993 -0.32405918 0.30316484 -0.22781076 0.40047242 0.200834\n", + " -0.40054595 -0.27052372 -0.48480973 -0.15502854 0.4256241 0.37129144\n", + " 0.24659749 -0.31232531 -0.2146204 0.20585014 0.28344117 0.21218247\n", + " -0.43857195 -0.20867396 0.32040868 0.3918702 0.30044789 -0.30972283\n", + " -0.19067335 -0.42873678 0.44861008 0.19757719 0.38386374 0.31883434]\n", + " [-0.16108962 -0.21204063 0.2154806 -0.16588425 0.30702553 0.23937038\n", + " -0.25072551 -0.21240856 0.4965927 -0.18568141 0.3621928 0.35111818\n", + " 0.27617463 -0.18140273 -0.17903385 0.18157359 -0.29506238 0.17407977\n", + " 0.29295766 -0.17733574 0.47192796 0.15191911 0.4005843 0.05374512\n", + " -0.1803939 0.20520782 -0.31961994 0.16458323 0.28115527 0.32457584]\n", + " [ 0.22545514 0.23253668 -0.23608664 0.43532661 -0.42590264 -0.23341558\n", + " -0.38410003 0.22510745 0.23955163 0.24230564 -0.42159868 -0.40522114\n", + " -0.24730663 0.24255236 0.43225473 -0.26702031 -0.39715061 -0.22991069\n", + " 0.47185584 0.24214498 -0.24769405 -0.37945212 -0.23047201 0.41978539\n", + " 0.24335597 0.25674489 -0.23120743 -0.24970199 -0.38465764 -0.24742587]\n", + " [ 0.30339044 0.22134391 -0.26223625 -0.38968479 0.33274159 -0.22498513\n", + " 0.41813836 0.25265987 0.24241907 0.22582497 -0.31342923 -0.29115738\n", + " -0.18263981 0.26594862 -0.37733999 -0.21963619 -0.28138128 -0.32877688\n", + " -0.40154657 0.30937304 -0.21315979 -0.28265087 -0.20817706 -0.39292128\n", + " 0.3294288 0.27452695 -0.2574682 -0.26575848 -0.25179936 -0.28318954]\n", + " [ 0.28430125 -0.31038767 0.48597196 0.12973805 0.26646567 0.15723147\n", + " 0.16159973 -0.32119413 -0.17341505 -0.26143442 -0.16414317 -0.30828342\n", + " 0.23733006 0.60251712 0.62908505 -0.56649389 0.13190425 -0.13617064\n", + " 0.23352521 0.15445928 0.22054493 0.60944068 0.24706808 0.25442444\n", + " 0.15965767 -0.26063643 0.60511851 -0.29502172 0.24363511 0.31598863]\n", + " [ 0.4529228 -0.19791896 0.29679114 0.22637048 0.18588557 0.1737891\n", + " 0.21521636 -0.35133952 -0.15132406 -0.45543828 -0.15021506 -0.19219297\n", + " 0.212603 -0.46447686 -0.47703305 -0.42880518 0.21752408 -0.21339358\n", + " 0.16685158 0.20605005 0.1645001 -0.47468397 0.19437734 0.21661455\n", + " 0.20844634 -0.19417028 -0.84422966 -0.23352278 0.22411844 0.3344572 ]\n", + " [ 0.11146242 -0.39493168 -0.67277574 0.17735133 0.3494585 0.17972971\n", + " 0.40599276 -0.35692656 -0.1589401 -0.35652741 -0.16712554 -0.36849136\n", + " 0.21606536 0.43154963 0.5119343 0.60784471 0.09590012 -0.11022693\n", + " 0.25334226 0.07441461 0.19911404 0.49190939 0.25674542 0.2726784\n", + " 0.13339811 -0.39977864 -0.61299349 -0.39448018 0.22425161 0.3550595 ]\n", + " [-0.22553476 -0.16400018 0.1575079 -0.2449659 0.17217196 0.36584871\n", + " -0.4151224 -0.27461835 -0.41322192 0.59516902 -0.53687949 -0.32154433\n", + " 0.34781062 -0.18169761 -0.15132119 0.29670622 -0.31433345 0.23847385\n", + " 0.36530179 -0.23715269 0.40418099 -0.21880823 0.38547712 -0.44393407\n", + " -0.26260981 -0.22584222 -0.35088407 0.25887196 -0.35080979 0.29962415]\n", + " [ 0.28603197 0.05233352 -0.25041726 0.36235969 -0.06954592 -0.18473772\n", + " -0.32398336 0.00850745 0.21988989 0.32266026 0.31345786 0.23226471\n", + " 0.38540573 0.24459801 0.31311568 0.39951464 0.40672904 -0.33995168\n", + " -0.3037531 0.32775014 0.36646224 0.39444158 -0.19076159 0.39300212\n", + " 0.32494267 0.20894777 -0.35848763 -0.43250788 0.42496982 -0.15483433]\n", + " [ 0.26032116 0.21490476 -0.2187275 0.32454007 -0.383701 -0.32476076\n", + " 0.46057243 0.39261432 0.34241075 -0.46568251 0.35107534 0.34344324\n", + " -0.26486451 0.20669484 0.27349297 -0.31557323 0.31907863 -0.28654593\n", + " -0.25847679 0.27663853 -0.25348182 0.26465003 -0.24107552 -0.37446216\n", + " 0.28823435 -0.38761821 0.39293774 -0.26869749 -0.37080169 0.37781043]\n", + " [ 0.18080992 0.16806636 -0.18590519 0.27873606 -0.24228139 -0.20587094\n", + " -0.32836251 0.21025955 0.21867134 0.31244126 0.38533201 0.40978836\n", + " -0.60888186 0.18787758 0.2532362 -0.64523072 0.44087418 -0.21402722\n", + " -0.38465587 0.20243888 -0.60011161 0.41998496 -0.21481067 0.36365279\n", + " 0.21338477 0.3132603 -0.34554328 -0.23921918 0.4161459 -0.32291471]\n", + " [ 0.59686249 -0.21883383 0.25633012 0.19360453 0.19705649 0.1565695\n", + " 0.16489885 -0.43934714 -0.15586798 -0.52240484 -0.16463415 -0.22023174\n", + " 0.22325803 -0.56673684 -0.56077888 -0.28153803 0.17081901 -0.18187243\n", + " 0.17070813 0.15183296 0.20848829 -0.57724419 0.17022846 0.20022649\n", + " 0.17764016 -0.19213312 0.95056651 -0.23223579 0.23021395 0.43167911]\n", + " [-0.306572 0.22358668 -0.27095033 -0.30335723 -0.19471365 -0.32106078\n", + " -0.34113945 -0.36026685 0.33023732 -0.32228608 0.2794934 0.15294394\n", + " -0.330652 0.5427807 0.52853827 0.24113868 0.51050713 0.27053061\n", + " -0.22510015 -0.25642324 -0.34907998 0.15456284 -0.34380483 -0.27850277\n", + " -0.28940116 0.41842568 0.4258372 0.34471769 0.4405998 0.34583737]\n", + " [-0.19499827 -0.45418326 0.42284413 0.22245304 -0.3466359 -0.24153188\n", + " -0.2762196 -0.27119201 0.38269962 -0.24990396 0.2468054 0.25950907\n", + " -0.18607866 -0.26311394 0.25815523 0.24043963 -0.31530991 0.1775384\n", + " -0.22630052 -0.17645148 -0.2743691 0.36635652 -0.25065067 -0.16947293\n", + " -0.2039489 -0.37275883 0.60575769 -0.1831683 -0.34769327 0.18876766]\n", + " [-0.20117861 -0.32265223 0.25055853 -0.21697566 0.2439146 -0.34083987\n", + " 0.26171978 -0.36376315 -0.48507186 0.43520325 -0.27295958 -0.37051814\n", + " -0.3221222 -0.22580224 -0.18515532 0.38574065 -0.23645873 0.18874982\n", + " -0.4154596 -0.19441086 -0.36657829 -0.25857743 -0.39170924 -0.14268765\n", + " -0.21293315 -0.23409365 0.55288324 0.26139872 -0.18649861 0.35905453]\n", + " [-0.18787722 0.24159926 0.29715917 -0.1691407 -0.2460775 -0.23715499\n", + " 0.05646658 -0.29819085 -0.50761501 -0.13211355 -0.02878043 0.24280758\n", + " -0.34962047 0.09461028 -0.18775354 0.19026202 -0.32743804 0.20638663\n", + " -0.35985432 -0.19182861 0.51480121 0.18178444 0.47428626 -0.21715798\n", + " -0.18097537 0.22752919 0.26073176 0.15286636 -0.44220962 0.23048613]\n", + " [-0.30393766 0.27911977 -0.32718729 -0.24786572 -0.26105855 0.34264638\n", + " 0.29620545 0.32677102 -0.23566475 -0.17413566 -0.31712578 0.18246681\n", + " 0.27938709 0.30040454 -0.55074715 0.20147917 0.31734742 0.35047477\n", + " -0.58447039 -0.30768762 0.22746008 0.22492509 0.22846304 -0.57914316\n", + " -0.31291396 0.21631235 0.20127076 0.17339569 0.31236439 -0.2819663 ]\n", + " [-0.16563542 -0.44993409 0.32783508 -0.16275312 0.48069993 -0.4562979\n", + " 0.12691223 0.36229825 -0.38510154 -0.25002113 -0.11781159 0.3651783\n", + " 0.3655273 -0.33382818 -0.17143986 0.19221597 -0.39287596 0.17690961\n", + " -0.40940012 -0.17373452 0.38681247 -0.34371589 0.37729264 -0.19076642\n", + " -0.17840069 0.35707524 0.37659455 0.16533107 -0.45989463 -0.3639547 ]]\n", "float64\n", "[1800, 600, 300, 30, 31]\n" ] @@ -814,14 +749,14 @@ "name": "stdout", "output_type": "stream", "text": [ + "weights_0-815_2018-01-20_21:58:11.params\n", "[540000, 1080000, 180000, 9000, 930]\n", "14479464\n", - "ok\n", - "weights_1-815_2018-01-19_22:43:36.params\n", + "True\n", + "bias_0-815_2018-01-20_21:58:11.params\n", "[1800, 600, 300, 30, 31]\n", "22112\n", - "ok\n", - "bias_1-815_2018-01-19_22:43:36.params\n" + "True\n" ] } ], @@ -830,17 +765,19 @@ "import datetime\n", "\n", "tm = str(datetime.datetime.now()).replace(\" \", \"_\").split(\".\")[0]\n", - "\n", - "W=mlp.get_weights()\n", + "h = output_to_hard(o)\n", + "e = mlp.get_expected_output()\n", "err = count_errors(h, e)\n", + "\n", "name = \"weights_\"+str(err)+\"-815_\" + tm + \".params\"\n", - "save_params(W, name)\n", "print(name)\n", - "b=mlp.get_bias()\n", - "b = mlp._b[1:]\n", + "res = mlp.save_weights(name)\n", + "print(res)\n", + "\n", "name = \"bias_\"+str(err)+\"-815_\" + tm + \".params\"\n", - "save_params(b, name)\n", - "print(name)" + "print(name)\n", + "res = mlp.save_bias(name)\n", + "print(res)\n" ] }, { @@ -2062,25 +1999,32 @@ "cell_type": "code", "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n", + "True\n" + ] + } + ], "source": [ "# LOAD FEATURES\n", "\n", "# load params from file\n", - "res = load_params(\"weights_0-815_2018-01-16_22:36:45.params\")\n", - "W = res[\"params\"]\n", - "res = load_params(\"bias_0-815_2018-01-16_22:36:45.params\")\n", - "b = res[\"params\"]\n", - "\n", - "# set MLP\n", - "mlp.set_flatten_weights(W)\n", - "mlp.set_flatten_bias(b)\n", + "fw = \"weights_0-815_2018-01-20_21:58:11.params\"\n", + "fb = \"bias_0-815_2018-01-20_21:58:11.params\"\n", + "res = mlp.load_weights(fw)\n", + "print(res)\n", + "res = mlp.load_bias(fb)\n", + "print(res)\n", "\n" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -2105,8 +2049,8 @@ " # Compute outputs\n", " e = batch[0][1][num_letter]\n", " res = output_to_hard(mlp.compute_outputs())\n", - " print(\"recognized: '{}'\".format(data.get_letter_of_vector(res[:,num_letter].flatten().tolist())))\n", - " print(\"expected: '{}'\".format(data.get_letter_of_vector(Y.T[:,num_letter].flatten().tolist())))\n", + " print(\"recognized: '{}'\".format(letters_data.get_letter_of_vector(res[:,num_letter].flatten().tolist())))\n", + " print(\"expected: '{}'\".format(letters_data.get_letter_of_vector(Y.T[:,num_letter].flatten().tolist())))\n", "\n", "recognize_letter(0)\n", "recognize_letter(1)\n", @@ -2124,7 +2068,7 @@ "e = batch[0][1][num_letter]\n", "#X = np.array(batch[0][0][0]).reshape(1, len(batch[0][0][0]))\n", "\n", - "print(\"expected: '{}'\".format(data.get_letter_of_vector(e)))\n", + "print(\"expected: '{}'\".format(letters_data.get_letter_of_vector(e)))\n", "#mlp.set_all_input_examples(X.T)\n", "#mlp.set_all_input_examples(X.T, m=X.shape[0])\n", "mlp.set_all_training_examples(X.T,Y.T,m=X.shape[0])\n", @@ -2133,66 +2077,27 @@ "print(res)\n", "print(res[:,num_letter].flatten().tolist())\n", "# check the first input image\n", - "print(\"recognized: '{}'\".format(data.get_letter_of_vector(res[:,num_letter].flatten().tolist())))\n", - "print(\"expected: '{}'\".format(data.get_letter_of_vector(Y.T[:,num_letter].flatten().tolist())))\n", + "print(\"recognized: '{}'\".format(letters_data.get_letter_of_vector(res[:,num_letter].flatten().tolist())))\n", + "print(\"expected: '{}'\".format(letters_data.get_letter_of_vector(Y.T[:,num_letter].flatten().tolist())))\n", "print(res[:,num_letter])\n", "print(Y.T[:,num_letter])" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n", "lenX,m 300 1\n", - "[[0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [1.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]\n", - " [0.]]\n" - ] - }, - { - "ename": "ValueError", - "evalue": "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_recognized_char\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"data/ext_ln0_car0.pgm\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 17\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_letter_of_vector\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 18\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/devel/machine_learning/deep_learning/ocr_mlp/letters.py\u001b[0m in \u001b[0;36mget_letter_of_vector\u001b[0;34m(self, vector)\u001b[0m\n\u001b[1;32m 104\u001b[0m \u001b[0mret\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 105\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mletter\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvec\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mletter_to_vector\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 106\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mvec\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mvector\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 107\u001b[0m \u001b[0mret\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mletter\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 108\u001b[0m \u001b[0;32mbreak\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mValueError\u001b[0m: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()" + "image \"data/ext_ln0_car0.pgm\" recognized as 'P'\n", + "lenX,m 300 1\n", + "image \"data/ext_ln0_car1.pgm\" recognized as 'r'\n", + "lenX,m 300 1\n", + "image \"data/ext_ln0_car15.pgm\" recognized as 'e'\n" ] } ], @@ -2206,15 +2111,25 @@ " print(\"ERROR: failed to open '{}'\".format(filename))\n", " image_size = img.get_size()\n", " idata = img.get_data_bin()\n", - " print(idata)\n", " output = mlp.compute_outputs(idata, 1)\n", " h = output_to_hard(output)\n", - " return h\n", + " return h.flatten().tolist()\n", "\n", - "r = get_recognized_char(\"data/ext_ln0_car0.pgm\")\n", - "print(r)\n", - "print(data.get_letter_of_vector(r))\n", - "\n" + "name = \"data/ext_ln0_car0.pgm\"\n", + "vec = get_recognized_char(name)\n", + "letter = letters_data.get_letter_of_vector(vec)\n", + "print(\"image \\\"{}\\\" recognized as '{}'\".format(name, letter))\n", + "\n", + "\n", + "name = \"data/ext_ln0_car1.pgm\"\n", + "vec = get_recognized_char(name)\n", + "letter = letters_data.get_letter_of_vector(vec)\n", + "print(\"image \\\"{}\\\" recognized as '{}'\".format(name, letter))\n", + "\n", + "name = \"data/ext_ln0_car15.pgm\"\n", + "vec = get_recognized_char(name)\n", + "letter = letters_data.get_letter_of_vector(vec)\n", + "print(\"image \\\"{}\\\" recognized as '{}'\".format(name, letter))\n" ] }, {