diff --git a/mlp.ipynb b/mlp.ipynb index 7953a8b..2406825 100644 --- a/mlp.ipynb +++ b/mlp.ipynb @@ -9,13 +9,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'i': {'count': 75, 'index': 4, 'vector': [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]}, 'a': {'count': 36, 'index': 6, 'vector': [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]}, 'd': {'count': 45, 'index': 5, 'vector': [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]}, 'l': {'count': 64, 'index': 0, 'vector': [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}, 't': {'count': 64, 'index': 2, 'vector': [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]}, 'n': {'count': 75, 'index': 7, 'vector': [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]}, 'c': {'count': 30, 'index': 8, 'vector': [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0]}, 'e': {'count': 117, 'index': 1, 'vector': [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}, 's': {'count': 40, 'index': 9, 'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]}, 'u': {'count': 55, 'index': 3, 'vector': [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]}, 'r': {'count': 42, 'index': 10, 'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]}, 'o': {'count': 39, 'index': 11, 'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]}}\n", + "{'l': {'count': 64, 'vector': [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'index': 0}, 'u': {'count': 55, 'vector': [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], 'index': 7}, 'o': {'count': 39, 'vector': [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], 'index': 8}, 'e': {'count': 117, 'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], 'index': 9}, 't': {'count': 64, 'vector': [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'index': 1}, 'n': {'count': 75, 'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], 'index': 10}, 's': {'count': 40, 'vector': [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], 'index': 3}, 'a': {'count': 36, 'vector': [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], 'index': 4}, 'd': {'count': 45, 'vector': [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], 'index': 5}, 'c': {'count': 30, 'vector': [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], 'index': 6}, 'i': {'count': 75, 'vector': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 'index': 11}, 'r': {'count': 42, 'vector': [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'index': 2}}\n", "12\n", "1\n", "number of batches=1\n", - "size of first batch=577,577\n", - "size of last batch=577,577\n", - "300 9\n" + "size of first batch=815,815\n", + "size of last batch=815,815\n", + "300 31\n" ] } ], @@ -39,7 +39,7 @@ "print(len(v))\n", "batch = data.get_batches()\n", "print(len(batch))\n", - "batch = data.get_batches(min_count=40, mini_batch_size=577)\n", + "batch = 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", @@ -160,30 +160,132 @@ "print(all_axis_equal(b))" ] }, + { + "cell_type": "code", + "execution_count": 4, + "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": 5, + "metadata": { + "scrolled": true + }, + "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, 1, 0, 0, 0, 0, 0, 0, 0]\n" + ] + } + ], + "source": [ + "# CREATE MLP\n", + "\n", + "from mlp import MultiLayerPerceptron\n", + "import numpy as np\n", + "\n", + "X, Y = np.array(batch[0][0]), np.array(batch[0][1])\n", + "xsize = len(batch[0][0][0])\n", + "ysize = len(batch[0][1][0])\n", + "print(batch[0][1][0])\n", + "m = len(batch[0][0])\n", + "\n", + "# create MLP architecture\n", + "mlp = MultiLayerPerceptron(L=5, n=[xsize, 1800, 600, 300, 30, ysize], g=[\"tanh\"]*4 + [\"softmax\"], alpha=0.001, set_random_w=False)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[0, 0, 0, 0, 0, 0, 0, 0, 1]\n", "tanh factor=0.05773502691896258\n", "tanh factor=0.023570226039551584\n", "tanh factor=0.040824829046386304\n", "tanh factor=0.05773502691896258\n", "softmax factor=0.01\n", - "nb errors before training=561/577\n", - "Training...\n" + "(300, 815) 300 815\n", + "nb errors before training=774/815\n", + "Training...\n", + "(300, 815) 300 815\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -193,22 +295,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "learning duration=311.9925892353058(s)\n", - "{'iterations': 400, 'cost_function': 0.01926710779513728}\n", - "nb errors=0/577\n" + "learning duration=423.7619242668152(s)\n", + "{'iterations': 400, 'cost_function': 0.03647720713386014}\n", + "nb errors=0/815\n" ] } ], "source": [ - "from mlp import MultiLayerPerceptron\n", + "# TRAINING MLP\n", + "\n", "import time\n", - "import numpy as np\n", - "X, Y = np.array(batch[0][0]), np.array(batch[0][1])\n", - "xsize = len(batch[0][0][0])\n", - "ysize = len(batch[0][1][0])\n", - "print(batch[0][1][0])\n", - "m = len(batch[0][0])\n", - "mlp = MultiLayerPerceptron(L=5, n=[xsize, 1800, 600, 300, 30, ysize], g=[\"tanh\"]*4 + [\"softmax\"], alpha=0.001, set_random_w=False)# w_rand_factor=0.01)\n", "mlp.init_random_weights(use_formula=True)\n", "#mlp.use_regularization(0.1)\n", "mlp.use_adam()\n", @@ -236,217 +332,336 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, + "execution_count": 7, + "metadata": { + "scrolled": true + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[[0 1 0 ... 0 0 0]\n", + "[[0 0 0 ... 0 0 0]\n", " [0 0 0 ... 0 0 0]\n", - " [1 0 0 ... 1 0 0]\n", - " ...\n", " [0 0 0 ... 0 1 0]\n", + " ...\n", " [0 0 0 ... 0 0 1]\n", + " [0 0 0 ... 0 0 0]\n", " [0 0 0 ... 0 0 0]]\n", - "out=[[1.20974679e-03 9.94810203e-01 1.81144828e-03 ... 1.21511565e-03\n", - " 9.06859226e-04 1.31348417e-04]\n", - " [1.89512803e-03 2.11689863e-04 7.43912078e-05 ... 1.89605227e-03\n", - " 5.79609227e-03 3.18173844e-04]\n", - " [9.81964661e-01 6.98882514e-04 3.10199130e-06 ... 9.81971394e-01\n", - " 8.67877832e-04 5.21368855e-06]\n", + "out=[[4.02037550e-05 5.08508797e-04 1.06952737e-04 ... 6.90627241e-04\n", + " 4.48964139e-05 2.14162585e-04]\n", + " [1.84800747e-03 9.71943093e-06 8.52629012e-05 ... 1.29846509e-05\n", + " 4.41800847e-03 3.40338342e-04]\n", + " [1.08228023e-02 2.15103553e-04 1.59061695e-05 ... 1.48215408e-06\n", + " 9.09058825e-01 2.00836526e-03]\n", " ...\n", - " [1.15257668e-03 7.73124214e-04 4.52359346e-05 ... 1.15608559e-03\n", - " 9.75057094e-01 1.49883192e-05]\n", - " [8.41201862e-06 8.08946746e-05 1.13639649e-02 ... 8.41791178e-06\n", - " 9.76566627e-06 9.80475500e-01]\n", - " [8.87554173e-05 3.38173023e-05 2.15643124e-03 ... 8.91617413e-05\n", - " 2.32828424e-05 3.03532518e-03]]\n", + " [3.18261532e-03 5.26193930e-05 5.05545438e-08 ... 4.32711136e-05\n", + " 7.19238954e-03 8.67241619e-01]\n", + " [6.34245842e-04 4.93213135e-05 4.57927769e-07 ... 3.76821169e-04\n", + " 6.03246442e-04 2.92431724e-02]\n", + " [1.31052791e-02 8.18982449e-06 5.47497733e-07 ... 8.46367980e-05\n", + " 2.17122828e-03 2.62691643e-02]]\n", "alleq? = False\n", - "eq? = [0.39963611 0.31029355 0.25476702 0.3301145 0.25201999 0.30368108\n", - " 0.32692957 0.28733344 0.26546751]\n", - "hout=[[0. 1. 0. ... 0. 0. 0.]\n", + "eq? = [0.25924556 0.08267856 0.04282241 0.25607265 0.20887564 0.1516461\n", + " 0.21388612 0.19943628 0.22536132 0.18298195 0.13134766 0.05186903\n", + " 0.11161251 0.06383863 0.02833336 0.14028731 0.23607068 0.19713953\n", + " 0.34331537 0.15790335 0.28469948 0.02592643 0.06598417 0.02731072\n", + " 0.11712871 0.07352249 0.05255094 0.27716012 0.06096794 0.02520463\n", + " 0.02432388]\n", + "hout=[[0. 0. 0. ... 0. 0. 0.]\n", " [0. 0. 0. ... 0. 0. 0.]\n", - " [1. 0. 0. ... 1. 0. 0.]\n", - " ...\n", " [0. 0. 0. ... 0. 1. 0.]\n", + " ...\n", " [0. 0. 0. ... 0. 0. 1.]\n", + " [0. 0. 0. ... 0. 0. 0.]\n", " [0. 0. 0. ... 0. 0. 0.]]\n", "alleq? = False\n", - "expout=[[0 1 0 ... 0 0 0]\n", + "expout=[[0 0 0 ... 0 0 0]\n", " [0 0 0 ... 0 0 0]\n", - " [1 0 0 ... 1 0 0]\n", - " ...\n", " [0 0 0 ... 0 1 0]\n", + " ...\n", " [0 0 0 ... 0 0 1]\n", + " [0 0 0 ... 0 0 0]\n", " [0 0 0 ... 0 0 0]]\n", "nb errors=0\n", - "ieq? = [0. 0. 0. 0. 0.04159445 0.04159445\n", - " 0. 0.04159445 0.05877236 0. 0. 0.\n", - " 0. 0. 0. 0. 0.05877236 0.14840052\n", - " 0.05877236 0.12391378 0.15912484 0.10947391 0. 0.\n", - " 0. 0. 0. 0. 0.1996606 0.30524256\n", - " 0.17384666 0.15912484 0.21848089 0.18292235 0. 0.\n", - " 0. 0. 0. 0. 0.25400445 0.34916742\n", - " 0.24497509 0.15386591 0.25400445 0.23548517 0. 0.\n", - " 0. 0. 0. 0. 0.22201304 0.36283563\n", - " 0.29365729 0.11692983 0.26540807 0.26262075 0. 0.\n", - " 0. 0. 0. 0. 0.17845063 0.32849489\n", - " 0.30298078 0.10144201 0.26540807 0.26540807 0. 0.\n", - " 0. 0.05877236 0.04159445 0.04159445 0.17845063 0.34738218\n", - " 0.31403124 0.15912484 0.27086342 0.26540807 0. 0.\n", - " 0. 0.14270495 0.17384666 0.21848089 0.36283563 0.46536942\n", - " 0.44766404 0.35613459 0.32243155 0.27086342 0. 0.\n", - " 0. 0.25692035 0.32447451 0.42867576 0.4758936 0.49479993\n", - " 0.48113491 0.4758936 0.43766237 0.30968748 0. 0.\n", - " 0. 0.34191784 0.42971151 0.49772331 0.49966874 0.49945229\n", - " 0.48113491 0.49401623 0.48304144 0.39947913 0. 0.\n", - " 0.04159445 0.38438942 0.48395465 0.4981938 0.49918159 0.49978294\n", - " 0.46932204 0.4844013 0.49772331 0.44142084 0. 0.\n", - " 0.10144201 0.37549571 0.49681727 0.49719801 0.49804305 0.49772331\n", - " 0.43474966 0.39005198 0.49479993 0.45429764 0. 0.\n", - " 0.13050156 0.37241944 0.49945229 0.49936808 0.47963429 0.49620022\n", - " 0.43474966 0.36609093 0.47963429 0.45104631 0.04159445 0.\n", - " 0.13050156 0.36928501 0.49993917 0.49598225 0.44592287 0.49317647\n", - " 0.43474966 0.34191784 0.46995521 0.45104631 0.04159445 0.\n", - " 0.05877236 0.33436749 0.49873612 0.49873612 0.45818189 0.48888231\n", - " 0.43276226 0.36769552 0.47533153 0.45021313 0.04159445 0.\n", - " 0. 0.29125401 0.49031788 0.49966874 0.49978294 0.49945229\n", - " 0.47301311 0.45968067 0.48612205 0.44937172 0.13675044 0.\n", - " 0. 0.22547654 0.42657558 0.49132761 0.49788622 0.49993917\n", - " 0.48527482 0.46671642 0.45104631 0.4189163 0.17384666 0.\n", - " 0. 0.11692983 0.31403124 0.43376056 0.45893516 0.46671642\n", - " 0.43474966 0.37549571 0.34005922 0.33243052 0.07191852 0.\n", - " 0. 0.04159445 0.15386591 0.23870299 0.31403124 0.35441835\n", - " 0.33243052 0.22201304 0.21487672 0.20359342 0.04159445 0.\n", - " 0. 0.04159445 0.04159445 0.04159445 0.05877236 0.08297199\n", - " 0.07191852 0. 0. 0. 0. 0.\n", - " 0. 0.04159445 0.04159445 0.04159445 0. 0.\n", - " 0. 0. 0. 0. 0. 0.\n", - " 0. 0.04159445 0.04159445 0.04159445 0. 0.\n", - " 0. 0. 0. 0. 0. 0.\n", - " 0. 0. 0. 0. 0. 0.\n", - " 0. 0. 0. 0. 0. 0.\n", - " 0. 0. 0. 0. 0. 0.\n", - " 0. 0. 0. 0. 0. 0.\n", - " 0. 0. 0. 0.04159445 0.04159445 0.04159445\n", - " 0. 0. 0. 0. 0. 0. ]\n", + "ieq? = [0. 0. 0. 0. 0.03500698 0.03500698\n", + " 0. 0.03500698 0.04947692 0. 0. 0.\n", + " 0. 0. 0.03500698 0. 0.04947692 0.12528563\n", + " 0.04947692 0.10450358 0.13441044 0.09227777 0. 0.\n", + " 0. 0.04947692 0.04947692 0. 0.17243521 0.26900004\n", + " 0.17243521 0.15471804 0.18524763 0.15471804 0. 0.\n", + " 0. 0.06988481 0.06988481 0.03500698 0.23077272 0.33227755\n", + " 0.25913692 0.13873172 0.21603456 0.19994354 0. 0.\n", + " 0. 0.08548546 0.08548546 0.06055933 0.20273266 0.35677049\n", + " 0.30081626 0.12528563 0.2283989 0.22355545 0. 0.\n", + " 0. 0.07808541 0.08548546 0.06055933 0.16560327 0.32524828\n", + " 0.30243843 0.12044556 0.23077272 0.2283989 0. 0.\n", + " 0. 0.10450358 0.10450358 0.09227777 0.17243521 0.33501651\n", + " 0.2975302 0.15843907 0.23771403 0.23077272 0.03500698 0.\n", + " 0. 0.15471804 0.2054766 0.24220001 0.36269241 0.44643696\n", + " 0.43176587 0.35311852 0.31034942 0.2550436 0.03500698 0.\n", + " 0. 0.2550436 0.3493896 0.44200059 0.46657077 0.47876351\n", + " 0.47366731 0.47283065 0.43104698 0.30243843 0.04947692 0.\n", + " 0. 0.33089274 0.45241645 0.49799024 0.49644602 0.4851733\n", + " 0.47154892 0.49499737 0.48577801 0.39244627 0.04947692 0.\n", + " 0.03500698 0.3728608 0.49134325 0.49953872 0.49764548 0.48424149\n", + " 0.45580799 0.48577801 0.49840726 0.43666848 0.08548546 0.\n", + " 0.09227777 0.38449375 0.49840726 0.4994272 0.48607544 0.47725803\n", + " 0.42126472 0.41564859 0.49464139 0.4541303 0.12993396 0.\n", + " 0.11538962 0.39814769 0.49991531 0.49877565 0.46010798 0.47325075\n", + " 0.42588178 0.39437117 0.47687302 0.45635925 0.18214144 0.\n", + " 0.11008809 0.39721261 0.49868811 0.49740037 0.42282358 0.46750882\n", + " 0.42047775 0.37503886 0.46465012 0.45469353 0.16905821 0.\n", + " 0.04947692 0.36841704 0.49963817 0.49998156 0.43032338 0.46465012\n", + " 0.42204665 0.38347043 0.47240698 0.45299178 0.10450358 0.\n", + " 0. 0.31189306 0.49820484 0.49948447 0.49408409 0.48989795\n", + " 0.46513588 0.46216479 0.48964589 0.44705366 0.12528563 0.\n", + " 0. 0.23997064 0.45299178 0.49714303 0.49550807 0.49445874\n", + " 0.47763957 0.47197974 0.45958414 0.40541704 0.15471804 0.\n", + " 0. 0.16905821 0.34685969 0.4445614 0.45905643 0.45580799\n", + " 0.43318966 0.38551046 0.35556157 0.31645026 0.09227777 0.\n", + " 0. 0.14291187 0.21857717 0.27653948 0.3149433 0.3481291\n", + " 0.33771543 0.2354294 0.23997064 0.21857717 0.04947692 0.\n", + " 0. 0.14291187 0.16905821 0.15471804 0.07808541 0.12993396\n", + " 0.12993396 0.03500698 0.12528563 0.12993396 0.03500698 0.\n", + " 0. 0.14291187 0.16905821 0.16206541 0.06055933 0.08548546\n", + " 0.06055933 0.04947692 0.11538962 0.12044556 0.07808541 0.\n", + " 0. 0.13873172 0.1508953 0.13873172 0.06055933 0.03500698\n", + " 0. 0. 0.09227777 0.09858802 0.04947692 0.\n", + " 0. 0.11008809 0.09227777 0.09227777 0. 0.\n", + " 0. 0. 0.06055933 0.07808541 0.03500698 0.\n", + " 0. 0.03500698 0.03500698 0.03500698 0. 0.\n", + " 0. 0. 0.04947692 0.03500698 0. 0.\n", + " 0. 0. 0. 0.03500698 0.03500698 0.03500698\n", + " 0. 0. 0. 0.03500698 0. 0. ]\n", "i? = [[0 0 0 ... 0 0 0]\n", " [0 0 0 ... 0 0 0]\n", " [0 0 0 ... 0 0 0]\n", " ...\n", - " [0 0 0 ... 0 0 0]\n", + " [0 0 0 ... 0 1 0]\n", " [0 0 0 ... 0 0 0]\n", " [0 0 0 ... 0 0 0]]\n", - "diff exp= [117 64 42 75 40 64 75 55 45]\n", - "[[-0.01319087 0.03983991 -0.05525597 ... -0.03207711 0.06692414\n", - " -0.06375975]\n", - " [ 0.03026753 0.01874685 0.00903375 ... 0.01605231 -0.08379402\n", - " 0.04562931]\n", - " [ 0.04805276 0.05503196 -0.00389218 ... 0.0183783 0.01674333\n", - " 0.02185625]\n", + "diff exp= [ 64 6 2 64 42 20 40 36 45 30 15 3 11 4 1 17 55 39\n", + " 117 22 75 1 4 1 12 5 3 75 4 1 1]\n", + "[[ 0.02305652 0.02293969 -0.03351205 ... -0.01382011 -0.06856867\n", + " -0.08543151]\n", + " [ 0.04801012 0.03075537 0.10830808 ... -0.03133071 0.09976655\n", + " -0.03126336]\n", + " [-0.03682391 0.04921497 -0.02348153 ... 0.02364989 -0.05083313\n", + " -0.02020903]\n", " ...\n", - " [ 0.02624143 0.03224954 -0.00911125 ... -0.08354134 0.03582595\n", - " 0.05569943]\n", - " [-0.02090887 -0.09105613 -0.09100615 ... -0.01404412 0.03874845\n", - " -0.06491289]\n", - " [-0.01343145 -0.03273509 0.08220062 ... -0.03275636 -0.00326426\n", - " -0.03555161]]\n", + " [-0.08702357 0.01646373 -0.01348482 ... -0.04948279 0.04419087\n", + " 0.02029533]\n", + " [ 0.00269033 0.08650693 -0.03824462 ... 0.05285797 -0.12694204\n", + " 0.04784096]\n", + " [ 0.02857453 0.02707221 0.05326686 ... 0.04546911 0.01493789\n", + " -0.00314553]]\n", "float64\n", - "[[-0.01420414 -0.07207896 0.05688704 ... 0.01537264 0.0084524\n", - " -0.03883495]\n", - " [-0.02508493 0.05414954 -0.03563722 ... -0.0120563 0.02642832\n", - " 0.00609925]\n", - " [ 0.02473474 -0.05099813 0.07484969 ... 0.04273742 0.02562809\n", - " -0.07692152]\n", + "[[-0.04763941 -0.00165213 -0.01472557 ... -0.03758796 0.05618212\n", + " 0.03976971]\n", + " [ 0.01264144 0.04645618 -0.06771761 ... -0.02748338 -0.04455201\n", + " 0.01696473]\n", + " [ 0.04950068 -0.01349692 -0.00343407 ... 0.00799625 -0.0109285\n", + " -0.08815256]\n", " ...\n", - " [-0.03358954 -0.01829128 -0.00578833 ... 0.01829952 0.04571721\n", - " 0.0090804 ]\n", - " [-0.02371952 -0.0468924 -0.00054122 ... -0.07090847 -0.10107239\n", - " 0.05067513]\n", - " [ 0.06595318 -0.01398758 0.05028443 ... 0.05333875 0.04927292\n", - " -0.02119925]]\n", + " [ 0.07878267 0.09401743 0.00861482 ... -0.02046249 -0.0309148\n", + " 0.1041147 ]\n", + " [-0.05079743 -0.06212101 -0.01354801 ... -0.03225145 0.00792118\n", + " 0.00541506]\n", + " [ 0.05560252 0.02426592 0.05679859 ... 0.0695036 0.07687002\n", + " 0.01283602]]\n", "float64\n", - "[[-8.55127946e-05 -7.84591675e-02 -8.40214908e-02 ... 3.15381766e-02\n", - " -1.12010893e-01 -3.72282552e-02]\n", - " [-4.90402044e-02 1.05809792e-01 4.49151540e-02 ... 1.60301369e-02\n", - " 1.08550765e-02 4.97082262e-02]\n", - " [-3.14740462e-03 -5.69982483e-02 6.10231506e-02 ... -9.82526432e-03\n", - " -1.00127875e-02 -2.95810917e-02]\n", + "[[-0.00030529 -0.0361909 0.04603198 ... 0.03268144 0.0026181\n", + " -0.0118466 ]\n", + " [-0.03146446 -0.12144629 0.08608142 ... 0.02176837 0.02422811\n", + " -0.04096614]\n", + " [-0.08811906 0.06622404 0.06665839 ... -0.0455521 0.03309829\n", + " 0.0377115 ]\n", " ...\n", - " [ 7.44480556e-02 -8.96343933e-02 8.58785577e-02 ... 8.83387786e-02\n", - " 1.47955664e-02 3.44082262e-02]\n", - " [-2.24684582e-02 -4.73644174e-02 1.19620978e-02 ... 1.70987684e-02\n", - " 3.50440139e-02 -4.66940708e-02]\n", - " [ 3.09912631e-03 -6.89806131e-03 -7.89365570e-03 ... -3.30881538e-02\n", - " 2.85286642e-02 -1.70303674e-02]]\n", + " [-0.02061757 -0.01438613 0.05677501 ... 0.05061476 0.07287069\n", + " -0.02118244]\n", + " [ 0.00687921 -0.01981501 0.03788708 ... -0.00217768 0.02177478\n", + " 0.02345711]\n", + " [-0.09522429 -0.01083687 0.06087016 ... -0.05490665 -0.03358236\n", + " 0.00356812]]\n", "float64\n", - "[[ 0.24292825 0.03875353 -0.04838829 ... 0.0454464 0.02616454\n", - " 0.07085865]\n", - " [-0.14605033 -0.10255992 -0.0691534 ... -0.14221534 0.05441646\n", - " 0.14363908]\n", - " [ 0.01758933 -0.09676504 -0.07188088 ... 0.01573355 -0.0923651\n", - " 0.04113277]\n", + "[[ 0.04328632 0.07644075 0.09869383 ... 0.19851855 0.01478\n", + " 0.14905889]\n", + " [-0.05642917 -0.05404862 -0.06469322 ... -0.00635012 -0.19701379\n", + " -0.06841576]\n", + " [ 0.00636632 0.01305872 -0.12682967 ... 0.06187919 -0.07034849\n", + " 0.03826143]\n", " ...\n", - " [ 0.0312834 -0.10207391 0.04388697 ... -0.07270399 0.09358967\n", - " 0.09282296]\n", - " [-0.06778366 -0.08155462 0.07426104 ... 0.00879056 0.00224737\n", - " -0.04201017]\n", - " [-0.01397604 0.0525786 0.10673341 ... -0.09476817 0.04172221\n", - " -0.01653008]]\n", + " [-0.09759004 -0.18498106 -0.15652528 ... -0.0929882 -0.12015744\n", + " -0.01661448]\n", + " [ 0.05301149 -0.02907717 -0.02538045 ... -0.00192035 0.02613385\n", + " 0.00176775]\n", + " [ 0.10932519 -0.00240596 0.00231574 ... 0.10465175 0.0068048\n", + " 0.0504715 ]]\n", "float64\n", - "[[ 0.23821056 -0.22684595 -0.23900313 -0.22307994 -0.20820359 0.21907111\n", - " 0.2448129 0.24406478 -0.22086667 0.23578465 0.23068728 0.21603837\n", - " -0.22015416 0.2273947 -0.23359408 0.24316205 -0.22599274 0.2448828\n", - " -0.24577126 -0.24073814 0.23409303 -0.23673416 -0.23429848 0.23798849\n", - " 0.23932448 0.21756492 0.24914489 -0.22336549 -0.23481061 0.22419405]\n", - " [-0.27508135 0.32318242 -0.19603446 -0.17095617 0.28092267 -0.22193898\n", - " 0.2064782 0.21149604 0.24927926 -0.18680937 0.18140982 -0.39328247\n", - " 0.19041642 0.29306423 0.18480645 -0.16989218 0.17698483 0.22529679\n", - " 0.28864704 0.29179007 0.18312231 0.11926081 0.19092834 -0.36227006\n", - " 0.20152464 -0.36845687 0.21825649 -0.18537252 -0.17231761 0.30279298]\n", - " [ 0.46419226 -0.29144274 -0.21979831 -0.05094548 -0.31265563 0.47694825\n", - " 0.21698027 0.20500537 -0.3472583 -0.23602106 0.22101996 -0.48007579\n", - " 0.26360475 -0.3382583 0.28820103 -0.23432914 0.22947567 -0.32274213\n", - " 0.29304505 -0.33211153 0.04733828 0.29491651 0.23421252 0.31340982\n", - " 0.20929533 -0.42883819 0.19781346 -0.04543647 -0.04600597 -0.33294682]\n", - " [-0.31456648 0.20993413 0.19555102 0.20091824 -0.34795958 0.26313773\n", - " -0.19932059 -0.17993067 -0.52906611 0.1240308 -0.20147313 0.24848163\n", - " -0.10781514 0.40899696 -0.25332736 0.12730197 -0.12683918 0.1279312\n", - " -0.33570855 0.19567551 -0.20399474 -0.27108015 -0.11943421 -0.18252667\n", - " -0.1943781 0.27768788 -0.1779427 0.20619189 0.19658291 0.24801077]\n", - " [ 0.28003775 -0.24656041 0.28472025 -0.25652722 -0.2377857 -0.23329018\n", - " -0.27871007 -0.27570175 0.26014691 -0.22671371 -0.29918768 0.24169636\n", - " -0.28768855 -0.26286965 -0.31427227 -0.23271245 0.22844887 -0.24899349\n", - " -0.27570961 -0.25358862 0.25124158 0.2363703 0.21089628 0.23576767\n", - " -0.26226596 0.26027226 -0.28453235 -0.22935687 -0.24720796 -0.22933093]\n", - " [-0.48565335 -0.2465881 -0.25622676 -0.04974842 -0.58824049 -0.4359546\n", - " 0.26816899 0.27414157 0.43796671 -0.15452496 0.24515537 0.48205664\n", - " 0.25450998 -0.54418601 0.26754159 -0.16829142 0.16721371 -0.23252322\n", - " 0.50158931 -0.56668704 0.04247801 0.15834625 0.1594734 0.24067279\n", - " 0.2675666 0.48407097 0.25866951 -0.02778181 -0.04470741 -0.27621571]\n", - " [-0.27267255 -0.45886523 -0.17510706 -0.10178899 0.53651062 -0.22984801\n", - " 0.17242844 0.18302742 0.24916311 -0.15973133 0.16812989 0.42202693\n", - " 0.20222694 0.57612452 0.20409242 -0.18444391 0.18391435 -0.41807628\n", - " -0.14789935 0.52621514 0.1074553 0.20447943 0.15627734 0.44518614\n", - " 0.18899705 0.43286293 0.18514295 -0.09809536 -0.08563168 -0.41710236]\n", - " [-0.37013803 0.1514176 0.14143475 0.14731253 0.59306704 0.37691993\n", - " -0.14372632 -0.14582787 0.35884516 0.1232747 -0.16096911 -0.6223161\n", - " -0.10444428 -0.58816294 -0.36665509 0.13995272 -0.16113298 0.1199828\n", - " 0.26052948 0.15022914 -0.16074082 -0.36866975 -0.16849907 -0.15080841\n", - " -0.14371455 0.34354818 -0.14782671 0.15418654 0.15257981 0.35531016]\n", - " [ 0.35711621 0.17086082 0.16602409 0.18400076 0.33281758 -0.34217298\n", - " -0.1747656 -0.17333453 -0.36443979 0.19588652 -0.19034869 -0.33569957\n", - " -0.1910823 -0.36717338 0.37378397 0.17310205 -0.16627789 0.13600294\n", - " -0.30896351 0.19230081 -0.18328413 0.38301521 -0.16365957 -0.16838064\n", - " -0.17065042 -0.35753259 -0.15901984 0.18156503 0.16853124 -0.35185653]]\n", + "[[-0.26661675 -0.33475613 0.25169095 -0.23979593 -0.25573377 -0.28279077\n", + " 0.24550993 -0.27517093 -0.54225535 0.27183204 -0.24790071 0.28287373\n", + " 0.33993862 0.23877079 0.27832352 0.25268152 0.64180487 0.25351048\n", + " 0.28172176 0.56860375 -0.26909117 -0.24965687 -0.23389013 0.27700967\n", + " -0.27672752 0.28511057 -0.26719832 0.25944955 0.31718183 -0.30236453]\n", + " [ 0.23536534 0.30346623 0.20889132 -0.13749706 -0.17006025 0.21797273\n", + " 0.37147517 0.29188791 -0.45867567 -0.4636067 0.64421705 -0.28863301\n", + " 0.37725925 0.36766676 -0.29502239 0.08953751 0.12172058 0.32130248\n", + " -0.25148257 0.24643991 0.35788749 -0.24920433 0.2669185 -0.28577811\n", + " 0.02278615 -0.24940888 -0.38750059 0.26110786 0.45482116 0.26669534]\n", + " [ 0.26761025 0.32433825 0.26573278 0.20356029 -0.18798144 0.1702255\n", + " 0.29732748 0.20153523 0.27718297 0.40892731 -0.32554252 -0.42447637\n", + " -0.26373563 0.39053396 -0.20396828 -0.15953264 -0.36653093 0.31518382\n", + " 0.22428294 0.02948406 0.23800481 -0.12238356 0.28367631 -0.25068397\n", + " 0.39813079 -0.44806355 -0.22529034 0.3070436 -0.22226594 0.18002938]\n", + " [-0.59636033 0.53165526 0.16274869 -0.15581274 -0.14946619 -0.25953322\n", + " -0.51531926 -0.27735399 0.2989642 0.25331334 -0.20490546 0.25818591\n", + " -0.50786022 0.20110598 0.27069973 0.15370255 -0.30141322 0.21016553\n", + " 0.59767823 -0.29116806 -0.30799375 -0.23530574 -0.23245621 0.2585436\n", + " -0.26052371 0.25351432 -0.22301427 0.15908994 -0.53939878 -0.63200095]\n", + " [ 0.44600831 0.36097192 0.23196562 0.03866603 -0.17302864 -0.46606347\n", + " -0.37333023 -0.45813085 0.33021662 0.20048982 -0.16647372 0.23996453\n", + " -0.27675388 0.17226022 0.46009675 -0.05707947 -0.33876081 0.17587329\n", + " -0.66375267 -0.30662045 -0.51753567 -0.35359333 -0.38554654 0.3834056\n", + " 0.10024047 0.2086028 -0.17674566 0.20433233 -0.38065609 0.62466834]\n", + " [ 0.24842297 -0.43997291 -0.31568677 0.30434566 0.3044142 0.2808598\n", + " -0.30616696 0.26789 0.36908001 -0.2538584 0.28294327 -0.26312765\n", + " 0.42155835 -0.19959789 -0.27608983 -0.26587238 -0.35510557 -0.27532414\n", + " 0.3764235 0.33298472 -0.37754012 -0.33564813 0.34356159 -0.31965206\n", + " 0.26813394 -0.29656116 0.24633555 -0.29229119 -0.30758983 0.25297636]\n", + " [-0.39391137 0.3071116 0.1943953 -0.18615705 -0.15914057 0.27853483\n", + " 0.35533001 -0.30813345 0.28735887 -0.33366438 -0.34391004 -0.36193433\n", + " 0.33880336 0.31697195 0.28851173 0.19693592 0.37560428 0.32076379\n", + " -0.32907209 -0.33761618 0.34084053 0.24361242 -0.38110249 -0.23872732\n", + " -0.18380165 -0.34521278 -0.33202874 0.20701825 -0.35492459 -0.39306011]\n", + " [-0.55508621 0.35094235 0.27390069 -0.23545737 -0.10523511 -0.31626668\n", + " 0.5451543 -0.2808552 0.32418033 -0.34015512 0.35537982 -0.28371645\n", + " 0.12244093 0.52874849 0.25866114 0.2985482 0.21841646 -0.35985561\n", + " -0.31639398 0.4892776 -0.27965369 -0.20857042 0.35427257 0.30168692\n", + " -0.17240272 -0.26981791 0.32291616 0.27376268 0.52354234 -0.27859132]\n", + " [-0.32528617 -0.2306217 -0.228802 0.22769427 0.24016266 0.31113102\n", + " 0.25772921 -0.30892682 -0.24678659 -0.26818158 0.23218286 0.37412029\n", + " -0.35055473 -0.21908901 0.34230927 -0.22098833 -0.31415721 -0.23080234\n", + " -0.3930135 -0.26045666 0.31564521 0.25293518 -0.25705148 -0.25842516\n", + " -0.4277395 0.34727063 0.22553411 -0.21224969 -0.35978748 -0.34985677]\n", + " [ 0.219036 0.23576068 0.24037668 -0.28088248 -0.25268238 0.44017473\n", + " -0.2631877 0.48047743 0.18553771 -0.18777 0.43586063 -0.1203525\n", + " 0.51477578 -0.29907554 -0.46960862 0.29677797 0.30413073 -0.21856424\n", + " -0.23511509 0.52010828 -0.56315361 -0.06385018 0.19419758 0.58932329\n", + " 0.42038804 -0.12185963 0.22420158 0.25278791 -0.27210783 0.47273354]\n", + " [-0.61252017 0.26192269 0.2583952 -0.33193471 -0.19148981 0.33502401\n", + " -0.33496845 0.3648333 0.26189805 0.27301391 -0.16099261 0.35965489\n", + " -0.23895926 0.18098753 -0.37474276 0.33438294 -0.24510553 0.16323861\n", + " 0.42442909 -0.30139904 0.34577826 0.43412559 -0.48278841 -0.38688411\n", + " 0.43005768 0.29620178 -0.15258105 0.30871695 -0.26212799 0.33201557]\n", + " [ 0.39066352 0.31514518 0.2693526 0.28731202 0.19138925 0.30299599\n", + " -0.42321519 0.30640452 0.2500535 0.3870631 -0.25553159 -0.19394255\n", + " -0.21028908 0.46391695 -0.29639266 -0.15464765 -0.33739153 0.28181818\n", + " -0.25206537 -0.37269926 0.32474228 -0.21823463 0.50788424 0.10809733\n", + " -0.05938183 0.59170611 -0.21706299 0.38687258 -0.21003181 0.19243934]\n", + " [ 0.45628005 -0.25535308 -0.13195611 0.11154747 0.14452578 0.23717866\n", + " 0.31765238 0.37861915 -0.24239067 -0.33346229 0.37052949 -0.49909505\n", + " -0.32023941 -0.18762546 -0.38661406 -0.13262811 -0.26710965 -0.35865279\n", + " 0.41986982 -0.42371822 0.34086574 0.24403678 -0.44045896 -0.14584137\n", + " 0.3088187 0.44069881 0.30228363 -0.13617625 -0.3554111 0.37120509]\n", + " [ 0.31365779 -0.52845603 -0.19895585 0.23079585 0.14531661 0.16221983\n", + " -0.53573894 0.16973809 -0.21214912 0.40344078 -0.35686645 0.37339895\n", + " -0.21543863 -0.58178064 -0.16040415 -0.19966528 -0.2876322 0.35519567\n", + " 0.26585703 0.2263244 0.21085954 0.2127049 0.48725088 -0.04464219\n", + " 0.20774711 0.38451325 0.57141418 -0.14961197 0.50832232 0.15716981]\n", + " [ 0.23066426 -0.30145481 0.27774773 -0.1949846 0.303881 0.19482688\n", + " 0.13107381 0.20734645 -0.34004606 0.37645782 -0.31099161 0.20661565\n", + " 0.22786179 0.26129499 -0.20240107 0.11179206 0.18749353 0.24547457\n", + " 0.28610874 0.23401658 -0.03803122 -0.11188187 0.29037043 -0.11761771\n", + " 0.17359209 -0.27012635 -0.15870356 0.35849309 0.31912791 0.17906936]\n", + " [-0.46923708 -0.31308723 -0.31481452 -0.29848095 0.30470674 0.24376235\n", + " 0.3390804 0.25172163 -0.23628945 0.32334863 -0.24999901 0.29477302\n", + " -0.27622886 0.27583306 -0.2495961 0.35376225 0.39676881 0.27949258\n", + " -0.41814104 0.23662502 0.26618927 0.27910841 0.3276634 -0.25938232\n", + " -0.39585024 0.31894588 -0.2247501 -0.33102591 0.33907859 0.25943143]\n", + " [-0.33598474 -0.23832022 -0.23829328 0.24450015 0.33160297 -0.22019185\n", + " 0.22949347 -0.29152638 -0.34563826 -0.35426861 0.21063305 0.16696448\n", + " 0.26226235 -0.20188032 0.2635945 -0.20388118 0.696193 -0.22170149\n", + " 0.36542165 -0.23988149 -0.33838634 0.36407277 -0.23036535 0.23724529\n", + " 0.34125791 -0.27859117 0.21566506 -0.22544563 0.29990249 -0.25922566]\n", + " [-0.3755945 -0.18468908 -0.2182871 0.22091099 0.29692213 -0.25361233\n", + " 0.25379274 -0.28119924 -0.31125513 -0.32724514 0.20662859 -0.7061422\n", + " 0.24217927 -0.1993671 0.28630322 -0.20502555 -0.25511037 -0.19172981\n", + " 0.36662153 -0.17119277 -0.38584302 0.30094607 -0.24214335 -0.76760327\n", + " 0.33860166 -0.32832625 0.1809174 -0.20715865 0.33157709 -0.3178759 ]\n", + " [ 0.33411392 0.28628486 0.26020686 -0.31378264 -0.22048408 -0.36116222\n", + " -0.35686759 -0.34872565 0.22727281 -0.30250504 0.27538527 -0.21921758\n", + " 0.26463514 -0.34026353 0.35782859 0.31393073 0.27410219 -0.281235\n", + " -0.26831821 -0.44885147 -0.27768128 -0.22252483 0.32437478 0.26979624\n", + " -0.27674854 -0.23638212 0.23905072 0.29116432 -0.36318752 -0.38509016]\n", + " [ 0.19732609 0.17415543 0.27282625 -0.1905837 -0.31770151 0.26227231\n", + " -0.23337136 0.34340711 0.35468988 -0.27359753 -0.28132788 -0.10771679\n", + " -0.4101709 -0.44900978 -0.30864236 0.20687853 0.31027483 -0.38647763\n", + " -0.15292827 0.32932223 0.50021521 -0.43949874 0.16679617 -0.38165196\n", + " -0.65229224 -0.16533649 0.40206865 0.27349145 -0.22878409 0.30960993]\n", + " [ 0.35906321 -0.30334327 -0.33198606 0.30382513 -0.31545458 -0.24142824\n", + " 0.32102492 -0.25067842 0.3694385 0.39097077 0.23748562 -0.27799469\n", + " 0.23874338 -0.2477173 0.23446657 -0.30561318 0.26288317 -0.25145426\n", + " -0.34653194 -0.21957817 -0.24966533 -0.38513688 -0.28764939 0.24885022\n", + " -0.38047819 -0.25218104 0.23709594 -0.32068517 0.32325251 -0.23572268]\n", + " [ 0.23781636 0.29217735 0.2221326 -0.12295707 -0.1374592 0.14050786\n", + " -0.2957996 0.17072151 -0.41064113 0.35795103 -0.31550668 -0.26497124\n", + " -0.20422 0.36691842 -0.18489811 0.0821428 0.16757931 0.341784\n", + " -0.24393865 0.28076971 0.21502099 0.290013 0.25077286 -0.13920853\n", + " -0.0553221 -0.32148458 -0.22498506 0.30959181 -0.16903841 0.15236558]\n", + " [ 0.22590593 0.36566691 -0.43803325 -0.38172901 0.39693787 0.09488915\n", + " -0.26766898 0.15080448 -0.4282305 -0.3927285 -0.45558347 -0.28973147\n", + " -0.20051489 0.56080358 -0.16660533 0.27897826 0.21102247 -0.41549784\n", + " -0.2480252 0.19254936 0.20076074 0.40212361 0.18458823 -0.12066758\n", + " -0.18823525 -0.28516433 0.37153645 -0.53475068 -0.17687488 0.13645203]\n", + " [ 0.22587481 0.41119348 0.29966247 -0.28069321 0.27909173 0.13085309\n", + " -0.25962779 0.14423216 -0.26916317 0.43996305 -0.34385715 -0.2440039\n", + " -0.15957965 -0.48434893 -0.15524718 -0.28840517 -0.23116174 0.30499023\n", + " -0.34017802 0.22299843 0.15826137 -0.0471504 0.26062928 -0.17003021\n", + " 0.24123208 0.31623545 -0.21179547 -0.36960734 -0.19236906 0.12116717]\n", + " [ 0.29267405 -0.46307658 -0.26140196 0.30840625 0.21871059 0.17841694\n", + " -0.37561449 0.19564138 -0.25546204 -0.57664571 -0.32197102 0.37035968\n", + " -0.23869812 0.44512566 -0.18294697 -0.31500587 0.44560461 0.34846942\n", + " 0.33595403 0.24003343 0.23321453 0.26143089 0.35960999 -0.18978366\n", + " 0.27230482 -0.40506961 -0.37718233 -0.27904052 -0.48146427 0.18875964]\n", + " [ 0.18757207 0.51536702 -0.24231049 0.36058019 0.21717877 0.12590132\n", + " -0.37192051 0.18017705 -0.47796893 -0.2137554 0.57451222 -0.3322461\n", + " -0.35066032 -0.35347024 -0.19533099 -0.29249364 -0.38559993 -0.23104395\n", + " -0.50279073 0.32304773 0.30880326 0.39275572 0.31758752 -0.08895652\n", + " 0.29257102 -0.45120595 0.16078146 -0.21415294 -0.11087665 0.17040108]\n", + " [ 0.24501452 0.60935679 -0.38965032 0.36037246 0.20441744 0.12660225\n", + " -0.37207631 0.1260695 -0.27583202 0.47608574 -0.24940724 0.35076945\n", + " -0.13359544 -0.35144142 -0.14647741 -0.23499387 -0.27199649 0.26877448\n", + " 0.32313719 0.24280165 0.1633481 0.28002247 0.35680835 -0.19634178\n", + " 0.20125108 0.44155202 -0.36673123 -0.32185995 -0.55551401 0.10013354]\n", + " [-0.29043057 -0.49822868 0.21597193 -0.21522345 -0.19393021 -0.21601265\n", + " 0.52767176 -0.19734699 0.65292233 0.24530525 -0.24519727 0.26005615\n", + " 0.5642461 0.23200642 0.1872245 0.23230685 -0.54119063 0.23765979\n", + " 0.31207876 -0.61435555 -0.24794739 -0.23732405 -0.2172678 0.22868972\n", + " -0.16346381 0.25891986 -0.24584954 0.2262622 0.48595131 -0.30613616]\n", + " [ 0.46815077 -0.31736307 -0.18354228 0.34292725 0.16635105 0.2362213\n", + " 0.23563269 0.14251043 -0.18996582 0.34505396 -0.23527867 0.32307019\n", + " -0.30479124 0.63289602 -0.14569812 -0.30650306 -0.39796638 0.21066002\n", + " 0.26418874 0.21933391 0.27093329 0.18354317 -0.21619154 -0.30377309\n", + " 0.24729231 0.36062704 -0.32858673 -0.23356886 0.42085673 0.13642199]\n", + " [-0.15977917 -0.23006301 -0.2032081 0.3063376 0.2101001 -0.17370098\n", + " 0.1140742 0.18633836 -0.212433 0.38476478 -0.31981912 0.19812091\n", + " 0.22124376 0.42616477 -0.17268427 -0.26041786 -0.28628337 0.28125111\n", + " 0.17662016 0.21488182 -0.13453314 0.2087169 -0.09454391 0.21008353\n", + " 0.23483259 0.2479335 -0.18808295 -0.25604238 0.27778913 0.15142774]\n", + " [-0.11044268 -0.21664398 -0.18789835 0.25546007 0.17046535 0.16994671\n", + " 0.17269294 0.16433049 -0.20659818 0.42955727 -0.40025325 -0.4746978\n", + " -0.19573033 -0.59071572 -0.16475015 -0.19410971 -0.23514992 0.36392051\n", + " 0.18695141 0.21864881 0.20568798 0.1988923 -0.15267848 -0.14833362\n", + " 0.19650132 0.25322446 -0.25838275 -0.16914734 0.36335526 0.14649388]]\n", "float64\n", - "[1800, 600, 300, 30, 9]\n" + "[1800, 600, 300, 30, 31]\n" ] } ], "source": [ + "# SHOW STATS\n", + "\n", "print(mlp.get_expected_output())\n", "o = mlp.get_output()#[:,:5]\n", "print(\"out={}\".format(o))\n", @@ -474,77 +689,112 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[540000, 1080000, 180000, 9000, 270]\n", - "14474184\n", + "[540000, 1080000, 180000, 9000, 930]\n", + "14479464\n", "ok\n", - "[1800, 600, 300, 30, 9]\n", - "21936\n", - "ok\n" + "weights_0-815_2018-01-16_22:36:45.params\n", + "[1800, 600, 300, 30, 31]\n", + "22112\n", + "ok\n", + "bias_0-815_2018-01-16_22:36:45.params\n" ] - }, - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ - "import struct\n", + "# SAVE FEATURES\n", + "import datetime\n", "\n", - "def save_params(params, name):\n", - " ret = False\n", - " nb = len(params)\n", - " n_params = [p.size for p in params]\n", - " fmt=\"