From 0afa3af2d6ed133d75a3e7e9aeb9295c7737df02 Mon Sep 17 00:00:00 2001 From: wassname Date: Sun, 12 May 2024 14:37:40 +0800 Subject: [PATCH] fix by norm --- README.md | 11 +- prob_dist.ipynb | 297 ++++++++++++++++++++++++++++-------------------- 2 files changed, 177 insertions(+), 131 deletions(-) diff --git a/README.md b/README.md index 0cc1689..2216418 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,11 @@ pip install git+https://github.com/wassname/prob_jsonformer.git ~~~ - -| method | KL_div_loss | time | -| :---------------------------- | ----------: | -------: | -| method0: sampling | -0.147245 | 21.5937 | -| method1: hindsight | -0.145874 | 0.631365 | -| method3: gen tree (this work) | -0.147246 | 0.066084 | +| method | KL_div_loss | time | +| :----------------------- | ----------: | -------: | +| method0: sampling | -3.09214 | 48.5044 | +| method1: hindsight | -3.09214 | 0.683987 | +| method3: generation tree | -3.09216 | 0.075112 | KL_div_loss is the KL divergence between the true distribution and the generated distribution. Lower is better as it indicated a faithful sampling of the distribution. Time is in seconds. diff --git a/prob_dist.ipynb b/prob_dist.ipynb index 2ba7482..cb1fe6a 100644 --- a/prob_dist.ipynb +++ b/prob_dist.ipynb @@ -107,7 +107,7 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 171, "metadata": {}, "outputs": [], "source": [ @@ -168,6 +168,7 @@ "\n", " df = pd.DataFrame([data]).T\n", " df.index = df.index.astype(int)\n", + " df.iloc[:, 0] = df.iloc[:, 0] / df.iloc[:, 0].sum()\n", " df = df.sort_index()\n", " return df\n", "\n", @@ -192,6 +193,7 @@ " df = pd.DataFrame(r).set_index('choice')\n", " df['prob'] = df['prob'].astype(float)\n", " df.index = df.index.astype(int)\n", + " df.iloc[:, 0] = df.iloc[:, 0] / df.iloc[:, 0].sum()\n", " df = df.sort_index()\n", " return df\n", "\n", @@ -209,7 +211,26 @@ }, { "cell_type": "code", - "execution_count": 111, + "execution_count": 161, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 1.0\n", + "dtype: float64" + ] + }, + "execution_count": 161, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 139, "metadata": {}, "outputs": [ { @@ -239,77 +260,77 @@ " \n", " \n", " 4\n", - " 0.0950\n", + " 0.073333\n", " \n", " \n", " 5\n", - " 0.0600\n", + " 0.100000\n", " \n", " \n", " 7\n", - " 0.1000\n", + " 0.100000\n", " \n", " \n", " 8\n", - " 0.0950\n", + " 0.080000\n", " \n", " \n", " 10\n", - " 0.0475\n", + " 0.046667\n", " \n", " \n", " 11\n", - " 0.0400\n", + " 0.046667\n", " \n", " \n", " 12\n", - " 0.1325\n", + " 0.125556\n", " \n", " \n", " 13\n", - " 0.0425\n", + " 0.034444\n", " \n", " \n", " 14\n", - " 0.3750\n", + " 0.367778\n", " \n", " \n", " 15\n", - " 0.0125\n", + " 0.025556\n", " \n", " \n", "\n", "" ], "text/plain": [ - " 0\n", - "4 0.0950\n", - "5 0.0600\n", - "7 0.1000\n", - "8 0.0950\n", - "10 0.0475\n", - "11 0.0400\n", - "12 0.1325\n", - "13 0.0425\n", - "14 0.3750\n", - "15 0.0125" + " 0\n", + "4 0.073333\n", + "5 0.100000\n", + "7 0.100000\n", + "8 0.080000\n", + "10 0.046667\n", + "11 0.046667\n", + "12 0.125556\n", + "13 0.034444\n", + "14 0.367778\n", + "15 0.025556" ] }, - "execution_count": 111, + "execution_count": 139, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t0 = pd.Timestamp.now()\n", - "r0 = method0(choices, n=400)\n", + "r0 = method0(choices, n=900)\n", "t0 = pd.Timestamp.now() - t0\n", "r0" ] }, { "cell_type": "code", - "execution_count": 112, + "execution_count": 163, "metadata": {}, "outputs": [], "source": [ @@ -320,7 +341,7 @@ }, { "cell_type": "code", - "execution_count": 113, + "execution_count": 164, "metadata": {}, "outputs": [], "source": [ @@ -331,7 +352,7 @@ }, { "cell_type": "code", - "execution_count": 114, + "execution_count": 172, "metadata": {}, "outputs": [ { @@ -364,148 +385,148 @@ " \n", " \n", " 0\n", - " 0.0000\n", - " 0.000254\n", + " 0.000000\n", + " 0.000642\n", " 0.0365\n", " 0.047619\n", " \n", " \n", " 1\n", - " 0.0000\n", - " 0.001112\n", + " 0.000000\n", + " 0.002812\n", " 0.0667\n", " 0.047619\n", " \n", " \n", " 2\n", - " 0.0000\n", - " 0.000399\n", + " 0.000000\n", + " 0.001010\n", " 0.0710\n", " 0.047619\n", " \n", " \n", " 3\n", - " 0.0000\n", - " 0.003589\n", + " 0.000000\n", + " 0.009076\n", " 0.0653\n", " 0.047619\n", " \n", " \n", " 4\n", - " 0.0950\n", - " 0.011404\n", + " 0.073333\n", + " 0.028844\n", " 0.0786\n", " 0.047619\n", " \n", " \n", " 5\n", - " 0.0600\n", - " 0.017389\n", + " 0.100000\n", + " 0.043982\n", " 0.0999\n", " 0.047619\n", " \n", " \n", " 6\n", - " 0.0000\n", - " 0.005472\n", + " 0.000000\n", + " 0.013840\n", " 0.0662\n", " 0.047619\n", " \n", " \n", " 7\n", - " 0.1000\n", - " 0.025301\n", + " 0.100000\n", + " 0.063993\n", " 0.0858\n", " 0.047619\n", " \n", " \n", " 8\n", - " 0.0950\n", - " 0.023400\n", + " 0.080000\n", + " 0.059184\n", " 0.0682\n", " 0.047619\n", " \n", " \n", " 9\n", - " 0.0000\n", - " 0.004829\n", + " 0.000000\n", + " 0.012213\n", " 0.0745\n", " 0.047619\n", " \n", " \n", " 10\n", - " 0.0475\n", - " 0.014874\n", + " 0.046667\n", + " 0.037620\n", " 0.0327\n", " 0.047619\n", " \n", " \n", " 11\n", - " 0.0400\n", - " 0.017941\n", + " 0.046667\n", + " 0.045378\n", " 0.0187\n", " 0.047619\n", " \n", " \n", " 12\n", - " 0.1325\n", - " 0.047269\n", + " 0.125556\n", + " 0.119555\n", " 0.0307\n", " 0.047619\n", " \n", " \n", " 13\n", - " 0.0425\n", - " 0.012525\n", + " 0.034444\n", + " 0.031679\n", " 0.0279\n", " 0.047619\n", " \n", " \n", " 14\n", - " 0.3750\n", - " 0.167584\n", + " 0.367778\n", + " 0.423860\n", " 0.0274\n", " 0.047619\n", " \n", " \n", " 15\n", - " 0.0125\n", - " 0.016854\n", + " 0.025556\n", + " 0.042629\n", " 0.0312\n", " 0.047619\n", " \n", " \n", " 16\n", - " 0.0000\n", - " 0.004066\n", + " 0.000000\n", + " 0.010285\n", " 0.0344\n", " 0.047619\n", " \n", " \n", " 17\n", - " 0.0000\n", - " 0.013756\n", + " 0.000000\n", + " 0.034793\n", " 0.0235\n", " 0.047619\n", " \n", " \n", " 18\n", - " 0.0000\n", - " 0.006917\n", + " 0.000000\n", + " 0.017495\n", " 0.0225\n", " 0.047619\n", " \n", " \n", " 19\n", - " 0.0000\n", - " 0.000435\n", + " 0.000000\n", + " 0.001101\n", " 0.0109\n", " 0.047619\n", " \n", " \n", " 20\n", - " 0.0000\n", - " 0.000004\n", + " 0.000000\n", + " 0.000010\n", " 0.0277\n", " 0.047619\n", " \n", @@ -515,36 +536,36 @@ ], "text/plain": [ " method0: sampling method1: hindsight method3: generation tree ideal\n", - "0 0.0000 0.000254 0.0365 0.047619\n", - "1 0.0000 0.001112 0.0667 0.047619\n", - "2 0.0000 0.000399 0.0710 0.047619\n", - "3 0.0000 0.003589 0.0653 0.047619\n", - "4 0.0950 0.011404 0.0786 0.047619\n", - "5 0.0600 0.017389 0.0999 0.047619\n", - "6 0.0000 0.005472 0.0662 0.047619\n", - "7 0.1000 0.025301 0.0858 0.047619\n", - "8 0.0950 0.023400 0.0682 0.047619\n", - "9 0.0000 0.004829 0.0745 0.047619\n", - "10 0.0475 0.014874 0.0327 0.047619\n", - "11 0.0400 0.017941 0.0187 0.047619\n", - "12 0.1325 0.047269 0.0307 0.047619\n", - "13 0.0425 0.012525 0.0279 0.047619\n", - "14 0.3750 0.167584 0.0274 0.047619\n", - "15 0.0125 0.016854 0.0312 0.047619\n", - "16 0.0000 0.004066 0.0344 0.047619\n", - "17 0.0000 0.013756 0.0235 0.047619\n", - "18 0.0000 0.006917 0.0225 0.047619\n", - "19 0.0000 0.000435 0.0109 0.047619\n", - "20 0.0000 0.000004 0.0277 0.047619" + "0 0.000000 0.000642 0.0365 0.047619\n", + "1 0.000000 0.002812 0.0667 0.047619\n", + "2 0.000000 0.001010 0.0710 0.047619\n", + "3 0.000000 0.009076 0.0653 0.047619\n", + "4 0.073333 0.028844 0.0786 0.047619\n", + "5 0.100000 0.043982 0.0999 0.047619\n", + "6 0.000000 0.013840 0.0662 0.047619\n", + "7 0.100000 0.063993 0.0858 0.047619\n", + "8 0.080000 0.059184 0.0682 0.047619\n", + "9 0.000000 0.012213 0.0745 0.047619\n", + "10 0.046667 0.037620 0.0327 0.047619\n", + "11 0.046667 0.045378 0.0187 0.047619\n", + "12 0.125556 0.119555 0.0307 0.047619\n", + "13 0.034444 0.031679 0.0279 0.047619\n", + "14 0.367778 0.423860 0.0274 0.047619\n", + "15 0.025556 0.042629 0.0312 0.047619\n", + "16 0.000000 0.010285 0.0344 0.047619\n", + "17 0.000000 0.034793 0.0235 0.047619\n", + "18 0.000000 0.017495 0.0225 0.047619\n", + "19 0.000000 0.001101 0.0109 0.047619\n", + "20 0.000000 0.000010 0.0277 0.047619" ] }, - "execution_count": 114, + "execution_count": 172, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGhCAYAAABCse9yAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABTNklEQVR4nO3deVxU9f4/8NfMsIMggrIYMigKUigqQqCp5SSY10TN7XpFyV0xubgvgWYKGZGaXilvLnkrrXvVShMXFEtDUNxyXwlUFpevIKig8Pn94Y+jI6DMgHLA1/PxOA9nzuec9/mcgzPzmnM+M6MQQggQERERyZiypjtARERE9CwMLERERCR7DCxEREQkewwsREREJHsMLERERCR7DCxEREQkewwsREREJHsMLERERCR7BjXdgepQUlKCq1evol69elAoFDXdHSIiIqoEIQRu374NR0dHKJVPP4dSJwLL1atX4eTkVNPdICIiIj1kZGTglVdeeeoydSKw1KtXD8DDHba0tKzh3hAREVFl5OXlwcnJSXodf5o6EVhKLwNZWloysBAREdUylRnOwUG3REREJHsMLERERCR7DCxEREQke3ViDEtlFRcX4/79+zXdDaKXmqGhIVQqVU13g4hqmZcisAghkJWVhVu3btV0V4gIQP369WFvb8/vTSKiSnspAktpWGnUqBHMzMz4JElUQ4QQuHPnDnJycgAADg4ONdwjIqot6nxgKS4ulsKKjY1NTXeH6KVnamoKAMjJyUGjRo14eYiIKqXOD7otHbNiZmZWwz0holKlj0eOKSOiyqrzgaUULwMRyQcfj0Skq5cmsBAREVHtxcBCAIDExEQoFIrn8kkqhUKBTZs2VXtdOXryOK5evRr169ev0T4REdUFdX7Q7dOop295odtLi+7xQrdXkS5dusDLywuLFi2qke3fvHkTEyZMwC+//AKlUom+ffti8eLFsLCwqJH+PE8DBgzAO++8U9PdICKq9XiGhV64wYMH48SJE9ixYwc2b96M3377DaNGjarpbj0XpqamaNSoUU13g4io1mNgkbEuXbpgwoQJCAsLg7W1Nezs7LBixQoUFBQgJCQE9erVg6urK7Zu3aq13vHjx9G9e3dYWFjAzs4OQ4YMwfXr1wEAw4YNw549e7B48WIoFAooFAqkpaVJ66ampsLb2xtmZmbw9/fHmTNntGov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cL3c3FxYWFjAyMgIPXr0wBdffIG3334bAKT1dKkZFRUFKysraXJyctJlN4iIiKiWeSHfdFuvXj0cOXIEBw4cwPz58xEeHl7ux28ra8aMGcjNzZWmjIyM6ussERERyY5OH2u2tbWFSqVCdna21vzs7GzY29tXuJ5SqYSrqysAwMvLC6dOnUJUVBS6dOkirZednQ0HBwetml5eXuXWMzY2lr7NlYiIiOo+nc6wGBkZoV27dkhISJDmlZSUICEhAX5+fpWuU1JSgsLCQgCAi4sL7O3ttWrm5eUhOTlZp5pERERUd+n8xXHh4eEYOnQovL294ePjg0WLFqGgoAAhISEAgODgYDRu3BhRUVEAHo438fb2RrNmzVBYWIhff/0Va9euxfLlywE8/DhuWFgYPv74YzRv3hwuLi748MMP4ejoiKCgoGrbUR0/DEVEzxEfj0SkK50Dy4ABA3Dt2jVEREQgKysLXl5eiI+PlwbNpqenQ6l8dOKmoKAA48aNw+XLl2Fqagp3d3f85z//wYABA6Rlpk6dioKCAowaNQq3bt1Cx44dER8fXy0fdzQ0NAQA3LlzR+uL1oio5ty5cwfAo8cnEdGz6Pw9LHL0rM9xZ2Zm4tatW2jUqBHMzMygUChqoJdEJITAnTt3kJOTg/r162uNW6Oaxe9hoZqgy/ewvBS/JVQ6sLeib+Mloherfv36Tx2oT0T0pJcisCgUCjg4OKBRo0a4f/9+TXeH6KVmaGgIlUpV090golrmpQgspVQqFZ8oiYiIaqEX8sVxRERERFXBwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyp1dgWbZsGdRqNUxMTODr64uUlJQKl12xYgXeeOMNWFtbw9raGhqNpszyw4YNg0Kh0JoCAwP16RoRERHVQToHlvXr1yM8PByRkZE4dOgQWrdujYCAAOTk5JS7fGJiIgYNGoTdu3cjKSkJTk5O6NatG65cuaK1XGBgIDIzM6Xp+++/12+PiIiIqM7RObDExsZi5MiRCAkJgYeHB+Li4mBmZoaVK1eWu/y3336LcePGwcvLC+7u7vj3v/+NkpISJCQkaC1nbGwMe3t7abK2ttZvj4iIiKjO0SmwFBUVITU1FRqN5lEBpRIajQZJSUmVqnHnzh3cv38fDRo00JqfmJiIRo0awc3NDWPHjsWNGzd06RoRERHVYQa6LHz9+nUUFxfDzs5Oa76dnR1Onz5dqRrTpk2Do6OjVugJDAxEnz594OLiggsXLmDmzJno3r07kpKSoFKpytQoLCxEYWGhdD8vL0+X3SAiIqJaRqfAUlXR0dFYt24dEhMTYWJiIs0fOHCgdNvT0xOtWrVCs2bNkJiYiK5du5apExUVhblz576QPhMREVHN0+mSkK2tLVQqFbKzs7XmZ2dnw97e/qnrxsTEIDo6Gtu3b0erVq2eumzTpk1ha2uL8+fPl9s+Y8YM5ObmSlNGRoYuu0FERES1jE6BxcjICO3atdMaMFs6gNbPz6/C9RYuXIh58+YhPj4e3t7ez9zO5cuXcePGDTg4OJTbbmxsDEtLS62JiIiI6i6dPyUUHh6OFStWYM2aNTh16hTGjh2LgoIChISEAACCg4MxY8YMaflPPvkEH374IVauXAm1Wo2srCxkZWUhPz8fAJCfn48pU6Zg//79SEtLQ0JCAnr16gVXV1cEBARU024SERFRbabzGJYBAwbg2rVriIiIQFZWFry8vBAfHy8NxE1PT4dS+SgHLV++HEVFRXjvvfe06kRGRmLOnDlQqVQ4duwY1qxZg1u3bsHR0RHdunXDvHnzYGxsXMXdIyIiorpAIYQQNd2JqsrLy4OVlRVyc3N5eYiISA/q6Vuk22nRPWqwJ/Qy0eX1m78lRERERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESy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vvtOfPfdd2LXrl3ljkOrijr/PSxEVHtdunRJ63sdSr8XR64ePHiAO3fuwNLSssL2K1euwNnZ+bls/86dO1CpVDA2Nq62mqmpqdi7dy+Cg4NhbW1dbXWfVFBQAJVKBRMTkyrXEkIgJycHJSUlsLW1haGhYTX08MW7d+8e7t+/X23faXTu3DkUFhbC3d1d7+9hqkn8an4iki0XFxf4+fnBz89PCisZGRl4//33n9s2q1LfwMCgwrACPPyG4Llz5+rbtWe6ceMGxo4dW60127Vrh4kTJ8La2vq5HvubN29i3Lhx1VJLoVDAzs4ODg4OUlh5nn1/XrVNTExQr169aqvfvHlzvPbaa2XCSlXr3717F3v37sXJkyfLtN27dw/ffPON3rUfxzMsRFSrHD16FG3btkVxcXGtq1+b+/6867PvtbP+2bNn0a1bN6Snp0OhUKBjx474/vvv4ejoCODht8o7OjpWS99r3zkhIqrTfv7556e2X7x4Ubb1a3Pfn3d99r1u1p82bRpee+01HDx4ELdu3UJYWBg6duyIxMRENGnSRO+65eEZFiKSFaVSCYVC8dRf9lYoFHq/Y3ue9Wtz3593ffa9bta3s7PDzp074enpCeDh+KFx48bh119/xe7du2Fubl5tZ1g4hoWIZMXBwQEbNmxASUlJudOhQ4dkW7829/1512ff62b9u3fvao2JUSgUWL58OXr27InOnTvj7NmzVer74xhYiEhW2rVrh9TU1Arbn/VOsSbr1+a+P+/67HvdrO/u7o6DBw+Wmb906VL06tUL7777rl51y8MxLEQkK1OmTEFBQUGF7a6urti9e7cs69fmvj/v+ux73azfu3dvfP/99xgyZEiZtqVLl6KkpARxcXF61X4Sx7AQERGR7PGSEBEREckeAwsRERHJHgMLERERyR4DCxEREckeAwsRERHJHgMLERERyR4DCxEREckeAwsRERHJ3v8DUJyrbu6YcLwAAAAASUVORK5CYII=", + "image/png": "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Pnm3b9/GnTt3au2eRpmZmSguLoabm5ve92GqT7w1PxHJlouLC/z8/ODn5yeFlZycHLz55pt1ts6a1Dc0NKwyrAD37hC8YMECfYf2WFevXsXEiRNrtaaXlxemTp0KGxubOt33165dw6RJk2qllkKhgL29PRwdHaWwUpdjr6vaKpUKTZo0qbX6bdu2RceOHSuElZrWv3XrFvbv348TJ05UaLt9+zY2btyod+0H8QgLETUox44dQ9euXVFaWtrg6jfksdd1fY69YdY/c+YM+vbti+zsbCgUCvTo0QNffPEFnJycANy7q7yTk1OtjL3hHRMiokbtm2++eWT7H3/8Idv6DXnsdV2fY2+c9WfNmoWOHTvi8OHDuH79OsLDw9GjRw+kpKSgZcuWetetDI+wEJGsGBgYQKFQPPKbvRUKhd7v2OqyfkMee13X59gbZ317e3vs2bMHHh4eAO5dPzRp0iR8//33SE5Ohrm5ea0dYeE1LEQkK46Ojti6dSvKysoqnY4cOSLb+g157HVdn2NvnPVv3bqldU2MQqFAfHw8BgwYgF69euHMmTM1GvuDGFiISFa8vLyQkZFRZfvj3inWZ/2GPPa6rs+xN876bm5uOHz4cIX5q1atwsCBA/Hqq6/qVbcyvIaFiGRlxowZKCoqqrLd1dUVycnJsqzfkMde1/U59sZZf9CgQfjiiy8watSoCm2rVq1CWVkZEhIS9Kr9MF7DQkRERLLHU0JEREQkewwsREREJHsMLERERCR7DCxEREQkewwsREREJHsMLERERCR7DCxEREQkewwsREREJHv/D29WypRhKoObAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -565,7 +586,16 @@ }, { "cell_type": "code", - "execution_count": 115, + "execution_count": 173, + "metadata": {}, + "outputs": [], + "source": [ + "# df.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 174, "metadata": {}, "outputs": [ { @@ -578,13 +608,13 @@ { "data": { "text/plain": [ - "method0: sampling 1.143571\n", - "method1: hindsight 0.844554\n", + "method0: sampling 1.121905\n", + "method1: hindsight 0.952232\n", "method3: generation tree 0.494957\n", "dtype: float64" ] }, - "execution_count": 115, + "execution_count": 174, "metadata": {}, "output_type": "execute_result" } @@ -598,33 +628,49 @@ }, { "cell_type": "code", - "execution_count": 128, + "execution_count": 175, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor([[0.0000, 0.0000, 0.0000, 0.0000, 0.0733, 0.1000, 0.0000, 0.1000, 0.0800,\n", + " 0.0000, 0.0467, 0.0467, 0.1256, 0.0344, 0.3678, 0.0256, 0.0000, 0.0000,\n", + " 0.0000, 0.0000, 0.0000]], dtype=torch.float64) method0: sampling\n", + "tensor([[6.4225e-04, 2.8117e-03, 1.0104e-03, 9.0762e-03, 2.8844e-02, 4.3982e-02,\n", + " 1.3840e-02, 6.3993e-02, 5.9184e-02, 1.2213e-02, 3.7620e-02, 4.5378e-02,\n", + " 1.1956e-01, 3.1679e-02, 4.2386e-01, 4.2629e-02, 1.0285e-02, 3.4793e-02,\n", + " 1.7495e-02, 1.1011e-03, 9.9832e-06]], dtype=torch.float64) method1: hindsight\n", + "tensor([[0.0365, 0.0667, 0.0710, 0.0653, 0.0786, 0.0999, 0.0662, 0.0858, 0.0682,\n", + " 0.0745, 0.0327, 0.0187, 0.0307, 0.0279, 0.0274, 0.0312, 0.0344, 0.0235,\n", + " 0.0225, 0.0109, 0.0277]], dtype=torch.float64) method3: generation tree\n" + ] + }, { "data": { "text/html": [ "\n", - "\n", + "
\n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -634,28 +680,28 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", "
KL_div_loss and time for each method (lower is better)
 KL_div_losstimeKL_div_losstime
method
method0: sampling-0.14724521.593707method0: sampling-3.09214148.504429
method1: hindsight-0.1458740.631365method1: hindsight-3.0921410.683987
method3: generation tree-0.1472460.066084method3: generation tree-3.0921560.075112
\n" ], "text/plain": [ - "" + "" ] }, - "execution_count": 128, + "execution_count": 175, "metadata": {}, "output_type": "execute_result" } @@ -664,8 +710,9 @@ "data = []\n", "times = dict(zip(df.columns, [t0, t1, t3]))\n", "for k in df.columns[:3]:\n", - " input = torch.tensor(df[k].values)\n", - " target = torch.tensor(df['ideal'].values)\n", + " input = torch.tensor(df[k].values)[None, :]\n", + " print(input, k)\n", + " target = torch.tensor(df['ideal'].values)[None, :]\n", " # https://pytorch.org/docs/stable/generated/torch.nn.KLDivLoss.html#torch.nn.KLDivLoss\n", " s = F.kl_div(input, target , reduction='batchmean', log_target=False).item()\n", " t = times[k].total_seconds()\n", @@ -679,7 +726,7 @@ }, { "cell_type": "code", - "execution_count": 131, + "execution_count": 176, "metadata": {}, "outputs": [ { @@ -688,9 +735,9 @@ "text": [ "| method | KL_div_loss | time |\n", "|:-------------------------|--------------:|----------:|\n", - "| method0: sampling | -0.147245 | 21.5937 |\n", - "| method1: hindsight | -0.145874 | 0.631365 |\n", - "| method3: generation tree | -0.147246 | 0.066084 |\n" + "| method0: sampling | -3.09214 | 48.5044 |\n", + "| method1: hindsight | -3.09214 | 0.683987 |\n", + "| method3: generation tree | -3.09216 | 0.075112 |\n" ] } ],