Skip to content

Instantly share code, notes, and snippets.

@tttamaki
Last active June 28, 2020 04:19
Show Gist options
  • Save tttamaki/b061f64ad1c0f640acb2bccb88b5087e to your computer and use it in GitHub Desktop.
Save tttamaki/b061f64ad1c0f640acb2bccb88b5087e to your computer and use it in GitHub Desktop.
Pyroでいろいろな連続確率分布のパラメータを最尤推定する
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pyroでいろいろな連続確率分布のパラメータを最尤推定する.\n",
"\n",
"- guideはAutoDeltaを使う(点推定)\n",
"- 正規分布,ベータ分布,T分布,ラプラス分布,コーシー分布,指数分布,ガンマ分布,ガンベル分布"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# !conda install -y pytorch torchvision -c pytorch\n",
"# !pip install pyro-ppl\n",
"# !pip install daft"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"from collections import defaultdict\n",
"import os\n",
"\n",
"import numpy as np\n",
"\n",
"\n",
"import torch\n",
"import torch.distributions.constraints as constraints\n",
"\n",
"import pyro\n",
"from pyro.optim import Adam\n",
"import pyro.distributions as dist\n",
"from pyro.infer import SVI, Trace_ELBO\n",
"from pyro.infer.autoguide import AutoDelta, AutoNormal\n",
"from pyro.infer.autoguide.initialization import init_to_feasible\n",
"\n",
"# import pyro.poutine as poutine\n",
"from pyro import poutine\n",
"\n",
"pyro.enable_validation(True)\n",
"pyro.set_rng_seed(101)\n",
"\n",
"\n",
"from tqdm.notebook import tqdm\n",
"import daft\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 正規分布の最尤推定"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"保存先設定"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"experiment_name = \"normal\"\n",
"\n",
"file_format = \"png\" # \"pdf\"\n",
"savedir = \"./20200627_pyro_5th_trial/\"\n",
"os.makedirs(savedir, exist_ok=True)\n",
"\n",
"def savefig(desc):\n",
" fig.savefig(os.path.join(savedir, '{0}_{1}.{2}'.format(\n",
" experiment_name, desc, file_format)), bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真のmとstdをランダムに作成"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"m = 5.163986277024462 std = 1.1413351737362796\n",
"x_range: from 0.599 to 9.729\n"
]
}
],
"source": [
"true_m = np.random.rand() * 10\n",
"true_std = np.abs(np.random.rand() * 2)\n",
"print('m =', true_m, 'std =', true_std)\n",
"\n",
"x_range = np.arange(true_m - 4*true_std, true_m + 4*true_std, 0.01)\n",
"x_max = x_range.max()\n",
"x_min = x_range.min()\n",
"print('x_range: from {0:.3f} to {1:.3f}'.format(x_min, x_max))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真の分布からデータをサンプリング.最尤推定の解析解を計算."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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7Wans0iyZQAqAOOtteWBv7mLjxnk/os/tqYxEAA8DGQxxrR3NpU4QWVKrmOM8SGuSM221i5wOo+4rBrQyBhzCJgL/MsYM8vZSOKicCDcWvvPXuAw4sqVeL66wEFrbYS19iqwAHjC4UySfCeNMfkB4n+eSu4KVKYkgTHGEHfcxm5rbajTecR11trXrbX+1trCxB0A+3/WWv0PORWw1p4AjhhjSsTPCgF2ORhJXPcXUNUY4xf//hmCvjyQGi0GOsbf7wh8ndwVuHQGdEk3qgHPATuMMdvi5w2OPwO+iNw7LwKz469/egBdkitVsNb+YowJA7YQ923orehM6B7NGDMHqA08aIwJB4YCI4H5xpiuxBXklsler86ALiIiInL39DGfiIiIiBtUpkRERETcoDIlIiIi4gaVKRERERE3qEyJiIiIuEFlSkRERMQNKlMiIiIiblCZEpE0wRjzmDHmN2NMJmNMFmPM78aYQKdziUjap5N2ikiaYYx5D8gEZCbuencjHI4kIumAypSIpBnxl2PZCFwBnrDWXnM4koikA/qYT0TSklxAViAbcXuoRETuOe2ZEpE0wxizGJgLBAD5rbV9HI4kIulABqcDiIikBGNMByDGWvulMcYb+MkY8y9r7f85nU1E0jbtmRIRERFxg46ZEhEREXGDypSIiIiIG1SmRERERNygMiUiIiLiBpUpERERETeoTImIiIi4QWVKRERExA0qUyIiIiJu+H9lx/sa59S+xAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# sampling\n",
"target_dist = dist.Normal(true_m, true_std)\n",
"data = torch.tensor([target_dist() for i in range(100)])\n",
"true_y = [target_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(x_range, true_y, c='k', label=r'Normal(m,$\\sigma$)')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, density=True, alpha=0.2, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"plt.title(r'm={0:.3f} $\\sigma$={1:.3f}'.format(true_m, true_std))\n",
"\n",
"plt.ylim(0,)\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"plt.savefig('obs-data')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"m=5.084, sigma=1.164\n"
]
}
],
"source": [
"# 最尤推定の解析解\n",
"ml_m = data.numpy().mean()\n",
"ml_std = data.numpy().std()\n",
"print('m={0:.3f}, sigma={1:.3f}'.format(ml_m, ml_std))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"モデル`model`\n",
"- $p_\\theta(X)$\n",
"- $X = \\{x_1, \\ldots, x_N \\}$は観測されたデータ\n",
"- パラメータは$\\theta = \\{ m, \\sigma \\}$\n",
" - $x_i \\sim \\mathrm{Gauss}(m, \\sigma)$\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 124.724x110.079 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pgm = daft.PGM()\n",
"\n",
"pgm.add_node(\"xn\", r\"$x_n$\", 2, 1, observed=True)\n",
"pgm.add_node(\"m\", \"m\", 1.5, 2, fixed=True)\n",
"pgm.add_node(\"std\", r\"$\\sigma$\", 2.5, 2, fixed=True)\n",
"pgm.add_edge(\"m\", \"xn\")\n",
"pgm.add_edge(\"std\", \"xn\")\n",
"pgm.add_plate([1, 0.5, 2, 1], label=r\"$n = 1, \\ldots, N$\", shift=-0.2)\n",
"\n",
"pgm.show() # render and show"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"def model(data=None):\n",
" \n",
" # 推定初期値は0.0にする\n",
" m = pyro.param(\"m\", torch.tensor(0.0))\n",
"\n",
" # 推定初期値は1.0にする\n",
" # std > 0なので,positive制約を追加\n",
" std = pyro.param(\"std\", torch.tensor(1.0), constraint=constraints.positive)\n",
"\n",
" # dataはすべてのデータを表す(つまりベクトル・リスト・アレイ)\n",
" with pyro.plate('observe_data'): # 各観測obsは独立を仮定するからplateを利用\n",
" pyro.sample('obs', dist.Normal(m, std), obs=data) # vector-plateを利用"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"guideは点推定のAutoDeltaを使用"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"guide = AutoDelta(\n",
" poutine.block(model, hide=['obs']), # modelのobsを隠し,それ以外(mとstd)を使う\n",
" init_loc_fn=init_to_feasible # 初期値は妥当な値\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"準備"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"adam_params = {\"lr\": 0.005, \"betas\": (0.95, 0.999)}\n",
"optimizer = Adam(adam_params) # とりあえずAdam\n",
"\n",
"\n",
"svi = SVI(model=model,\n",
" guide=guide,\n",
" optim=optimizer,\n",
" loss=Trace_ELBO()\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"パラメータの初期化とhookの設定.こうするとすべてのパラメータの途中の値を保存できる."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tracing m <class 'torch.Tensor'> tensor(0., requires_grad=True)\n",
"tracing std <class 'torch.Tensor'> tensor(0., requires_grad=True)\n"
]
}
],
"source": [
"pyro.clear_param_store() # pyro.get_param_store()は空になる\n",
"\n",
"svi.loss(model, guide, data) # これを一回やらないとpyro.get_param_store()は空のママ\n",
"\n",
"trace_dic = defaultdict(list) # 値を保存する(このリストをここではtraceと呼ぶことにする)\n",
"for name, value in pyro.get_param_store().named_parameters():\n",
" print('tracing', name, type(value), value)\n",
" # hookは勾配計算毎に呼び出される.勾配の値gradは無視,nameを利用してparam(name)で値を取得してdicのlistに追加\n",
" value.register_hook(lambda grad, name=name: trace_dic[name].append(pyro.param(name).item()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"収束するまで学習"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"scrolled": true,
"tags": []
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "3e9e5602ccd542a0936942286ac86faa",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=5000.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"num_steps = 5000\n",
"\n",
"with tqdm(range(num_steps)) as pbar:\n",
" for i,p in enumerate(pbar):\n",
"\n",
" loss = svi.step(data) # 勾配計算,更新\n",
"\n",
" trace_dic['loss'].append(loss)\n",
"\n",
" if i > 100 and np.isclose(trace_dic['loss'][-100], loss):\n",
" break # 100回前と値が変わらなければ収束\n",
" \n",
" if i % 10 == 0: # 毎回表示すると早すぎて見えないので10回に1回表示\n",
" pbar.set_postfix(loss=loss)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"lossとパラメータの推移をプロット"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(trace_dic['loss'])\n",
"plt.title(\"ELBO\")\n",
"plt.xlabel(\"step\")\n",
"plt.ylabel(\"loss\");\n",
"savefig(\"loss\")\n",
"plt.show()\n",
"\n",
"\n",
"fig = plt.figure(figsize=(15,5))\n",
"\n",
"for i,param in enumerate(['m', 'std']):\n",
" plt.subplot(1,2,i+1)\n",
" plt.plot(trace_dic[param])\n",
" plt.ylabel(param)\n",
"\n",
"plt.tight_layout()\n",
"savefig(\"params\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最尤推定結果と真値の比較"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"m 5.083353042602539 true m 5.163986277024462\n",
"std 1.1655045747756958 true std 1.1413351737362796\n"
]
}
],
"source": [
"trace = poutine.trace(model).get_trace()\n",
"\n",
"print('m', trace.nodes['m']['value'].item(), 'true m', true_m)\n",
"print('std', trace.nodes['std']['value'].item(), 'true std', true_std)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"推定したパラメータでサンプリング"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAE9CAYAAAAvV+dfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzde3xP9QPH8ddnM9ncr7nMZYTcF1rk3tV9F5dccr8mQhERliRySXK/W+7mmktFERW5FJFCuc6lLbdc5rLt8/vjKz9pMjbObO/n4+HRvud8zjnv7zDvzjnfzzHWWkRERETk3rg5HUBERETkYaYyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKZw6cJYsWWy+fPmcOryIiIhInG3fvv1Pa23W2NY5Vqby5cvHtm3bnDq8iIiISJwZYw7fbp0u84mIiIjEg8qUiIiISDyoTImIiIjEg2P3TImIiCQG165dIywsjMuXLzsdRRKBVKlS4e3tjYeHR5y3UZkSEZFkLSwsjLRp05IvXz6MMU7HEQdZazl16hRhYWH4+PjEeTtd5hMRkWTt8uXLZM6cWUVKMMaQOXPmuz5LqTIlIiLJnoqU/O1e/iyoTImIiDjMGEOzZs1uvI6KiiJr1qzUrl0bgBkzZtC5c+cEO9769ev57rvvbryeMGECISEhCbLvwYMH3/U28X1/LVu2JDQ0FICNGzdSrFgxfH19iYyMvOd93g2VKREREYelTp2a3bt33/jHf82aNeTKleu+He/WMtWxY0eaN2+eIPu+lzKVkGbPnk2PHj3YsWMHnp6eD+SYKlMiIiKJQI0aNVi5ciUAc+fOpXHjxne1/fbt26lSpQplypThxRdf5MSJEwCMHj2aokWLUrJkSRo1asShQ4eYMGECH374Ib6+vmzcuJHg4GCGDx8OQNWqVenevTuVK1emSJEibN26laCgIAoWLMjbb79943gBAQGUKVOGYsWKMWnSJAB69+5NZGQkvr6+NG3aFIBZs2bh5+eHr68vHTp0IDo6GoDp06dTqFAhqlSpwrfffhvrewoODqZZs2Y888wzFCxYkMmTJwOuG8U7d+5M0aJFqVWrFuHh4QBMmTKFBQsWMHDgwBvHfyCstY78KlOmjBUREXHanj17nI5gU6dObXfu3Gnr1atnIyMjbalSpey6detsrVq1rLXWTp8+3b766qu33f7q1au2fPnyNjw83Fpr7bx582yrVq2stdbmyJHDXr582Vpr7ZkzZ6y11g4YMMAOGzbsxvY3v65SpYp98803rbXWjho1yubIkcMeP37cXr582ebKlcv++eef1lprT506Za219tKlS7ZYsWI3lqdOnfrGfvfs2WNr165tr169aq219pVXXrEzZ860x48ft7lz57bh4eH2ypUr9umnn471/Q0YMMCWLFnSXrp0yUZERFhvb2977Ngxu2jRIvvcc8/ZqKgoe+zYMZs+fXq7cOFCa621LVq0uPH1vYrtzwSwzd6m02hqBBFJdHaFnfvXshLe6R1IIslNt27d2LFjR4Lu09fXl1GjRt1xXMmSJTl06BBz586lZs2ad3WMvXv3snv3bp5//nkAoqOjyZEjx439Nm3alICAAAICAuK0v7p16wJQokQJihUrdmNf+fPn5+jRo2TOnJnRo0ezZMkSAI4ePcr+/fvJnDnzP/bz5Zdfsn37dp588kkAIiMjyZYtG99//z1Vq1Yla1bXc4Nfeukl9u3bF2sWf39/PD098fT0pFq1amzZsoUNGzbQuHFj3N3dyZkzJ88888zdfLsSnMqUiIhIIlG3bl169OjB+vXrOXXqVJy3s9ZSrFgxNm3a9K91K1euZMOGDSxfvpx3332Xn3/++Y77e+SRRwBwc3O78fXfr6Oioli/fj1r165l06ZNeHl5UbVq1VinE7DW0qJFC95///1/LF+6dGmcPzV367i/XyemT2CqTImIiFwXlzNI91Pr1q1Jnz49JUqUYP369XHernDhwkRERLBp0ybKly/PtWvX2LdvH0WKFOHo0aNUq1aNihUrMmfOHC5cuEDatGn566+/7jnnuXPnyJgxI15eXvz6669s3rz5xjoPDw+uXbuGh4cHzz77LP7+/nTv3p1s2bJx+vRpzp8/z1NPPUXXrl05deoU6dKlY+HChZQqVSrWYy1btoy33nqLixcvsn79eoYMGUJ0dDQTJ06kefPmhIeHs27dOpo0aXLP7ye+VKZEREQSCW9vb7p27RrruhkzZrB06dIbrzdv3oy3tzcAKVOmJDQ0lNdee41z584RFRVFt27dKFSoEC+//DLnzp3DWkv37t3JkCEDderUoX79+ixbtoyPP/74rnNWr16dCRMmULJkSQoXLky5cuVurGvfvj0lS5akdOnSzJ49m0GDBvHCCy8QExODh4cHY8eOpVy5cgQHB1O+fHly5MhB6dKlb9yYfis/Pz9q1arFkSNH6NevHzlz5iQwMJCvvvqKEiVK3LiJ3UnGdU/Vg1e2bFm7bds2R44tIomb7pmSB+mXX36hSJEiTseQWAQHB5MmTRp69OjxQI8b258JY8x2a23Z2MZragQRERGReNBlPhEREUmUgoODnY4QJzozJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIi4qCzZ88ybtw4p2PQsmVLQkNDAdi4cSPFihXD19eXyMhIh5MlfipTIiIiDvqvMnW7iSzvt9mzZ9OjRw927NiBp6enIxkeJipTIiIiDurduze///47vr6+9OzZk/Xr11OtWjWaNGlCiRIlOHToEMWLF78xfvjw4TemDPj999+pXr06ZcqUoVKlSvz666//2n9wcDDNmjXjmWeeoWDBgkyePBlwPTevc+fOFC1alFq1ahEeHg7AlClTWLBgAQMHDqRp06b3/xuQBGieKREREQcNGTKE3bt3s2PHDgDWr1/Pli1b2L17Nz4+Phw6dOi227Zv354JEyZQsGBBvv/+ezp16sRXX331r3E//fQTmzdv5uLFizzxxBPUqlWLzZs3s3fvXnbt2sUff/xB0aJFad26NW3btuWbb76hdu3a1K9f/3697SRFZUpERORv3brB9VKTYHx94S4foOzn54ePj89/jrlw4QLfffcdDRo0uLHsypUrsY719/fH09MTT09PqlWrxpYtW9iwYQONGzfG3d2dnDlz8swzz9xVRvk/lSkREZFEJnXq1De+TpEiBTExMTdeX758GYCYmBgyZMhw44zWfzHGxPr61uVyb1SmRERE/naXZ5ASQtq0aTl//vxt1z/66KOEh4dz6tQp0qRJw4oVK6hevTrp0qXDx8eHhQsX0qBBA6y1/PTTT5QqVepf+1i2bBlvvfUWFy9eZP369QwZMoTo6GgmTpxI8+bNCQ8PZ926dTRp0uR+vtUkSzegi4iIOChz5sxUqFCB4sWL07Nnz3+t9/DwoH///jz11FPUrl2bxx9//Ma62bNnM3XqVEqVKkWxYsVYtmxZrMfw8/OjVq1alCtXjn79+pEzZ04CAwMpWLAgJUqU4JVXXqFKlSr37T0mdcZae+dBxlQHPgLcgSnW2iGxjKkKjAI8gD+ttf/5u1K2bFm7bdu2e8ksIkncrrBz/1pWwju9A0kkOfjll18oUqSI0zHum+DgYNKkSUOPHj2cjvLQiO3PhDFmu7W2bGzj73iZzxjjDowFngfCgK3GmOXW2j03jckAjAOqW2uPGGOyxeM9iIiIiDw04nLPlB/wm7X2AIAxZh7gD+y5aUwTYLG19giAtTY8oYOKiIjI3ft7Tiq5f+Jyz1Qu4OhNr8OuL7tZISCjMWa9MWa7MaZ5bDsyxrQ3xmwzxmyLiIi4t8QiIiIiiUhcylRsn5u89UarFEAZoBbwItDPGFPoXxtZO8laW9ZaWzZr1qx3HVZEREQksYnLZb4wIPdNr72B47GM+dNaexG4aIzZAJQC9iVIShEREZFEKi5nprYCBY0xPsaYlEAjYPktY5YBlYwxKYwxXsBTwC8JG1VEREQk8bnjmSlrbZQxpjPwOa6pEaZZa382xnS8vn6CtfYXY8xnwE9ADK7pE3bfz+AiIiIiiUGcZkC31q4CVt2ybMItr4cBwxIumoiIiEjipxnQRUREEqlDhw5RvHhxp2P8S3BwMMOHD4/3mLNnzzJu3Lh7yhATE0Pt2rUpUaIER48evfMGwOuvv06RIkVYt27dPR3zdvRsPhERkZvENgN/fCSm2futtVhrcXNLHOdS/i5TnTp1uuttd+3aRXh4OLt27YrzNiNHjsTPz49p06ZRrVq1uz7m7SSO76aIiEgyN3LkSIoXL07x4sUZddMDl6OiomjRogUlS5akfv36XLp0iYsXL1KrVi1KlSpF8eLFmT9/PgCzZs3Cz88PX19fOnToQHR0NIcOHaJIkSJ06tSJ0qVL06ZNm3+cDQoODmbEiBG33f5v7733HoULF+a5555j7969sb6H240JCAigTJkyFCtWjEmTJt1Y3rt3b37//Xd8fX3p2bPnbcfF5uzZs2TL9s8HrlSrVo01a9YA8Pbbb/Paa6/9a7vs2bNz9uzZ/9z33dKZKREREYdt376d6dOn8/3332Ot5amnnqJKlSpkzJiRvXv3MnXqVCpUqEDr1q0ZN24cPj4+5MyZk5UrVwJw7tw5fvnlF+bPn8+3336Lh4cHnTp1Yvbs2VSuXJm9e/cyffp0xo0bx48//ki3bt1unA1asGABn3322W23b968Odu3b2fevHn8+OOPREVFUbp0acqUKfOv93C7MdOmTSNTpkxERkby5JNPUq9ePTJnzsyQIUPYvXs3O3bsAOD06dOxjotNdHT0v86wvfPOO/Tv35/w8HB+/PFHli+/dfIBcHNz+0dJTAg6MyUiIuKwb775hsDAQFKnTk2aNGkICgpi48aNAOTOnZsKFSoA8PLLL/PNN99QokQJ1q5dS69evdi4cSPp06fnyy+/ZPv27Tz55JP4+vry5ZdfcuDAAQDy5s1LuXLlAHjiiScIDw/n+PHj7Ny5k4wZM5InT57/3H7jxo0EBgbi5eVFunTpqFu37r/ew3+NGT16NKVKlaJcuXIcPXqU/fv3x/p9iOs4gB07duDt7f2PZZUrV8Zay8iRI5k3bx7u7u4A9OvX78aYXLlysW/fPi5fvvzfvyl3QWemREREHGbtrQ8W+T9jzL9eFypUiO3bt7Nq1SreeustXnjhBTJmzEiLFi14//33/zH+0KFDpE6d+h/L6tevT2hoKCdPnqRRo0Y3MsS2/e1yxHXM+vXrWbt2LZs2bcLLy4uqVavGWmTiOg6gSZMmrFixgvXr1/9j+a5duzhx4gRZsmQhbdq0AJw8eZKoqKgbYwoUKEDRokVvFMgSJUrc8X3dic5MiYiIOKxy5cosXbr0xv1QS5YsoVKlSgAcOXKETZs2ATB37lwqVqzI8ePH8fLy4uWXX6ZHjx788MMPPPvss4SGhhIeHg64LpkdPnw41uM1atSIefPmERoaSv369QH+c/vKlSuzZMkSIiMjOX/+PJ9++mms7yG2MefOnSNjxox4eXnx66+/snnz5hvbpE2blvPnz99x3K3mzJnDsGHD/nFv2YkTJ2jatCnLli0jderUfP755wD8+OOP+Pr63hi3c+dODhw4wLFjxxKkSIHOTImIiDiudOnStGzZEj8/PwDatm3LE088cePm8ZkzZ9KhQwcKFizIK6+8wsaNG+nZsydubm54eHgwfvx4ihYtyqBBg3jhhReIiYnBw8ODsWPHkj179n8dr1ixYpw/f55cuXKRI0cOgNtunzdvXkqXLs1LL72Er68vefPmvVH0bn0PsY2pXr06EyZMoGTJkhQuXPjG5UaAzJkzU6FCBYoXL87zzz9PVFRUrONiU7hw4RuF7dKlSwQFBTFixAiKFClCv3796NWrFy+++CI7duwgKCjoxnZnzpwhX758eHh43OXv0u2Z/zq1eD+VLVvWbtu2zZFji0jiFttH0xPTx8slafnll18oUqSI0zHkLm3ZsoUuXbqwefPm/7wE2aZNGyZPnnzjZvUFCxawaNGiG5+AjE1sfyaMMduttWVjG6/LfCIiIvLQ8fX1JXfu3Pj6+v7npJ1Tp069UaRef/11hg4dStu2bRM0iy7ziYiIyEMnZcqUhIaG3tU2I0eOvC9ZdGZKREREJB5UpkRERETiQWVKREREJB5UpkREJNlz6pPtkvjcy58F3YAuIsmSpl+Qv6VKlYpTp06ROXPmOM3yLUmXtZZTp06RKlWqu9pOZUpERJI1b29vwsLCiIiIcDqKJAKpUqX61zP/7kRlSkREkjUPDw98fHycjiEPMd0zJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8RCnMmWMqW6M2WuM+c0Y0zuW9VWNMeeMMTuu/+qf8FFFREREEp8UdxpgjHEHxgLPA2HAVmPMcmvtnluGbrTW1r4PGUVEREQSrbicmfIDfrPWHrDWXgXmAf73N5aIiIjIwyEuZSoXcPSm12HXl92qvDFmpzFmtTGmWIKkExEREUnk7niZDzCxLLO3vP4ByGutvWCMqQksBQr+a0fGtAfaA+TJk+cuo4qIiIgkPnE5MxUG5L7ptTdw/OYB1tq/rLUXrn+9CvAwxmS5dUfW2knW2rLW2rJZs2aNR2wRERGRxCEuZWorUNAY42OMSQk0ApbfPMAYk90YY65/7Xd9v6cSOqyIiIhIYnPHy3zW2ihjTGfgc8AdmGat/dkY0/H6+glAfeAVY0wUEAk0stbeeilQREREJMmJyz1Tf1+6W3XLsgk3fT0GGJOw0UREREQSP82ALiIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKlMiIiIi8aAyJSIiIhIPKZwOICJJ066wc/9aVsI7vQNJ7o8H8f6S+vdQJKnQmSkRERGReFCZEhEREYkHlSkRERGReFCZEhEREYkHlSkRERGReFCZEhEREYkHlSkRERGReFCZEhEREYkHlSkRERGReFCZEhEREYmHOJUpY0x1Y8xeY8xvxpje/zHuSWNMtDGmfsJFFBEREUm87limjDHuwFigBlAUaGyMKXqbcUOBzxM6pIiIiEhiFZczU37Ab9baA9baq8A8wD+WcV2ARUB4AuYTERERSdTiUqZyAUdveh12fdkNxphcQCAwIeGiiYiIiCR+cSlTJpZl9pbXo4Be1tro/9yRMe2NMduMMdsiIiLimlFEREQk0UoRhzFhQO6bXnsDx28ZUxaYZ4wByALUNMZEWWuX3jzIWjsJmARQtmzZWwuZiIiIyEMnLmVqK1DQGOMDHAMaAU1uHmCt9fn7a2PMDGDFrUVKREREJCm6Y5my1kYZYzrj+pSeOzDNWvuzMabj9fW6T0pERESSrbicmcJauwpYdcuyWEuUtbZl/GOJiIiIPBw0A7qIiIhIPKhMiYiIiMSDypSIiIhIPKhMiYiIiMSDypSIiIhIPKhMiYiIiMSDypSIiIhIPKhMiYiIiMSDypSIiIhIPKhMiYiIiMSDypSIiIhIPKhMiYiIiMSDypSIiIhIPKhMiYiIiMRDCqcDiIjckzNnYOdOOHwYjhyBiAi4ehWuXYOUKSFzZtev/PmhWDHw8QF3d6dTi0gSpDIlIg+Hs2fhs89g1SrYvBn27//n+gwZXCXKwwOuXIHTpyEm5v/rvbygQgV47jl4/nnI4gPGPNj3ICJJksqUiCRa5upV0q5ZTaa5IfDt1xAVBVmyQKVK0Lo1lCnjOuPk7Q2pUv1z45gY19mr/fvh559hxw5Ytw569YJevSiU/zHOBtTnTFAjruXN58j7E5GkQWVKRBId9zOnyTx1PJlnTSfFqT+JzPYov9SsybacOfkuOpoT4eFErltH5KpVGGNIly4d6dKlw9vbm8cee4xChQpRunRp0v59qa9cuf/v/MQJWLmSa9NDyPbhULJ9OJS/nq/Bn+07Q67qOlslIndNZUpEEo+ICBg6lELjxpEiMpJvsmTlQ6/ULA3/g5jlywHIkiULOXPmxMvLi1SpUhETE8OxY8fYs2cPYWFhXL16FQA3NzdKlixJpUqV8Pf3p3Llynh4eECOHNC2LQerNyDFiWNknjWdTJ9MI/0Xq+Dpp+H996FyZSe/CyLykDHWWkcOXLZsWbtt2zZHji0i99+usHP/WlbCO33sg69c4dLQobi//z4pLl9mLvA+cNGnAGXLV6S4bxkCnq/EY489Rpo0aW57zOjoaI4ePcqvv/7Kpk2b+Pbbb/nuu++IjIwkY8aMBAUF0a5dO/z8/Nh97K8b25nIS2RcOJdcY0fA8eNQsyYMHw5FiiTM+7tHD+IYIhI3xpjt1tqysa5TmRKR+yGuReDI9Ok80rUrj54/z0pgWpEi5AtqQtUXapAv/2P/uW1cXLp0iS+++ILFixezePFiLl68SKlSpQh6uS21g17CI2XK/x8jkweMGeM6O3XxIvTsCX37um5ev8f3Fx8qUyKJx3+VKc0zJSKO2P3tt6zJl488rVvz14ULfFyrFjl/+IFFe/bQsmOXfxSp+PDy8iIgIICQkBCOHz/O+PHjARjQswu1K5dm3swpXL1y5e/B8OabsG8fNGkCgwdD8eKwYUOCZBGRpEllSkQeqLCwMN6vWZP0FSvyzOHDfFO+PBkOHaLLihU88cQT9/XY6dKlo2PHjvz444+MDVlItuw5Gfx2D/yf8eOLlcu4caY+a1aYMcP16T93d6haFfr0cc1jJSJyC13mE4lFYr+E4+Tln7ge+9ZxUVFRzJo0hrTDBtEvKoqIdOn5Y8JM3CpVjdNx43KMuxkHYK1l04Z1DH/3bX7bu4fSfuV5e/BIHiv8/3ulSmRwh27dYOpU11QMc+dCwYK33ee9vpfYJKbLfLd7v7rsKMmFLvOJiKP2/LSDztUrUeP9YIKjovjj+Rqc2rwrzkXqfjHG8HSVZ1jw2Qb6DxnFgf17ealmFSaO+oBrf5+FSpMGpkyBRYvg4EEoWxZWrHA0t4gkLipTInLfXLt2jdFD3+X92tWYt38vVT08ODrsY05NnUNM2nROx7shRYoU1G/akiVffc+z1eswdsRgGteuxi+7d/5/UFAQ/PADPPYY1K1LtlEf/HOGdRFJtlSmROS+CDt8iJb1ahAxZgSb3N3JliUrh5Z8wdlGzRLtxJiZs2Tlg7FT+WjqHM6cOsXL/s8zZsyY/99LlTcvfPMNNG3KoyMGk6dDc0zkJWdDi4jjVKZEJMHNnz+fBi9WpO6eXSwFbLGSHFi5nshS9/cG84RS7YWahK75lvKVqtGlSxfq1avHmTNnXCs9PSEkhOMDBpPu85Xkf6ku7qf+dDawiDhKZUpEEkxUVBQ9evSgcaNGjE+ThkFXrnC2diAHFq4kKnsOp+PdlYyZMjN62lyGDx/Op59+SunSpfnpp59cK43hVNtOHJkYQqo9uykQ8AIpDx10NrCIOEZlSkQSxOnTp6lZsyYfjRjB5kKFaPbHSf5s2Y6jY6diPT2djndP3NzceOONN9i4cSNXrlzh6aefZunSpTfW/1WjDgfnLcP97BkKBDxPqpvvsRKRZENlSkTibe/evfj5+bF5/XoOlCiB3759nOzRlxMDPwC3h//HTLly5di2bRtFixYlMDCQQYMG3biP6lLZp/h96RfEpEpF/kZ18fxxu8NpReRBi9NPOWNMdWPMXmPMb8aY3rGs9zfG/GSM2WGM2WaMqZjwUUUkMdq5fQtPP/00V//6iyOlS5N71y4YP56Irj0T7Y3m9yJnzpx8/fXXvPzyy/Tr148BPToTFRUFwNUCBTkQuoqo9BnxaRKA19bNDqcVkQfpjmXKGOMOjAVqAEWBxsaYorcM+xIoZa31BVoDUxI6qIgkPus+X0nbl+qSI0MGfi1cmAxbtrgmt+zY0elo94WnpychISEEBwezdMFsurVrSuT1T/Nd887DgdCVRGV7lHwv1yP1d3oEjUhyEZczU37Ab9baA9baq8A8wP/mAdbaC/b/U6mnBpyZVl1EHpiFs6bTvX0zihcuwg+5c+P17beuItW6tdPR7itjDAMGDODtwSP55qs1tG8cwNkzpwGIypGLAwtXcs07D/maNyT1po0OpxWRByEuZSoXcPSm12HXl/2DMSbQGPMrsBLX2SkRSaKmTxjNu291p1qVZ/kybVpSbtgA06ZBq1ZOR3tgGjZrzfAJM/hl905a1qvBHyeOAxCV7VEOLPiUq3nzkbdVYzx/1GOzRJK6uJSp2G56+NeZJ2vtEmvt40AA8G6sOzKm/fV7qrZFRETcXVIRSRQmjvqAD9/rT806QSx85BHSf7vBdUaqZUunoz1wz9Woy4RZi/njxHHaNKzNyRPHAIjOnIWDs5cQlSUrPs3qkWrPLoeTisj9FJcyFQbkvum1N3D8doOttRuAAsaYLLGsm2StLWutLZs1a9a7DisizrHW0q9fP8aOGEydei8R4uVFxs9WcHzA4GR1RupWZctVYMLsxZw+9Set69fieNgRAKKy5+DgvGVEe6XBp0kgj/y2z+GkInK/xKVMbQUKGmN8jDEpgUbA8psHGGMeM8b1sR1jTGkgJXAqocOKiDOstfTu3ZtBgwYR1Lg5U7JkI/P8WfzRtSen2nZyOp7jSpV+kklzlnLu3BlaN6hF2JFDgOum9IPzlmHd3PBpHIDHsaP/vSMReSjdsUxZa6OAzsDnwC/AAmvtz8aYjsaYvz+yUw/YbYzZgeuTfy/ddEO6iDzkBgwYwAcffECnTp34OK8P2SZ+zKkW7Qh/o4/T0RKN4r6lmTxnGRfOn6dNw9qcuF6cruZ/jEOzF+N28QL5mjfA7exZh5OKSEKL0zxT1tpV1tpC1toC1tr3ri+bYK2dcP3rodbaYtZaX2tteWvtN/cztIg8OEOHDuXdd9+lTYmgOLUAACAASURBVJs2fFymDDmHvMPZgAYcHzg0Sc0jlRCKlvRl8rxlXDj/F+0a+fNn+B8AXC5SnMNTZpHy4O/kbdsELl92OKmIJKSHf2piEblvxo4dS+/evWncuDETGzbErUMHzleqytGR45LEzOb3Q5HipRgXEkpE+B90aBrIuesPSL74dGXCPpxAmu+/g+bNISbG4aQiklD001BEYjV9+nQ6d+6Mv78/M3v1wr1hQ3j8cY5MmAkeHk7HS9RKlfHjo6lzOHTgN15pVo+LF84DcM6/Hif6vgsLF8IbbzicUkQSisqUiPzLokWLaNu2LS+88ALzP/oID39/8PSElSuJSZfe6XgPhXIVqzB8vGseqi6tGnE5MhKAPzt0hq5dYdQo+Ogjh1OKSEJQmRKRf9iwYQNNmzblqaeeYsns2TzSoAFERMCKFZAnj9PxHirVXqjJoA8nsP377+jVuQ3R0dGu+8xGjoTAQHj9dVi92umYIhJPKlMicsPPP/+Mv78/Pj4+fLp0KV7t2sG2bTB3LpQp43S8h1KtwAb0emcI675YxZD+vbDWuu43CwmBkiWhUSPYs8fpmCISDypTIgJAWFgY1atXx9PTk88++4zMI0fC0qWuy1F16zod76HWpFUHWnZ8jfkhU5g2bpRrYZo0sHy56/JpnTrw55/OhhSRe6YyJSKcPXuWGjVqcO7cOVatWkXe776DoUOhY0d47TWn4yUJ3d4KpoZ/fT4a8g6ffPKJa2Hu3LBsGRw7BvXqwdWrzoYUkXuiMiWSzF2+fJmAgAD27t3LkiVL8I2OhtatoVIl3SCdgNzc3Hh3xFiefLoSrVu3Zu3ata4VTz0F06fDhg3wyiug+Y5FHjoqUyLJmLWWNm3a8PXXXzNjxgyeLV4cAgIgWzYIDYWUKZ2OmKSkfOQRPpz0CY8//jhBQUHs3LnTtaJxY+jXD6ZNU4EVeQipTIkkY4MGDWLOnDm89957NKlXz3Wp6dQp16WnbNmcjpckpUufgdWrV5MuXTrq1KnDyZMnXSuCg12f8OvRA9avdzKiiNwllSmRZGrBggX079+fZs2a8Vbv3tC5M3z7LcyYAb6+TsdL0ry9vfn00085deoU/v7+REZGuj7hN3MmFCoEDRvCUT0UWeRhoTIlkgxt2bKFFi1aUKFCBSZPnowZPx6mTIE+fVz/kMt998QTTzBr1iy2bNlC69atXVMmpE0LS5bAlSsQFITRM/xEHgoqUyLJzJEjR6hbty45cuRgyZIlPPLDD9CtG9SuDe++63S8ZCUwMJD333+fefPmMXDgQNfCwoXhk09g2zZy9n1DN6SLPARUpkSSkfPnz1OnTh0iIyP59NNPyQquM1F58rj+AdfDix+4Xr160bx5c4KDg5k/f75rYd260L8/mRbMJtMn05wNKCJ3lMLpACLyYERHR9O0aVN2797NqlWrKPb441C9uutRMZs2QYYMTkdMlowxTJo0iQMHDtCyZUt8fHzw8/ODAQP469vvyRHcm8tFinHpyXJORxWR29D/hookE3369OHTTz9l9OjRvPjiizBwIKxdC2PHwhNPOB0vWXvkkUdYvHgxOXLkwN/fn2PHjoGbG0c/msi1XLnJ07EFKU6ecDqmiNyGypRIMjBv3jw++OADOnbsyKuvvgqffea6P6plS9cEneK4rFmz8umnn3LhwgUCAwO5fPkyMekzcHjKbNwuXCBPp1Zw7ZrTMUUkFipTIkncjh07aN26NRUrVuSjjz6Cw4ehaVMoUcJ1VsoYpyPKdcWKFeOTTz5h69atdOzYEWstVwoX4dgHo0m9dTPZh7zjdEQRiYXKlEgS9ueffxIQEECmTJkIDQ0lpbWuG86jolwznHt5OR1RbhEQEMCAAQOYOXMmc6ZPBOCcfz3+bNmOrJPGwOLFDicUkVupTIkkUVFRUTRs2JCTJ0+yZMkSHn30UXjjDdiyxfUsuIIFnY4ot9G/f3/8/f0ZPrAv33/7NQAn3x7EJd8y0KoV/PabwwlF5GYqUyJJVM+ePVm3bh2TJk3iySefhLlzXZf13ngDgoKcjif/wc3NjZCQEPLmf4yer7Qi7Mgh7COPcGT8dEiRAurXh8hIp2OKyHUqUyJJUEhICKNGjaJr1640b94c9uyBdu2gYkV4/32n40kcpEuXjlFTZhMdHUX3di9z6dJFrnnngVmzYOdO6NLF6Ygicp3KlEgSs23bNtq3b0+1atUYNmwYXLjgOpOROjXMnw8eHk5HlDjKl/8xho6Zxr5ffia4RxfXI2dq1IC334apU12Xa0XEcSpTIknIH3/8QWBgINmzZ2f+/Pl4pEjhOiO1dy/Mmwc5czodUe5SxWrP0bX3AD77dDHTxo1yLQwOhmefhU6dXGepRMRRKlMiScTVq1epX78+p06dYsmSJWTNmhXGjXOVqHffhWrVnI4o96jVK12pXieI0UMHsmrVKnB3hzlzIFMm11nHc+ecjiiSrKlMiSQR3bt355tvvmHq1Kk88cQT8P330L276wHGvXs7HU/iwRhD8PCPKVSkGE2aNGH//v2QLRssWAAHD7omXtUDkUUcozIlkgQsmhvCuHHj6NmzJ40bN4ZTp6BBA8iVC2bO1AOMkwAvr9R8OHkW7u7uBAQEcP78eahQAT74wDX31KhRTkcUSbb0oGORB2BXWNwuw8Q2roR3+v/cZucPWxn8dg/KV6pGk1d7s+vIGfK1aETqP/7gwOLPibzkDpf+v9/Y9ne7fHc69p22T0gP4hiJ6bix8c6TjyFjptHx5SACX2rKyIkhmAatKfHNN/Dmm+Dn5ypYxD13XH+Pb+de/syKJDX631WRh9if4X/wRvvmZMuegw/GTsPd3Z1so4eRdv1aTrwzlMhSeoBxUlOuUlW693mHL1d/yuSPR7geBzR9OuTL55rdPjzc6YgiyY7KlMhD6trVq7zRsSV/nTvLqMmzSJ8xI2k2rCPbyCGcCWrI6aYtnY4o90nz9p2pGdCAscPfY8OXn0P69K7HA50+DU2aQHS00xFFkpU4lSljTHVjzF5jzG/GmH/dyWqMaWqM+en6r++MMaUSPqqI3Gz4u335cesmgod9TOGiJfA4HkbuLm25UvBxjr3/oR5gnIQZYxjwwUcULlqct15r57ohvVQp16c3v/zSNXWCiDwwdyxTxhh3YCxQAygKNDbGFL1l2EGgirW2JPAuMCmhg4rI/y1bOIe5MyZfP0NRH3P1KnleaYW5coXDk0KwXqmdjij3maen1/Ub0lP8/4b0Vq1cn+wbNIg069Y4HVEk2YjLmSk/4Ddr7QFr7VVgHuB/8wBr7XfW2jPXX24GvBM2poj8bfv27bz7Vnf8KlSm21vBAGQf3B+vH7YSNnwMVwvoAcbJRa7ceRk2fjp79+6lRYsWxMTEwJgxUKoUuV9rj0fYEacjiiQLcSlTuYCjN70Ou77sdtoAq+MTSkRiFxERQWBgIJmzZOWDsdNIkSIF6T9dQpapE/izTUf+qh3gdER5wJ6qUIVhw4axZMkSBg8eDJ6eEBqKiY4mT8eWmCtXnI4okuTFpUzFduNFrLPDGWOq4SpTvW6zvr0xZpsxZltERETcU4oIUVFRvPTSS0RERPDh5FlkypyFlL/vJ1fPLlws48fJPgOdjigO6datG02bNqV///6sXLkSHnuMsBFj8dr5AzkG9nU6nkiSF5cyFQbkvum1N3D81kHGmJLAFMDfWnsqth1ZaydZa8taa8tmzZr1XvKKJFu9evVi3bp1TJw4kaIlfHG7eIG87ZthH3mEI+OnY1OmdDqiOMQYw6RJk/D19aVJkybs27ePv2rUIaJDFzKHTCH9koVORxRJ0uJSprYCBY0xPsaYlEAjYPnNA4wxeYDFQDNr7b6EjymSvM2ZM4eRI0fSpUsXmjdvDtaSq1c3Htm/lyNjphKV47+uvEty4OXlxZIlS0iZMiUBAQFcOP8XJ3v15+KT5cnVuxuP7PvV6YgiSdYdy5S1NgroDHwO/AIssNb+bIzpaIzpeH1YfyAzMM4Ys8MYs+2+JRZJZnbu3Enbtm2pVKkSI0aMACDTzClkWBbKHz36crFSVWcDSqKRN29eFixYwL59+3i7+yvEuLtzZNw0Yry8yNOxBW4XLzgdUSRJitM8U9baVdbaQtbaAtba964vm2CtnXD967bW2ozWWt/rv8rez9AiycXZM6cJDAwkU6ZMLFy4EA8PD9i8mRwD+/DXsy8S0fl1pyNKIlOtWjWGDx/OV5+vZPLo4URlz8HRsVN55Pf95Hqzqx6ILHIfaAZ0kUQqOjqa3p3bcuzYMRYvXsyjjz4KERHQoIHrH8hRE/UAY4lV165dqR3UkHEj3+frtZ9x8enK/NGjLxmWLyLTzClOxxNJcvSTWCSRGjNsEN9t+Ipx48bh5+fnekRIkyYQEcHhiSHEZMjgdERJpIwx9B/yEY8XL8lbr7Xn4O/7iXi1O389+yI5BvbB88ftTkcUSVJUpkQSoS9WLmPq2A9p8HJr2rRp41oYHAxr18LYsVwu4etoPkn8Unl6MmryLDw8POjWtikXLl4g7MMJRGXPQZ5XWuB+5rTTEUWSDJUpkUTm159/4u3ur+Bb9il6vzPEtXDlShg0yPWokL/Llcgd5MiVm+ETZnDk4O/07daRa+nTc2T8TFJEhJO7aweIiXE6okiSoDIlkoic+jOCrm2akD5DRkZODMEjZUo4eBBefhl8fV2PChG5C0+Wr0SP/u+x7otVTBo9jMhST3AieAhp160h68cjnI4nkiSkcDqAiLhcu3qV19s358ypU8xYvJos2R7FXL4MDeu5Bixa5HpUiMhdatKqA3t27WDciPd5vFhJqr7cCq+tm3l0xGB4vjK88ILTEUUeajozJZIIWGt57+0e/Lh1EwNHjKVoCV+wlpx9Xocff4SQEMif3+mY8pAyxtBv8IcULeFLn64dOHjgN44N+ZDLjxeFRo3g99+djijyUFOZEkkE5s2czOK5IbTr0oPqdYMAyDxzMpkWzoH+/aFOHYcTysMulacno6bMwiNlSrq1bcr56GgOT57tWhkYCBc0oafIvVKZEnHY5m++5oPgt6j2Qk1e7dEHgNSbNpIj+C3+eq46DBjgcEJJKrLn9GbE+BkcPXSAPl07cCV3Hpg/H37+GVq10oSeIvdIZUrEQUcOHqBHxxbkK1CIwR9NxM3NDY9jR8nTsSVXfApwdPQkTcwpCaps+Yr0HDCY9WtW8/EH78Lzz8PQoRAa6vqviNw13YAu4pAL5//itTaNMcbw8bS5pE6TFhMZSd52L2OuXePwlNnEpE3ndExJghq1aMdve39l6tgPqVCmBK3eeAN++AH69HF9arR6dacjijxUVKZEHBAdHU3vLu04fOA3Js5ZgnfefGAtuXp3JdXunzg8bS5XCxR0OqYkUcYYeg8cStjhg3To0IH8+fNTZcoU2LMHGjeGrVvhscecjiny0ND1AxEHDBvYhw1ffk7vgR/g93RlADJPGUfGxQsIf/0tzj+nMwNyf3l4eDBs/HQKFChAUFAQ+48dgyVLXJeVAwJ0Q7rIXVCZEnnAZk+bwJxpE2ne7lVeau6azTz1N1+T473+nKtem/DXejicUJKLdOkzsGLFCowx1K5dmzMZMsCCBfDLL9CypWZIF4kjlSmRB2j9mtUMe6cPz7xYi+59BwKQ8vf95O3YnCsFChH24XjdcC4PVIECBVi6dCmHDh2ifv36XKtcGYYPd00Sq0+SisSJfmqLPCB7du3gzVfbUKR4KQaPnoS7uzvuZ06Tr+VL2BQeHJo+l5g0aZ2OKclQxYoVmTx5Ml999RWdOnXCdu0Kbdu6ngc5a5bT8UQSPd2ALvIAnDweRpeWjciQMROjp83Fyys15upV8nRojsfxMA7OW861PPmcjinJWPPmzdm3bx/vvfcehQsXpsfYsa6Z0du0AR8fyFvc6YgiiZbKlMh9dv78eTq3fIlLly4yc/FnZH00u+tRMX3fIM2mbzj60UQuPVnO6ZgiDBw4kH379tGzZ0+8vb1pFBoK5cpBYCAeS9eo8Ivchi7zidxH165d46WXXuL3fb8yfPwMChUpBkCWSWPINO8Twl/rwdmglxxOKeLi5uZGSEgIlSpVokWLFqzbuRNWrIBr18jXqjFu5/9yOqJIoqQyJXKfWGtp164dq1evpu97I6hQ9VkA0q5ZTfb3+nOulj9/vNHH4ZQi/5QqVSqWLVvGY489RkBAALuuXIHQUB45sJ88r7aBqCinI4okOipTIvdJnz59mDlzJsHBwdRv2hKAVD/tIHfntkSW8OWoPrkniVTGjBlZvXo1adKkoXr16hwpWJBjg4aTdt0acg7orWf4idxCP8lF7oNRo0YxZMgQOnbsSP/+/QHwOHKIfC0bEp0pE4enzcV6ejmcUuT28uTJw+rVq7lw4QI1atTgcK0AIjq+RuaQKWQdN8rpeCKJisqUSAKbO3cu3bt3JygoiDFjxmCMwf30KXya1cdcu8ahTxYR9Wh2p2OK3FHJkiVZunQp+/fv57U2jTncvTdnAxqQfcg7ZFg0z+l4IomGypRIAlqzZg0tWrSgSpUqzJ49G3d3d7h0iXytGuFxLIzD0+Zy5bFCTscUibNq1aoREhLCD1s20bNzGw4OGcWFCpXx7tGZNBvWOR1PJFFQmRJJINu2bSMoKIgiRYqwbNkyUqVK5bpZt3FjPH/cxtGPJ2sKBHkoNWrUiD7vDmP9mtX0e6s7ByeEcLlgYfK0b0aq3TudjifiOM0zJZIAdu3axYsvvkiWLFlYvXo16dOnd92k26ULLF/O8XeH8VeNOk7HFLlnjVq248KF84weOhCv1GkInrmQxwJfIF+Lhvy+5HPNQSXJmsqUSDzt3buX5557Dk9PT7788kty5szpWvH22zBhAvTuzemW7ZwNKZIA2nZ+nQvn/2LauFGkTZeOXiGh5A+qjk+TQA4sWq17ASXZ0mU+kXg4cOAAzz7rmj/qyy+/JH/+/K4VQ4bA4MHQvr3rvyJJRNfeA2jYrA3Txo1i7BerOPRJKCkiwvFpEoj7mdNOxxNxhMqUyD06evQozz77LJGRkaxdu5bChQu7VowbB2+9BU2auL42xtmgIgnIGEOfQcOoFdiQ0UMHMmn7Fg5Pn0vKwwfI93I9zZIuyZLKlMg9OHnyJM899xynT5/miy++oESJEq4VISHw6qtQty7MmAHu7o7mFLkf3NzcGDhiLM/VrMuwd/ow4eddHJkwE889u8jbqhFcuuR0RJEHSmVK5C4dP36catWqcezYMVavXk2ZMmVcKxYvhlat4NlnYf588PBwNqjIfeTh4cHQMVN5vpY/wwb2ZdzB3zk6aiKpt2yC+vXh6lWnI4o8MHG6Ad0YUx34CHAHplhrh9yy/nFgOlAa6GutHZ7QQZOTXWHn/rWshHd6B5I4K6G/D7Ht724dPXqUZ555hpMnT/LZZ5+RNk8xdoWdI+2a1eTp0JzLvmU4OHYmMX9eAa7E+3j3w918HxLieyb/ltDf1/jsLz7benh4MOTjKQAMG9gX228QXYd+hPebr0HDhrBgAaRMedvjxPXvc1wzPoifk/r5LLG545kpY4w7MBaoARQFGhtjit4y7DTwGqASJUnWoUOHqFy5MhEREaxZs4aKFSsCkPbzla4iVbQEB0MWEpM6jcNJRR6cvwvVC7UDGP7u23x0/i8YMwaWLYMGDeBK4vyfCpGEFJfLfH7Ab9baA9baq8A8wP/mAdbacGvtVuDafcgo4rgjBw9QuXJlzp07x9q1aylXzjX5ZrrVn5K3YwsuFyvJwdmLiUmfweGkIg+eh4cH74+efKNQDT53DjtmDCxf7rrkp0IlSVxcylQu4OhNr8OuL7trxpj2xphtxphtERER97ILkQfu4G/7aN2gFpcuXeKrr76ibNmyrhWLF5OnUysiS/iqSEmy93ehqhXYkL59+/LmoUPYceNgxQoICsJcvux0RJH7Ji5lKrbPddt7OZi1dpK1tqy1tmzWrFnvZRciD9SuH7fTIqg6UdFRrF+/Hl9fX9eK+fOhYUMulSrtKlLpdM+EiIeHB++NmkDnzp0ZPnw47bZvJ2b8eFi1irztXsZE6lN+kjTFpUyFAblveu0NHL8/cUQSj+++/oq2jeqSOm1aQhZ/TvHixV0rJk6Exo2hfHkOfRJKTNp0zgYVSUTc3NwYPXo0/fv3Z+rUqTRcu5Zr48eT5usv8WlaD7dzZ52OKJLg4lKmtgIFjTE+xpiUQCNg+f2NJeKsVUtD6dyyIXny+RCy+HPy+OR3PWtv8GDo2BFq1oTPP1eREomFMYZ33nmHDz/8kEWLFlFz0SL2fzgezx3byN+gFinC/3A6okiCumOZstZGAZ2Bz4FfgAXW2p+NMR2NMR0BjDHZjTFhwOvA28aYMGOM/pWRh9LsaRPo3aUtpcr4MW3hSrI+mh1iYqBHD+jb1zWz+ZIl4OXldFSRRK1bt27MnDmTdevW4T95LDtGjifl4UPkD6qOx5FDTscTSTBxmrTTWrvKWlvIWlvAWvve9WUTrLUTrn990lrrba1NZ63NcP1rPVNAHipRUVEM6f8mQwf05pkXazFh1mLSpksP167h/carMHIkdO4Mn3yiCTlF4qh58+asWLGCI4cOUnPwAL5+fwTuZ89QILA67NzpdDyRBKEZ0EWAC+f/4rXWjZkzfRLN2nZixMQQHkmVCrdzZ/FpVo+MoXMhOBhGjwY3/bURuRvVq1dn5uLVWGup06cHob0GuP4eVawIq1c7HU8k3vSvgiR7J44dpUVQdTZt+Iq3B4+k54DBuLu743HkEAUCX8RryyaOjhwHAwboocUi96hw0RLMXr6WPPl8eLlfD0Y2bwsFC0Lt2jB+vNPxROJFZUqStZ3bt9CkzrOcPB7GuJBQGjZrDYDnD1t5rO5zpAj/g0OzF3O2QROHk4o8/B7NkZPpoauoUPU5en8wkC6lShFdvTp06gRvvAHR0U5HFLknKlOSLFlrmTdjMq0a1MLT04tPlq6hfOVqAKRfspD8DesQnSYtvy9bw8XylRxOK5J0pE6Tlo+mzqHNq68zZsYMqpw+zYU2bVz3JAYGwjk9D1IePipTkuxERl6ib/eODO7Xk6erPMO8levJX7AwXLtGjuDe5HmtHZd8S/P78rVcLVDQ6bgiSY67uztde/dn4cKF7Ni1i4IrV3Lg9ddd90/5+cGePU5HFLkrKlOSrIQdPkTzgBdYuXgBr77Rh9FT55IuQwZShP+BT2N/skydwJ9tXuHg3GVEZ8rsdFyRJK1+/fps3ryZ1KlT8/jHH7OwY0fsuXOuQhUa6nQ8kThTmZJkY/WyRTSsUZkTx8IYO3MhHbq9iZubm+v+qJpV8dr5I0dGT+ZE8Pua+kDkASlevDhbt26lRo0aNBwzhpbFi3OtSBFo0AB69YKoKKcjityRypQkeefPn6dVq1b06tyGAoUeZ/7qr6lY7TmIiSHr2A8pUK8GMY88wu/L13AusIHTcUWSnYwZM7J06VJGjx7NvI0bKXTsGMfr1oUPPoCqVfEIO+J0RJH/pDIlSdq2bdsoXbo0ISEhdOjak+mhq8iVOy8pThzHp0kA2Ye8w7nqtflt5XouFynudFyRZMsYQ5cuXdi0aRMeadKQe8UKFgYEYH/6iYIvViT9p0ucjihyWypTkiRdvXqVgQMHUr58ea5cucK6det4tUdfUqRIQdovVlHwxYp4/bCNsGEfc3TcdGIyZHA6sogApUuXZvv27TRr1oyGS5dSx9ubszm9ydOpFbl6dsFcuuh0RJF/UZmSJOeHH37gySefZMCAATRo0ICdO3dSuXJl3M6dJVePzuRr04RrubzZv/przjRqpok4RRKZtGnTMmPGDJYuXcrWU6fw/m0fnz/1NBnnz6LgCxVJvWmj0xFF/kFlSpKMK1eu0LdvX/z8/IiIiGDZsmXMmTOHjBkzwooVFHq2PBlD5xL+and+X7pG0x6IJHL+/v78/PPPVK3pT/Xvv6NlvgJcvXqF/A3rkLNvD9wunHc6ogj8r717D66qvNc4/v3tWy6GkARKahIIYMKtiCKKRSKgaBARUahVqqXlMKf1jNYeaota21JbRW2tVmZ6WrXNqXrA6gQHUEFluAhUQS5FgUQ4xRDKIUASroEkOzv7PX+sSFHskBBwkfB8ZtasvdZeWfu3eZPNs9flfVGYknbi7bffZsCAAcyYMYNJkyaxefNmbrzxRqiuhjvugLFjiaWn8/f5i9lz/3RcQoLfJYtIM3Tu3Jlf/e5PPPGH53n98EGydlew4CsXkvHin8i/Zggp7yzxu0QRhSlp23bs2MGECRMYNWoU8XicN998k6KiItJTU+HZZ6F3b3j5Zfj5z9n2xjLqBlzsd8kicgoKx4xj/rI1jPnmFG4o2cT1aWkcjjXS447xdP2PyYR37fS7RDmHKUxJm1RbW8uMGTPo06cPCxcu5OGHH2bTpk2MGjUKVq2Cyy+H734XvvIVWL8epk/HRSJ+ly0irZDaMY0HH3mCWfMXsyMnl+w9FTyT05WUt9+g14jB8OijUF/vd5lyDlKYkjalsbGRoqIievXqxYMPPsjo0aMpLS3lwQcfJKGqCiZPhiFDoKICZs+GZcvgwgv9LltETqP+F1/CrNcW88NHfsMDtbXkRaOsSkuHH//Y+3ufPx+c87tMOYcoTEmb4Jxj2aKFDBgwgClTppCVlcXSpUuZM2cOuR06eD0l5+XBrFne4y1bYOJE3akn0k4Fg0FunTSFN1as59q77+XqfdXcEA6zt7oaxo2DK6+ElSv9LlPOEQpTclZzzrF88Vt886ZC7vm3iTQ0NFBcXMyqVasYMXgwPPYYXHAB/PrX3vATW7d661JS/C5dRL4AKR1Suee+n/La8rV0mjiRnH37uCcS4dCGDV6gGjsWPvzQ7zKlnVOYkrNSPB5n0YJ53Dp6GHd/+1aq9u7mp48+xebNm5kwciQ2Ywbk5sIDAwGFwgAADZNJREFUD0BBAXzwAbzwAnTv7nfpIuKDL2fl8Pzzz/NBSQnVX/saWUeP8rNwmNpFi+Cii+Dmm+H99/0uU9ophSk5qxw5coRnnnmG/v37c+93v0VtbS2/fPK/eG35eiaOGkP4Zz+Dbt3gJz+Byy7zDuO/9pquixIRAPr27cusWbNYV1pK2a230jUa5ZeBADULFng3plxzDSxZomuq5LRSmJKzQnl5OdOmTSMnJ4c777yTpKQkfvW7IuYuWc1tvfrSY9o99B5yITz+OIwe7d2ht2ABDB3qd+kichbq3bs3L774Iqu2bqXyrrvIC4X4IVC9YgWMHIkbNAiKiqC21u9SpR1QmBLfRKNRXn31VcaOHUvPnj158sknufbaa1m5ciVr//pXbmuM0evmUeTdcBWpC+az/5bb4aOPvH6jBg70u3wRaQPy8vKYOXMmpTt30uXxxxncuTP/DmzZuBGmTKExKwumTYOyMr9LlTZMYUq+cB9++CFTp04lOzubCRMmsH79eu677z7KPv6YV+69l6GzZmHnn0/Xe75D8OABdj30GB+tKWHXo09Cr15+ly8ibVB6ejrTpk3jo+3bGT1nDlNHjmQE8OqBAzQ+8QT07Els2DD485+hpsbnaqWtCfldgJwbSkpKKC4upri4mI0bNxIOhxk3bhyTJ0+msHt3QnPnwqhR3pGnxEQYP56yMbdQUzAcAsr8InJ6hMNhxo8fz/jx4ykvL6eoqIhfP/cchRUVfHvlSvJWrCB2553YhAkEb78dRo4EDT8lJ6EwJWdEPB5nw4YNzJs3j+LiYkpKSjAzCgoKmPn009xx8cWkL1ni9Qm1aZP3Q0OHwnPPeV0cdOxIzc6D/r4JEWnXcnNzeeihh5g+fTrvvvsuT82ezfaXXuLGAwe4dfZs0mbPJpqUhBszhoRvfMP7wifyORSm5LSprq5m0aJFLFy4kLfeeos9e/ZgZgwbNoxnfvMbJmRk0GntWpg5E7Zt8zrUvPJK+O1vYfx46NrV77cgIuegQCBAQUEBBQUFxGbOZMmSJdw3ezaH585l5MGD3FRcTEJxMdFwmE4XDyJ+w00cuepaot17qmNgARSmpBWqqqpYsWIFy5cvZ/ny5WzYsIF4PE5GRgY3jBzJxPx8hjpHh/feg/vvh4YGSE6Gq66CH/0IbroJMjP9fhsiIseEQiEKCwspLCwkHo+zdu1aZs6bx+6XX+bCbdu4bs0q8tasgun3U52ewcGhw4hPvIXAsGGQk+N3+eIThSlplmg0yqZNm1i3bh1r165l5cqVlJSUAJCYmMj1Awfyw1tuYXgoxPnbtmFz53rhCbwO86ZO9Q6RDx2q6w9EpE0IBAIMHjyYwYMHwyOPsGvXLl6Y8wblb71B+rsruHz/Pq5+fS6B1+cCsL9jR44OHEjq9dfTobAQ+vWDcNjndyFfBIUpOUFVVRWlpaWUlJSwfv161q1bx8aNG4lGoxhwUUoKt+flMWLECPrW1ZFWVoa99x689x5EInDppV54KiiAK66ATp38fksiIq2WlZXFmJu/Djd/HYBdO3cwc8Uy4u8uIbJ6NT0rKihYtowOy5bBtGlEAwEqMzOp79ePpKFD+VJhIaGLLtJwV+2QwtQ56ujRo5SXl7N9+3a2bNlCaWnpsamqqopUIA+4JDmZ73fpwoAePcitrSV1714CNTWwYQOEQt43r+uu8/p9GjTIC1KJiX6/PRGRMy4rpxs3TpzEhT/6HgA1NTWsX7eO1998k6NLl5KydSu5FRVcUlFBxuLF8ItfAFCdlMT+L3+Zhp49CQ8YQPqQIWRcdhmWk+N9rkqb06xWM7PrgKeBIPBH59xjn3nemp6/HjgKfNs5t/401yrNVFNTw+7du9m9ezd79uyhoqKCHTt2sH37draXlVFVVkaguppMoCvQDRickMCk5GRygS8lJpJQV+ft7OhR2LEDevSA/v2hTx/o29cLT/3765SdiEiTlJQUhg0fzrDhw4+tq62tpbSkhKXvvMPh5ctxJSWkVVSQU1ZG77IyUhcvhqeeAiCGF7QOpKVR26UL8W7dCF9wAR169SKjXz865OdjXboocJ2FTtoiZhYEfgdcC+wE1pjZfOdcyXGbjQbym6bLgd83zeUUxeNx6upqqT1yhEOHDnJkZ4z9+/f/c9q3j8OVlUT37qWhqoqGykqilZXE9+0job6eNCANyARygcvNyAoG6RyPkxCPn/B6LjkZ69bNGzw4N9cb/65nT+jdG/LyFJpERE5BUlISlwwaxCWDBsEPfnBsfUNDA+Xbt7Pu/fc5tHo1taWlBMrLSamqIqOqiuyKCrI/+OCEnrXjwP5QiAMJCdSkpFDfsSPxtDQCGRkEOncm2KkT4S5diGRmkpSVRXJ2NinZ2SSkp6vPvjOoOfF2MPB359zHAGb2F2AccHyYGge84JxzwCozSzOz851zFae94maKx+NE6+tpjMWINzbS2NBAPBbz5o2NxGOxY8suHvfmTdt9ajkWwx23fTwWw8Xjx362ob6ehmiUWDRKY12dN9XX01hbS7y+HheNevNPHkejuPr6Y9se/1ywvp5QNEqooYFIYyPJQDLQGUgEejYtJwMdgMjJ/g2CQRozMiAzk1BWFpaZ6d09l5kJXbp4U04O5OZiHTqc0fYQEZF/CofD5OXnk5efD7fffsLz0WiUf5SXU7lhAwe3bOHItm3Ed+0iWFlJZP9+kg8dIvXgQTIrK+kYj5PWjNc8CtQGAtQFg9QFg9SHQkTDYRoiEWKRCLGEBFxCAi4SwRISvCkxERcOe1+oP1mXkACRCJaYSCAxkWAkQiAcJhiJnDBZKPSpKRAOQzCIhcMEwuFj6ywYJBAKEQgGCQSDYPap5WNTKIQFAv+cmrY1n7uoaE6Yygb+cdzyTk486vR522QDvoWpra+8Qp+JE/16+VNSHwzSEA5Tn5h07Je7MSGBeFIyyWmpBDt0IJSaSqRjR4KdOnkXdnfsCGlpnzsPnHceAfWBIiLS5kQiEXLz88nNzz/pto2NjVRVVXGgvJzaXbuoq6gguncvscpK4tXVxA8cwB0+jKupwY4eJVhfT7i+nkg0SiQWI6WujsRYjMR4nHA8Ttg5EvC+xLcV7/Trx/DNm317/eaEqc/739idwjaY2XeA7zQt1pjZlma8/rmjsdGbAI74WklnoMrXCqQ11H5tl9qu7VLb+amkpDUdqDa37XL/1RPNCVM78a5T/kQOsOsUtsE59yzwbDNeU3xkZmudc5f6XYecGrVf26W2a7vUdm3X6Wi75lyNtgbIN7MeZhYBbgPmf2ab+cAk83wVOOjn9VIiIiIiX5STHplyzsXM7G7gLbyuEYqcc5vN7M6m5/8ALMDrFuHveNe4TT5zJYuIiIicPZrVWYVzbgFeYDp+3R+Oe+yAu05vaeIjnYpt29R+bZfaru1S27VdrW4783KQiIiIiJwK9eAlIiIi0goKU3KMmXU1s6VmVmpmm83s+37XJC1jZkEz+5uZve53LdJ8TR0dF5vZR01/f0P8rkmax8ymNn1ebjKzl8ysLXXPdM4xsyIz22tmm45bl2Fmi8zsf5vm6S3dr8KUHC8G3Ouc6wt8FbjLzPr5XJO0zPeBUr+LkBZ7GnjTOdcHuAi1YZtgZtnAPcClzrn+eDdp3eZvVXISfwau+8y6+4HFzrl8YHHTcosoTMkxzrmKTwaods4dxvtAz/a3KmkuM8sBxgB/9LsWaT4zSwWGAX8CcM5FnXMH/K1KWiAEJJlZCG+0rxP6WJSzh3NuObDvM6vHAc83PX4euKml+1WYks9lZt2BgcBqfyuRFvgtMA1vLFRpO3oClcB/N52i/aOZned3UXJyzrn/A54AduANn3bQOfe2v1XJKcj8pG/MpnmXlu5AYUpOYGYpwBzgP51zh/yuR07OzG4A9jrn1vldi7RYCLgE+L1zbiDeYFItPs0gX7yma2vGAT2ALOA8M7vD36rEDwpT8ilmFsYLUrOcc6/6XY8021DgRjPbDvwFuNrM/sffkqSZdgI7nXOfHAUuxgtXcva7BihzzlU65xqAV4ErfK5JWm6PmZ0P0DTf29IdKEzJMWZmeNdtlDrnnvS7Hmk+59wDzrkc51x3vAtglzjn9A25DXDO7Qb+YWa9m1aNBEp8LEmabwfwVTNLbvr8HIluHmiL5gPfanr8LWBeS3fQrB7Q5ZwxFPgmsNHMNjSt+3FTD/gicuZ8D5jVNP7px2hIrjbBObfazIqB9Xh3Q/8N9YR+VjOzl4ARQGcz2wlMBx4DXjGzKXgB+ZYW71c9oIuIiIicOp3mExEREWkFhSkRERGRVlCYEhEREWkFhSkRERGRVlCYEhEREWkFhSkRERGRVlCYEhEREWkFhSkRaRfM7DIz+9DMEs3sPDPbbGb9/a5LRNo/ddopIu2GmT0MJAJJeOPdPepzSSJyDlCYEpF2o2k4ljVAHXCFc67R55JE5Byg03wi0p5kAClAB7wjVCIiZ5yOTIlIu2Fm84G/AD2A851zd/tckoicA0J+FyAicjqY2SQg5pybbWZB4F0zu9o5t8Tv2kSkfdORKREREZFW0DVTIiIiIq2gMCUiIiLSCgpTIiIiIq2gMCUiIiLSCgpTIiIiIq2gMCUiIiLSCgpTIiIiIq2gMCUiIiLSCv8PvzXddU6gVwIAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"\n",
"# traceでパラメータを取得\n",
"trace = poutine.trace(model).get_trace()\n",
"m = trace.nodes['m']['value'].item()\n",
"std = trace.nodes['std']['value'].item()\n",
"\n",
"# generate a pdf\n",
"estimated_dist = dist.Normal(m, std)\n",
"y = [estimated_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"# plot\n",
"plt.plot(x_range, y, c='k', label='ML estimated pdf')\n",
"plt.plot(x_range, true_y, c='r', label=r'true pdf')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"savefig(\"sampled-pdf\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"観測データobsのサンプリング."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAE9CAYAAAAvV+dfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dfZSVZb3/8fdXxDigEon5wKBgoiAPIoyoB0PNNEuXT9kSi9LSED3myX6Z9uvJOrbUlbHMlcghQ+2XiR5SQyNNDRU9WoAiDypqSjKhYpQoAifR7++P2cwZhj2wh3uYPQPv11os9r7u677v794bhg/Xde/rjsxEkiRJm2e7ahcgSZLUkRmmJEmSCjBMSZIkFWCYkiRJKsAwJUmSVIBhSpIkqYDtq3Xinj17Zp8+fap1ekmSpIrNmTPnb5m5a7ltVQtTffr0Yfbs2dU6vSRJUsUi4i/NbXOaT5IkqQDDlCRJUgGGKUmSpAKqds2UJEntwbvvvktdXR1r1qypdilqB7p06UJNTQ2dO3eueB/DlCRpm1ZXV8dOO+1Enz59iIhql6MqykyWL19OXV0dffv2rXg/p/kkSdu0NWvWsMsuuxikRESwyy67tHiU0jAlSdrmGaS0zub8WTBMSZIkFWCYkiRJKsAwJUlSO7V48WIGDRpU7TI2cNlll3H11VcX7vPmm28yYcKEzarh/fff54QTTmDw4MEsWbKkon2+9rWvMWDAAGbMmLFZ52yO3+aTJKmR+XUrWvV4g2u6t+rxishMMpPttmsfYynrwtT555/f4n3nz5/PsmXLmD9/fsX7jB8/nhEjRjB58mSOOuqoFp+zOe3j3ZSkRubXrdjgl7S1Gz9+PIMGDWLQoEFcc801De1r167lzDPPZMiQIZx22mmsWrWKd955h+OPP54DDzyQQYMGcdtttwHwy1/+khEjRjB06FDOPfdc3nvvPRYvXsyAAQM4//zzGTZsGGefffZ6o0GXXXYZP/7xj5vdf50f/vCH7L///nz84x9n0aJFZV9Dc31OPvlkhg8fzsCBA5k0aVJD+6WXXsqf//xnhg4dysUXX9xsv3LefPNNPvzhD6/XdtRRR3H//fcD8O1vf5sLL7xwg/1233133nzzzY0eu6UcmZIkqcrmzJnDjTfeyB//+Ecyk0MOOYQjjjiCHj16sGjRIn7+858zcuRIvvSlLzFhwgT69u3LnnvuyW9/+1sAVqxYwbPPPsttt93GY489RufOnTn//PO55ZZbGDVqFIsWLeLGG29kwoQJPPXUU3z1q19tGA26/fbbuffee5vd/wtf+AJz5sxhypQpPPXUU6xdu5Zhw4YxfPjwDV5Dc30mT57Mhz70IVavXs3BBx/Mpz/9aXbZZReuvPJKFixYwNy5cwH4+9//XrZfOe+9994GI2zf//73+e53v8uyZct46qmnmDZt2gb7bbfdduuFxNbgyJQkSVX26KOPcsopp9CtWzd23HFHTj31VGbOnAlA7969GTlyJABjxozh0UcfZfDgwTzwwANccsklzJw5k+7du/Pggw8yZ84cDj74YIYOHcqDDz7ISy+9BMDee+/NoYceCsBBBx3EsmXLWLp0KU8//TQ9evRgr7322uj+M2fO5JRTTqFr167svPPOnHjiiRu8ho31ufbaaznwwAM59NBDWbJkCS+88ELZ96HSfgBz586lpqZmvbZRo0aRmYwfP54pU6bQqVMnAL7zne809OnVqxfPP/98q65478iUJElVlpnNbmu67lFEsN9++zFnzhymT5/ON7/5TY499lh69OjBmWeeyRVXXLFe/8WLF9OtW7f12k477TSmTp3Ka6+9xujRoxtqKLd/c3VU2uehhx7igQce4PHHH6dr164ceeSRZYNMpf0APvvZz3LPPffw0EMPrdc+f/58Xn31VXr27MlOO+0EwGuvvcbatWsb+nzkIx/hgAMOaAiQgwcP3uTr2hRHpiRJqrJRo0Zx1113NVwPdeedd/LRj34UgFdeeYXHH38cgFtvvZXDDz+cpUuX0rVrV8aMGcPXv/51nnzySY4++mimTp3KsmXLgPops7/85S9lzzd69GimTJnC1KlTOe200wA2uv+oUaO48847Wb16NW+//TZ333132ddQrs+KFSvo0aMHXbt25bnnnuOJJ55o2GennXbi7bff3mS/pn71q1/xox/9aL1ry1599VU+97nP8Zvf/IZu3bpx3333AfDUU08xdOjQhn5PP/00L730En/9619bJUiBI1OSJFXdsGHDOOussxgxYgQA55xzDgcddFDDxeM333wz5557Lv369eO8885j5syZXHzxxWy33XZ07tyZ66+/ngMOOIDLL7+cY489lvfff5/OnTtz3XXXsfvuu29wvoEDB/L222/Tq1cv9thjD4Bm9997770ZNmwYp59+OkOHDmXvvfduCHpNX0O5PscddxwTJ05kyJAh7L///g3TjQC77LILI0eOZNCgQRxzzDGsXbu2bL9y9t9//4bAtmrVKk499VR+/OMfM2DAAL7zne9wySWX8IlPfIK5c+dy6qmnNuz3j3/8gz59+rToRsabEhsbWtySamtrc/bs2VU5t6T2rdy399rT18u1dXn22WcZMGBAtctQC/3pT3/iK1/5Ck888cRGpyDPPvtsfvaznzVcrH777bfz61//uuEbkOWU+zMREXMys7Zcf6f5JElShzN06FB69+7N0KFDN7po589//vOGIPW1r32Nq666inPOOadVa3GaT5IkdTg77LADU6dObdE+48eP3yK1ODIlSZJUgGFKkiSpAMOUJElSAYYpSZKkAgxTkiRJBRimJEmSCjBMSZK0DTnyyCNpyaLZDz30ECeccEKrHPeaa65h1apVFZ/7sssuq7hvNbnOlCRJjc2Z07rHGz68dY/XgV1zzTWMGTOGrl27brTfo48+ykUXXcSSJUuYPn06V155JR/72MfaqMqWc2RKkqQqeueddzj++OM58MADGTRoUMNtTn7wgx9w8MEHM2jQIMaOHcu6278deeSRXHTRRYwaNYoBAwYwa9YsTj31VPr168e3v/1tABYvXkz//v0588wzGTJkCKeddlrZEaHf//73HHbYYQwbNozPfOYzrFy5EoB7772X/v37c/jhh3PHHXeUrXv16tWMHj2aIUOGcPrpp7N69eqGbeeddx61tbUMHDiQ733vewBce+21LF26lKOOOoqjjjqq2X5Qv1L5FVdcwbhx47j//vvZd999i77NW5RhSpKkKrr33nvZc889efrpp1mwYAHHHXccABdccAGzZs1iwYIFrF69mnvuuadhnx122IFHHnmEcePGcdJJJ3HdddexYMECbrrpJpYvXw7AokWLGDt2LPPmzWPnnXdmwoQJ6533b3/7G5dffjkPPPAATz75JLW1tYwfP541a9bw5S9/mbvvvpuZM2fy2muvla37+uuvp2vXrsybN49vfetbzGk0ovfDH/6Q2bNnM2/ePB5++GHmzZvHhRdeyJ577smMGTOYMWNGs/3Wvb515+3evTt77bVXK73bW0ZFYSoijouIRRHxYkRc2kyfIyNibkQsjIiHW7dMSZK2ToMHD+aBBx7gkksuYebMmXTvXn9T7xkzZnDIIYcwePBg/vCHP7Bw4cKGfU488cSGfQcOHMgee+zBBz7wAfbZZ5+G+9T17t2bkSNHAjBmzBgeffTR9c77xBNP8MwzzzBy5EiGDh3KzTffzF/+8heee+45+vbtS79+/YgIxowZU7buRx55pGHbkCFDGDJkSMO222+/nWHDhnHQQQexcOFCnnnmmbLHaK7fpEmTuO2227j22ms544wzWLx4cUvf1ja1yWumIqITcB1wDFAHzIqIaZn5TKM+HwQmAMdl5isR8eEtVbAkSVuT/fbbjzlz5jB9+nS++c1vcuyxx/KNb3yD888/n9mzZ9O7d28uu+wy1qxZ07DPBz7wAQC22267hsfrnq9duxaAiFjvPE2fZybHHHMMt95663rtc+fO3aBvc8r1e/nll7n66quZNWsWPXr04Kyzzlqv9kr6HXDAAdx9991861vfolevXpx99tk8+OCDFdVUDZWMTI0AXszMlzLzn8AU4KQmfT4L3JGZrwBk5rLWLVOSpK3T0qVL6dq1K2PGjOHrX/86Tz75ZEOo6NmzJytXrmzxDX0BXnnlFR5//HEAbr31Vg4//PD1th966KE89thjvPjiiwCsWrWK559/nv79+/Pyyy/z5z//uWHfckaNGsUtt9wCwIIFCxqm6N566y26detG9+7def311/nd737XsM9OO+3E22+/vcl+CxYsAKBz584MGzasYZ/2qpJv8/UCljR6Xgcc0qTPfkDniHgI2An4SWb+oumBImIsMBZo9/OfkiS1hfnz53PxxRez3Xbb0blzZ66//no++MEP8uUvf5nBgwfTp08fDj744BYfd8CAAdx8882ce+659OvXj/POO2+97bvuuis33XQTZ5xxBv/zP/8DwOWXX85+++3HpEmTOP744+nZsyeHH354Q7hp7LzzzuOLX/wiQ4YMYejQoYwYMQKAAw88kIMOOoiBAweyzz77NEw1AowdO5ZPfvKT7LHHHsyYMaPZfhMmTGDu3LksWbKEu+66i2uuuabFr78txbpvBzTbIeIzwCcy85zS888DIzLzK436/BSoBY4G/gV4HDg+M59v7ri1tbXZknUuJG075tet2KBtcE33KlSibcGzzz7LgAEDql1Gq1q8eDEnnHBC2RDUkVx22WVVWWuq3J+JiJiTmbXl+lcy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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"obs = []\n",
"for _ in range(5000):\n",
" trace = poutine.trace(model).get_trace()\n",
" obs.append(trace.nodes['obs']['value'].item())\n",
"\n",
"plt.xlabel('posterior samples')\n",
"\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"plt.hist(obs, range=(x_min, x_max), bins=100, alpha=0.2, density=True, color='r', label=r'sampled data$')\n",
"\n",
"plt.legend()\n",
"savefig(\"pdf-obs\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ベータ分布の最尤推定"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"保存先設定"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"experiment_name = \"beta\"\n",
"\n",
"file_format = \"png\" # \"pdf\"\n",
"savedir = \"./20200627_pyro_5th_trial/\"\n",
"os.makedirs(savedir, exist_ok=True)\n",
"\n",
"def savefig(desc):\n",
" fig.savefig(os.path.join(savedir, '{0}_{1}.{2}'.format(\n",
" experiment_name, desc, file_format)), bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真の$\\alpha$と$\\beta$をランダムに作成"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"alpha = 0.2847422647809694 beta = 1.7152165622510307\n"
]
},
{
"data": {
"text/plain": [
"(1, 0)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"true_alpha = np.random.rand() * 10\n",
"true_beta = np.random.rand() * 10\n",
"print('alpha =', true_alpha, 'beta =', true_beta)\n",
"\n",
"x_range = np.arange(0, 1, 0.01)\n",
"x_max = 1\n",
"x_min = 0\n",
"x_max, x_min"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真の分布からデータをサンプリング.最尤推定の解析解を計算."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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h3XHHXfUtN+xY4e6desW6LlxbREBCgCAONl/DpQUfibb/PnzNWzYMN1888067bTTVF1drdTUVN15553q27ev8vLyNHHiRA0fPlynnnqqQqGQRo4cqcGDB2vChAkHrPu0007TokWLdN555+mss87S4MGDNWvWLJWXl+uKK67Q7bffrurqan388cfq0qVLTb/CwkKVlpZqwIAB6tq1q2bPnq38/Pya5a+99prOOOOMlvkBJTACFAAAcVLXPZqmT5+u6dOnR1328MMPx7Tuyy67THPmzNFDDz2kZcuWRW3z4YcfaurUqerQoUPNvOXLl+uhhx7S8OHD69x+fV8vtgdt7jYGAABAGjVqlE488cTD3khz+PDhmjNnzgHz1qxZoyFDhkRtX1FRocmTJ2vw4MFNWmtrxAgUAABt1EUXXRS4zxdffFHnsrS0NM2YMaMxJbUZjEABAAAERIACAAAIiAAFAAAQEAEKAAAgIAIUAABAQAQoAACAgAhQAAAAARGgAAAAAiJAAQCQQDZs2FDnY1Ti6cYbb9Tvfve7RrfZvXu35s6d26AaqqurdeaZZ2rEiBGHveFnbT/72c80dOhQvfbaaw3aZl24EzkAoN1bubGoSdc3onenJl1fY7i73F1JSYkxZrI/QM2ePTtw35UrV2rr1q1auXJlzH3mzJmj8ePHa968eTrxxBMDb7MuifHTBACgHZozZ46GDx+u4cOH6/bbb6+ZHwqFNHPmTI0cOVLTpk3Tvn37tHfvXn3nO99Rfn6+hg8frscee0yS9Oc//1njx49XQUGBZs2apaqqKm3YsEFDhw7V7NmzNXr0aF188cUHjPrceOONuu222+rsv9+vf/1rDR48WKeccorWrl0bdR/qajN58mSNGTNGw4YN0z333FMz/9prr9Unn3yigoICXX311XW2i2b37t3q3r37AfNOPPFEvfTSS5Kk66+/Xj/5yU8O6XfEEUdo9+7dh113UIxAAQAQB8uWLdP999+vJUuWyN117LHH6vjjj1dubq7Wrl2r++67TxMnTtRFF12kuXPnqn///jryyCP1t7/9TZJUVFSk1atX67HHHtNbb72l1NRUzZ49WwsWLNCkSZO0du1a3X///Zo7d66WL1+uK664ombU5/HHH9cLL7xQZ/8ZM2Zo2bJlevTRR7V8+XKFQiGNHj1aY8aMOWQf6mozb948denS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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# sampling\n",
"target_dist = dist.Beta(true_alpha, true_beta)\n",
"data = torch.tensor([target_dist() for i in range(100)])\n",
"true_y = [target_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(x_range, true_y, c='k', label=r'Beta($\\alpha, \\beta$)')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, density=True, alpha=0.2, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"plt.title(r'$\\alpha$={0:.3f} $\\beta$={1:.3f}'.format(true_alpha, true_beta))\n",
"\n",
"plt.ylim(0,)\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"plt.savefig('obs-data')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"モデル`model`\n",
"- $p_\\theta(X)$\n",
"- $X = \\{x_1, \\ldots, x_N \\}$は観測されたデータ\n",
"- パラメータは$\\theta = \\{ \\alpha, \\beta \\}$\n",
" - $x_i \\sim \\mathrm{Beta}(\\alpha, \\beta)$\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 124.724x110.079 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pgm = daft.PGM()\n",
"\n",
"pgm.add_node(\"xn\", r\"$x_n$\", 2, 1, observed=True)\n",
"pgm.add_node(\"alpha\", r\"$\\alpha$\", 1.5, 2, fixed=True)\n",
"pgm.add_node(\"beta\", r\"$\\beta$\", 2.5, 2, fixed=True)\n",
"pgm.add_edge(\"alpha\", \"xn\")\n",
"pgm.add_edge(\"beta\", \"xn\")\n",
"pgm.add_plate([1, 0.5, 2, 1], label=r\"$n = 1, \\ldots, N$\", shift=-0.2)\n",
"\n",
"pgm.show() # render and show"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"def model(data=None):\n",
" \n",
" alpha = pyro.param(\"alpha\", torch.tensor(1.0), constraint=constraints.positive)\n",
"\n",
" beta = pyro.param(\"beta\", torch.tensor(1.0), constraint=constraints.positive)\n",
"\n",
" with pyro.plate('observe_data'):\n",
" pyro.sample('obs', dist.Beta(alpha, beta), obs=data) # vector-plate version"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"guideは点推定のAutoDeltaを使用"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"guide = AutoDelta(\n",
" poutine.block(model, hide=['obs']),\n",
" init_loc_fn=init_to_feasible\n",
")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"準備"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"adam_params = {\"lr\": 0.005, \"betas\": (0.95, 0.999)}\n",
"optimizer = Adam(adam_params)\n",
"\n",
"\n",
"svi = SVI(model=model,\n",
" guide=guide,\n",
" optim=optimizer,\n",
" loss=Trace_ELBO()\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"パラメータの初期化とhookの設定.こうするとすべてのパラメータの途中の値を保存できる."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tracing alpha <class 'torch.Tensor'> tensor(0., requires_grad=True)\n",
"tracing beta <class 'torch.Tensor'> tensor(0., requires_grad=True)\n"
]
}
],
"source": [
"pyro.clear_param_store()\n",
"\n",
"svi.loss(model, guide, data)\n",
"\n",
"trace_dic = defaultdict(list)\n",
"for name, value in pyro.get_param_store().named_parameters():\n",
" print('tracing', name, type(value), value)\n",
" value.register_hook(lambda grad, name=name: trace_dic[name].append(pyro.param(name).item()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"収束するまで学習"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"scrolled": true,
"tags": []
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8546aa24510345efa16868674bf11da6",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=5000.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"num_steps = 5000\n",
"\n",
"with tqdm(range(num_steps)) as pbar:\n",
" for i,p in enumerate(pbar):\n",
"\n",
" loss = svi.step(data)\n",
"\n",
" trace_dic['loss'].append(loss)\n",
"\n",
" if i > 100 and np.isclose(trace_dic['loss'][-100], loss):\n",
" break\n",
" \n",
" if i % 10 == 0:\n",
" pbar.set_postfix(loss=loss)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"lossとパラメータの推移をプロット"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABDAAAAFgCAYAAABNIolGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeXzddZ32/+t9TvZ935Om6ZIu6QYplB3K1iIIyq2IDqMO3sgtzujoOPpzNh3vuccZZ5xxRh0GcQMXBgWh1QLKImUp0L1Nmpa2aZu1TdI0e7Occz6/P5LWELqkbU6+WV7Px+M8knO+n6RXoOk5ufJZzDknAAAAAACAiczndQAAAAAAAICzocAAAAAAAAATHgUGAAAAAACY8CgwAAAAAADAhEeBAQAAAAAAJrwIrwOcq4yMDFdcXOx1DAAAMGTz5s0tzrlMr3OcL15bAAAwsZzutcWkKzCKi4u1adMmr2MAAIAhZnbI6wwXgtcWAABMLKd7bcESEgAAAAAAMOFRYAAAAAAAgAmPAgMAAAAAAEx4FBgAAAAAAGDCo8AAAAAAAAATHgUGAAAAAACY8CgwAAAAAADAhEeBAQAAAAAAJjwKDAAAAAAAMOFRYAAAAAAAgAkvbAWGmf3AzJrMrOI0183M/sPM9pnZDjO7KFxZAADA5GdmhWb2kplVmVmlmX3mNOOuNbNtQ2NeHu+cAAAgPMI5A+NHklad4fpqSXOGbvdJ+q8wZgEAAJNfQNLnnXPzJa2Q9ICZLRg+wMxSJH1X0nudcwslfWD8YwIAgHCICNcnds6tN7PiMwy5XdIjzjkn6Q0zSzGzXOdcY7gync4zOxv1vVeq9dh9lykqglU1AABMREOvERqH3u80sypJ+ZJ2DRv2YUlPOudqhsY1jXtQIAycc+o4HlDtsR7Vtvaovu24jvX0q/34gNqPB3S8P6BgyCnkpJBz8vtMcVF+xUVFKC7Kr+TYSGUlRiszMUaZidHKSY5RTlKM/D7z+ksDgFELW4ExCvmSaofdrxt67F0Fhpndp8FZGioqKhrzIP3BkLbUtGl/c5fm5yaN+ecHAABja+iXJMskvTni0lxJkWb2e0mJkr7lnHvkFB8f1tcWwIVq7uzTxoOtqqhvV0VDhyrr23W0u/8dY/w+U1JMhFLiohQb6ZffZ/L5TD6TgiGnumNB9fQF1N0fVEfvgJx7558RFeHTjLQ4FWfEa2ZGvGZnJmhBXpLmZCcoOsI/jl8tAIyOlwXGqeped4rH5Jx7SNJDklReXn7KMRdiwVBpUdXYQYEBAMAEZ2YJkp6Q9FnnXMeIyxGSLpZ0vaRYSRvM7A3n3NvDB4X7tQVwrgLBkN462KoXqpr02r4W7T7cKUmK8JnmZCfqunlZmpudoKK0OBWkxqkwNU5JsREyG90MikAwpNbufjV19qmps1eN7b06dLRHB1q6dbClWy/vaVZ/MCRJivSbZmclamFeksryklRenKZ5OYmK8DNTGYC3vCww6iQVDrtfIKnBiyAzM+IVFeFTVePI10AAAGAiMbNIDZYXP3XOPXmKIXWSWpxz3ZK6zWy9pCWS3j7FWMBTzjltPHhMT22r13MVh3W0u19RET4tL07VF24u1eWz0jU/N0kxkRc+GyLC71NWUoyykmIkJb/rejDkVNPao8qGdu1q6FBlQ4d+v6dZv9xcJ0mKj/JraVGKLp6RpuXFqVpWlKqEaC9/lAAwHXn5r84aSZ82s8ckXSqp3Yv9L6TBf9BLsxNV1djpxR8PAABGwQZ/1fx9SVXOuW+eZtjTkr5tZhGSojT4GuPfxikiMCrtxwf05JY6/ezNGu1t6lJclF8r52XplkW5urY0U3FR4/8S3e8zzRxaSnLr4ryTjze0HdemQ8e0+WCrNh06pm+/uFchNzh+WWGKrpidoavmZGhJYYoimaEBIMzC9q+jmf1c0rWSMsysTtLfSYqUJOfcg5LWSbpF0j5JPZI+Hq4sozE/N1HPVzXJOTfqqXgAAGBcXSHpHkk7zWzb0GNfllQkDb6+cM5VmdmzknZICkl62Dl3yiPdgfHW3Nmnh1+t1k82HFJ3f1BLClP0z3cu1q1Lcj0pLUYjLyVW702J1XuXDJYanb0D2lbbpjeqj+rVvS36jxf36lsv7FVCdIRWlKTpytkZunpupkoyEzxODmAqCucpJHef5bqT9EC4/vxzNT83SY9vqlNTZ5+yk2K8jgMAAEZwzr2qU++hNXLcNyR9I/yJgNFp7e7Xf7ywVz9/q0YDwZDeszhPn7y6RGX5717KMdElxkTqqjmZumpOpr5ws9TW068N+4/qlX0tenVvi56vGjz4pyQjXivnZen6+dkqL05ldgaAMTExq14PnNi8c1djBwUGAAAALlhfIKgfv35Q//niPvX0B3XnRfn6P9fO1syMeK+jjZmUuCitXpSr1YtyJUk1R3v00p4mvbC7SY9sOKSHXz2gpJgIXVOapevnZemauZlKjY/yODWAyYoCY8j8nD+cRHJdaZbHaQAAADCZvbK3WX/1qwrVtPZo5bwsffmWeZqdleh1rLArSo/TRy8v1kcvL1ZXX0Cv7m3Ri7uP6MXdTVq7vUE+k5YXp2lVWY5WleUoNznW68gAJhEKjCHJcZHKT4llI08AAACct7aefv3f31Tpl5vrVJIZr0fvvURXzcn0OpYnEqIjThYVoZDTjvp2Pb/riH6767C+unaXvrp2l5YUpmh1WY5WLcxR8RSamQIgPCgwhpmfm8RRqgAAADgvL+1p0hd+sUPHevr1wHWz9Kcr54zJEahTgc9nWlqYoqWFKfqLm0u1v7lLz1Yc1rMVh/X1Z3br68/s1rycxJOFR2l2IhvrA3gXCoxhFuQm6sXdR9Q7EOTJBgAAAKPSHwjpX367Rw+tr9a8nET9+E+Wa2He5NugczzNykzQA9fN1gPXzVbdsR49V3lEz1Y06lsv7NW/P79XxelxWlWWq9VlOVpckEyZAUASBcY7zM9NUshJbx/p1OKCFK/jAAAAYIKrO9ajB362Vdtr2/RHK4r01+9ZwC/CzlFBapzuvXKm7r1yppo6e/W7XUf0bMVhPfxKtR58eb/yU2K1qixHtyzK0bLCVPl8lBnAdEWBMcyJk0iqGjsoMAAAAHBGmw626pOPblZ/IKTvfuQi3TJ0EgfOX1ZijD5y6Qx95NIZauvp1+92HdEzFYf16IZD+v6rB5SdFK1VC3O0elGulhenyU+ZAUwrFBjDFKXFKT7Kz0aeAAAAOKNfbKrVl3+1UwWpcXr4o+WalZngdaQpJyUuSh8oL9QHygvV0TugF6ua9ExFox7bWKsfbzikjIQo3bQwR6vLcrSiJF2Rfp/XkQGEGQXGMD6fqTQnUbvYyBMAAACn4JzTv/x2j77z0n5dMTtd3/nwRUqJi/I61pSXFBOpO5bl645l+eruC+ilPU16puKwntpar5+9WaOUuEjdtCBbq8tydcXsDEVFUGYAUxEFxgjzc5O0ZnuDnHNsFgQAAICTgiGnv36qQj9/q0Z3X1Kov7+9jN/6eyA+OkK3Ls7TrYvz1DsQ1MtvN+uZnY1at/OwHt9Up8SYCN0wP1ury3J09dxM9iQBphAKjBHm5ybpp2/WqO7YcRWmxXkdBwAAABNAXyCoz/3Pdv1mZ6MeuG6W/uKmUn7ZNQHERPp188Ic3bwwR32BoF7b16J1Ow/rd7uO6Fdb6xUf5dd187J0y6JcXVuaqbgofvwBJjO+g0dYkPeHjTwpMAAAANA7ENQnH92sl99u1l/dMl//++oSryPhFKIj/Fo5L1sr52VrIBjShv1H9UxFo56rPKJf72hUTKRP187N0upFOVo5L0uJMZFeRwZwjigwRpiXkygzqaqxUzctzPE6DgAAADzUHwjp0z/bopffbtY/vn+R7r6kyOtIGIVIv09Xz83U1XMz9bXbQ3rrYKue2XlYz1YO3qL8Pl09N0Ory3J1w/xsJcdRZgCTAQXGCHFRESpOj1cVG3kCAABMa4FgSJ95bKuer2rS1+4oo7yYpCL8Pl0+K0OXz8rQV9+7UJtrjumZnYf1TEWjnq9qUoTPdMXsDK0uy9FNC3OUFs+mrMBERYFxCvNzE1XZQIEBAAAwXYVCTp//xXY9U3FYf3vrAt2zYobXkTAGfD7T8uI0LS9O01+/Z76217Xp2YrDWlfRqC89uVN/9VSFVpSkaVVZrm5emK2sxBivIwMYhgLjFObnJGndzsPq7B1gbRwAAMA09A/rqvT0tgb95apS/cmVM72OgzDw+UzLilK1rChVX1o9T5UNHXqmolHP7Dysv3mqQn/7dIWWz0jT6kWDm4TmpcR6HRmY9igwTqEsP1nS4D4Yl8xM8zgNAAAAxtPDr1Tr+68e0McuL9b/uWaW13EwDsxMZfnJKstP1l/cVKq3j3Rp3c5GPVtxWF9du0tfXbtL83OTdP28LF0/P0tLClLk83EKDTDeKDBOYWH+4EkkFfXtFBgAAADTyG92NOof1lVpdVmO/ubWBRyVOg2ZmUpzElWak6g/v3Gu9jd36fldR/RCVZO++/t9+vZL+5SREKXrSgfLjKvmZCo+mh+rgPHAd9opZCXGKDMxWhUN7V5HAQAAwDjZWnNMf/74NpXPSNW/3bVUfn7DDkmzMhM065oEffKaWWrr6dfv9zTrhd1NerbysH6xuU5Rfp9WzEo/OTujIDXO68jAlEWBcRpleUnaxUaeAAAA08KRjl598tHNyk6K1kP3lCsm0u91JExAKXFRumNZvu5Ylq+BYEibDh7TC1VH9OLuJv3dmkr93ZpKlWYn6prSTF09J1PLZ6YqOoK/S8BYocA4jbL8ZK3f26LegSBPYAAAAFNY70BQn3x0s7r6Anrk3suVyjGaGIVIv0+XzUrXZbPS9de3LlB1c5de3N2kF3c36UevHdRD66sVG+nXipI0XT03U9fMzdTMjHiWJQEXgALjNBbmJSsYctp9uFNLC1O8jgMAAIAwcM7pb56q0LbaNj34RxdpXk6S15EwSZVkJqgkM0GfuKpE3X0BvVF9VOvfbtb6vS16ae0uSVJBaqyunjs4O+OK2emceAicIwqM0ygbtpEnBQYAAMDU9PO3avWLzXX6s5Wztaos1+s4mCLioyN0/fxsXT8/W5JUc7RHL+9t1vq3m/X01nr97M0a+X2mi4pSdMXsDF1Wkq6lRSksNwHOggLjNPJTYpUSF6lKNvIEAACYkqoaO/TVtZW6ak6GPnvDXK/jYAorSo/TPekzdM+KGRoIhrTl0DG9/HazXtnbom+9sFf//vxexUT6tLw4TStK0nX5rHQtyk9WhN/ndXRgQqHAOA0z08K8JFXUs5EnAADAVNPdF9ADP9ui5NhI/dtdS+XjxBGMk0i/T5eWpOvSknT95SqpvWdAbx44qtf3H9Ub1Uf1jef2SJISoiN0ycw0XT4rXStK0rUgN4m/p5j2KDDOoCwvWT987aAGgiFF0n4CAABMCc45/fVTFTrY0q2ffmKFMhKivY6EaSw5LlI3LczRTQtzJEktXX16o/qoNuwfvL24u0mSlBQTofLiNJUXp2p5cZoWFySz5ATTDgXGGSzMT1Z/MKS9R7q0II8NnQAAAKaCJ7fU61db6/XnN8zVZbPSvY4DvENGQrRuXZynWxfnSZIOt/fq9f0teutAqzYebD1ZaERF+LSkIFnlxWlaXpyqi4vSlBzHpqCY2igwzqBsqLSoaGinwAAAwGNmVijpEUk5kkKSHnLOfes0Y5dLekPSXc65X45fSkx0dcd69JU1lbqkOE2fXjnb6zjAWeUkx+j9FxXo/RcVSJKOdvVp86Fj2nTomDYebNX31lfrv37vJEml2YkqL07VRUWpWlqUopnp8Sw7wZRCgXEGxenxio/yq7K+XSov9DoOAADTXUDS551zW8wsUdJmM/udc27X8EFm5pf0T5Ke8yIkJq5QyOkLv9ihkHP61w8ukZ8f7DAJpSdEv2PJyfH+oLbXtWnTwVZtPHhMa7Y16Kdv1kgaXHaypDBFS4duSwpTWDKFSY0C4wx8PtPCvGRVNLCRJwAAXnPONUpqHHq/08yqJOVL2jVi6J9KekLS8vFNiInuR68f1Ibqo/qnOxepMC3O6zjAmIiN8mtFyeBGn5IUDDntb+7Stpo2ba1t07baNn339/sVDA3O0ihIjT1ZaCwtTNGCvCTFRfFjISYH/qaexYK8JP3PxloFQ46WHgCACcLMiiUtk/TmiMfzJb1P0kqdocAws/sk3SdJRUVF4YqJCWRfU6f+6dndun5elj7IzFpMYX6faW52ouZmJ+qDywf/rvf0B1RR36Fttce0rbZNWw4d0693NEqSzKSSjHgtzEtWWX6SFuYla2FeklLiorz8MoBTosA4i7L8ZP3o9YM60NKl2VmJXscBAGDaM7MEDc6w+KxzbuQ0yX+X9EXnXNDs9L94cM49JOkhSSovL3fhyoqJIRAM6XOPb1dclF//eOcinenvBjAVxUUNHsl6ycy0k481dfRqe127KurbVdnQoY0HW7Vme8PJ6/kpsScLjRNvsxKj+f6BpygwzqIsf2gjz/oOCgwAADxmZpEaLC9+6px78hRDyiU9NvQCO0PSLWYWcM49NY4xMcH88LWD2lHXrm9/eJmyEmO8jgNMCFlJMbpxQYxuXJB98rGjXX3a1dihivoOVTYMFhvPVR45eT01LlJzsxNVmjN0y07UnOxEJcdy+gnGBwXGWczOTFB0hE+VDe26Y1m+13EAAJi2bLCV+L6kKufcN081xjk3c9j4H0n6NeXF9Fbb2qNv/u5t3TA/S+9ZlOt1HGBCS0+I1lVzMnXVnMyTj3X2DqiqsVOVDe16+0in9hzu1JNb6tXVFzg5Jjc55mShcaLgmJ2VoJhIvxdfBqYwCoyziPD7NC83SRX1bOQJAIDHrpB0j6SdZrZt6LEvSyqSJOfcg14Fw8TknNNfPVUhn0l/f3sZU9+B85AYE/mu5SfOOdW3HR8qNLr09pFO7T7cqdf3HVV/MCRpcG+NvORYlWTGa1ZmgmZlxqskM0ElmfHKSYrh+xHnJawFhpmtkvQtSX5JDzvnvj7ieqqkH0iaJalX0p845yrCmel8LMxL0trtDXLO8Y0GAIBHnHOvShr1E7Fz7mPhS4PJYM32Bq1/u1lfuW2B8lJivY4DTBlmpoLUOBWkxmnlvD8sQQkEQzp4tEd7DndqX1OXqlu6tL+5S49vqlVPf/DkuLgov0oy41WSMVholGQmaGZ6vIrS41iOgjMKW4ExdAb7dyTdKKlO0kYzWzPirPYvS9rmnHufmc0bGn99uDKdr8X5yfrZmzU6eLRHMzPivY4DAACAszjW3a+/X7tLSwpTdM9lxV7HAaaFCL9Ps7MSNDsr4R2PO+d0pKNP+5u7VN3cpf3N3drf3KXNh45p7Y4GuWFbKafERaooLU5FaXGakR439H68ZqTHKScpRj5OhpzWwjkD4xJJ+5xz1ZJkZo9Jul3vPKt9gaR/lCTn3G4zKzazbOfckXd9Ng8tLkiRJO2oa6PAAAAAmAS+/sxutR8f0E/ev0h+fuABPGVmykmOUU5yjK6YnfGOa70DQVU3d6umtVuHjvboUGuPalt7tKOuXc9UHFYw9Id2I8rvU0Fa7MmCIy8lVnkpscpPiVFeSqyyEmP4fp/iwllg5EuqHXa/TtKlI8Zsl/R+Sa+a2SWSZkgqkPSOAsPrs9rnZicoJtKn7bXtun0pG3kCAABMZNtr2/T45lrde8VMzc9N8joOgDOIifRrQV6SFuS9+3s1EAypoa1XNa09OtTarZrWHtUc7VFNa482Hzqmzt7AO8ZH+EzZSTHKT4lV3lCpMVhwDL7NTYlRYnQE2wJMYuEsME71t2LkOetfl/StoY24dkraKinwrg/y+Kz2CL9PC/OStaOubbz/aAAAAJyDUMjp79ZUKj0+Wp+5YY7XcQBcgAi/T0XpcSpKj9OVynjX9c7eATW296q+7bgaTt4G7286dEyHdzQqEHrnj4+xkX5lJ0UrKzFGWUnRyk6KOcX9GCVEc97FRBTO/yt1kgqH3S+Q1DB8gHOuQ9LHpZNHox0Yuk04iwuS9fO3ahQIhhTh93kdBwAAAKfwxJY6batt0798YIkSY9gMEJjKEmMilRgTqbnZiae8Hgw5NXf2nSw4GtuPq6mjT0c6+3Sko1cV9e16oapJxweC7/rYuCi/spNilJUYrczEaGUkRCs9PkppCVFKj49WRkKU0hOilRYfpaQYZnWMl3AWGBslzTGzmZLqJX1I0oeHDzCzFEk9zrl+SZ+QtH6o1JhwlhSk6IevHdTepi6mIgIAAExAHb0D+qdn92hZUYrev4xlv8B05/f9Ye+Ni2eknnKMc05dfQEd6ehTU0evmobKjSMdfTrS2aumoaLjaHf/u5asnBDpN6XHRys9IUpp8VHvKDvS4qKUEhep5NjBtylxkUqJjVJMpI/S4zyErcBwzgXM7NOSntPgMao/cM5Vmtn9Q9cflDRf0iNmFtTg5p73hivPhVpckCxpcCNPCgwAAICJ5z+e36uj3X36wcfKOakAwKiY2cmZHCNPTxmpLxBUa3e/jnb162h3v4529am1u18tXYPvH+0efPxAS7eOdvWfcmbHCVERPqXE/qHQSI6L/MP9uCglD72fGBOphOgIJcVEKCEmQokxkYqL9E/bf+PCurDHObdO0roRjz047P0NkibF4sTi9HglxkRoe1277lrudRoAAAAMV93cpR+9flB3lReePEEOAMZSdIRfucmxyk2OHdX4nv6A2noGBm/H+9XeM6C24yPuD71f29qjiqFrZyo+JMlMSoiOUGL0YKExWGxEvLPsiB58LCEmUvFRfsVG+RUfHaHYyMG3cVH+oVvEpDq5hZ1JRsnnMy0uYCNPAACAieifnt2t6AifPn9TqddRAECSFBcVobioCOWljK7wOKF3IKiO44NlR2fvgDp7A+rsDairL/CO+4OPDd5v7e7XoaM9J6/3BUKj/vOiI3wny4zhxUZclF9x0RGKi/QrLnrw8dhIv2KGbrGRfl1TmqmMhOhz/U9z3igwzsHighR9b321egeCion0ex0HAAAAkjYebNVzlUf0+RvnKjNx/F5IA0A4nCgIspJizvtz9AdCJwuPnv6gevoD6ukPqrsvqOMDgcG3/cF3XusP6Hh/UN39QR3vD6ixfXA2SHff4OM9A0EFR5zq8uSnLqfAmKiWFCQrEHKqauzQsqJTbwIDAACA8eOc0/9bV6XspGh94qoSr+MAwIQQFeFTWsTgpqJjaSAY0vGBoHoHgurtDykraXxLY84DPQcn1lPuqGv3OAkAAAAkad3Ow9pa06bP31iq2ChmyAJAOEX6fUqKiVRWYoyK0uPGfWUCBcY5yE2OUUZCtLazDwYAAIDn+gMh/fNzu1Wanag7Ly7wOg4AIMwoMM6BmWlJQTIzMAAAACaAn755SIeO9uhLt8ybVLvoAwDODwXGOVpckKL9zV3q6gt4HQUAAGDa6u4L6Dsv7dPls9J17dxMr+MAAMYBBcY5WlyYLOeknczCAAAA8MyPNxxUS1e/Pn9TqcyYfQEA0wEFxjlacnIjT/bBAAAA8EJH74D+++VqXVeaqYtncDIcAEwXFBjnKC0+SoVpsdpWS4EBAADghR+8ekDtxwf0uRtLvY4CABhHFBjnYVlhqrbWUGAAAACMt7aefn3/lQNatTBHiwqSvY4DABhHFBjn4aKiFB3u6FVD23GvowAAAEwrD62vVld/QH9+41yvowAAxhkFxnlYVjS41pJZGAAAAOOnpatPP3ztoG5bnKfSnESv4wAAxhkFxnmYn5uk6AifttQc8zoKAADAtPHfL+9XXyCoz94wx+soAAAPUGCch6gInxblJ2srBQYAAMC4aO3u10/eqNEdS/NVkpngdRwAgAcoMM7TRTNSVdHQob5A0OsoAAAAU94PXj2g3kBQn7pultdRAAAeocA4T8sKU9QfCGlXQ4fXUQAAAKa09uMD+vHrB7W6LEezs9j7AgCmKwqM88RGngAAAOPj0Q0H1dkX0APXzfY6CgDAQxQY5yknOUZ5yTHaWkuBAQAAEC7dfQF9/9UDWjkvSwvzkr2OAwDwEAXGBVhWlKoth9jIEwAAIFx+9maNjvUMMPsCAECBcSGWFaWovu24mjp6vY4CAMCUZ2aFZvaSmVWZWaWZfeYUYz5iZjuGbq+b2RIvsmJs9A4E9dAr1bp8VrounpHqdRwAgMcoMC7AiX0wtrAPBgAA4yEg6fPOufmSVkh6wMwWjBhzQNI1zrnFkr4m6aFxzogx9ItNtWru7NOnVzL7AgBAgXFByvKTFOX3aWsty0gAAAg351yjc27L0Pudkqok5Y8Y87pz7sQT8xuSCsY3JcZKMOT0vVcOaGlhii4rSfc6DgBgAqDAuADREX4tyEviJBIAAMaZmRVLWibpzTMMu1fSM6f5+PvMbJOZbWpubh77gLhgz1UeVk1rjz55dYnMzOs4AIAJgALjAi0rStGOujYNBENeRwEAYFowswRJT0j6rHOu4zRjrtNggfHFU113zj3knCt3zpVnZmaGLyzOi3NO/72+WjPS43TTwhyv4wAAJggKjAt08YxU9Q6EVNV4ytdPAABgDJlZpAbLi5865548zZjFkh6WdLtz7uh45sPY2HTomLbXtukTV86U38fsCwDAIAqMC1Q+I02StPEg+2AAABBONriO4PuSqpxz3zzNmCJJT0q6xzn39njmw9j575erlRoXqf91caHXUQAAEwgFxgXKSY5RYVqsNh5o9ToKAABT3RWS7pG00sy2Dd1uMbP7zez+oTF/Kyld0neHrm/yLC3Oy/7mLj1fdUT3XFas2Ci/13EAABNIhNcBpoLlM9K0fm+znHNsMgUAQJg4516VdMYnWufcJyR9YnwSIRwefuWAoiN8+uPLZngdBQAwwTADYwwsn5mmlq5+HTza43UUAACASau5s09PbKnTnRcXKCMh2us4AIAJhgJjDCwvTpUklpEAAABcgEc3HNRAMKR7r5zpdRQAwAREgTEGZmUmKDUuUhsPUmAAAACcj96BoB5945BumJ+tWZkJXscBAExAFBhjwMxUXpymTYc4iQQAAOB8rNnWoGM9A8y+AACcFtvNzYQAACAASURBVAXGGFlenKoDLd1q6uz1OgoAAMCk4pzTD18/qHk5ibp0ZprXcQAAExQFxhgpLx58st18kFkYAAAA5+KtA62qauzQxy4v5kQ3AMBphbXAMLNVZrbHzPaZ2ZdOcT3ZzNaa2XYzqzSzj4czTziV5SUrJtKnjRQYAAAA5+RHrx9USlykbl+a73UUAMAEFrYCw8z8kr4jabWkBZLuNrMFI4Y9IGmXc26JpGsl/auZRYUrUzhFRfi0tDCFjTwBAADOQX3bcT1XeVh3LS9UbJTf6zgAgAksnDMwLpG0zzlX7Zzrl/SYpNtHjHGSEm1wrmCCpFZJgTBmCqvlxWmqbGhXV9+k/RIAAADG1U/eOCRJumfFDI+TAAAmunAWGPmSaofdrxt6bLhvS5ovqUHSTkmfcc6FRn4iM7vPzDaZ2abm5uZw5b1gy4vTFHLS1hqWkQAAAJxN70BQP3+rRjctyFFBapzXcQAAE1w4C4xT7cDkRty/WdI2SXmSlkr6tpklveuDnHvIOVfunCvPzMwc+6RjZFlRinwm9sEAAAAYhae31autZ0AfvbzY6ygAgEkgnAVGnaTCYfcLNDjTYriPS3rSDdon6YCkeWHMFFaJMZFakJektw4c9ToKAADAhOac0w9fGzw6dUUJR6cCAM4unAXGRklzzGzm0MacH5K0ZsSYGknXS5KZZUsqlVQdxkxht2JmurbUtKl3IOh1FAAAgAnrrQOt2n24k6NTAQCjFrYCwzkXkPRpSc9JqpL0uHOu0szuN7P7h4Z9TdLlZrZT0guSvuicawlXpvFw2ax09QdC2sI+GAAAAKf14w0HlRzL0akAgNGLCOcnd86tk7RuxGMPDnu/QdJN4cww3pbPTJPPpDeqW3X5rAyv4wAAAEw4TR29+m3lEX38imKOTgUAjFo4l5BMS0kxkSrLT9Yb+9kHAwAA4FQe31SrQMjp7kuKvI4CAJhEKDDC4LKSdG2tPabj/eyDAQAAMFww5PTzt2p1xex0lWQmeB0HADCJUGCEwYpZ6RoIOvbBAAAAGOHlt5tU33ZcH7l0htdRAACTDAVGGCwvTpPfZ9rAMhIAAIB3+OkbNcpMjNaNC7K9jgIAmGQoMMIgITpCi/KTtaGaAgMAAOCEumM9enFPk+4qL1Skn5ehAIBzwzNHmFw2K13ba9vU3RfwOgoAAMCE8D8bayVJH7qk0OMkAIDJiAIjTC4rSVcg5LT5EPtgAAAADARDemxjra4rzVJBapzXcQAAkxAFRpiUF6cqwmcsIwEAAJD0/K4jau7s00cu5ehUAMD5ocAIk7ioCC0pTGEjTwAAAEk/fbNGeckxurY0y+soAIBJigIjjC4rSdfO+nZ1sQ8GAACYxg60dOvVfS26+5Ii+X3mdRwAwCRFgRFGl89KVzDk9NYBZmEAAIDp67GNNfL7THctZ/NOAMD5o8AIo4tmpCo6wqdX9rZ4HQUAAMATA8GQnthcp5XzspSVFON1HADAJEaBEUYxkX5dWpKuVykwAAC4YGZWaGYvmVmVmVWa2WdOMcbM7D/MbJ+Z7TCzi7zIij94cXeTWrr6dVc5sy8AABeGAiPMrpqdob1NXWpsP+51FAAAJruApM875+ZLWiHpATNbMGLMaklzhm73Sfqv8Y2IkR7fWKusxGhdW5rpdRQAwCRHgRFmV83NkCRmYQAAcIGcc43OuS1D73dKqpKUP2LY7ZIecYPekJRiZrnjHBVDjnT06qU9Tbrz4gJF+HnZCQC4MDyThFlpdqIyE6PZBwMAgDFkZsWSlkl6c8SlfEm1w+7X6d0lh8zsPjPbZGabmpubwxVz2vvl5jqFnPRBlo8AAMYABUaYmZmunJ2h1/a1KBRyXscBAGDSM7MESU9I+qxzrmPk5VN8yLuegJ1zDznnyp1z5ZmZLG0IB+ecHt9Uq0tnpmlmRrzXcQAAUwAFxji4ak6Gjnb3q+rwyNdYAADgXJhZpAbLi5865548xZA6ScN/3V8gqWE8suGd3qhu1aGjPRydCgAYMxQY4+DK2YP7YLCMBACA82dmJun7kqqcc988zbA1kv546DSSFZLanXON4xYSJz2+qVaJ0RFaXcYWJACAsUGBMQ6ykmI0LyeRjTwBALgwV0i6R9JKM9s2dLvFzO43s/uHxqyTVC1pn6TvSfqUR1mntfbjA1q3s1HvXZqn2Ci/13EAAFNEhNcBposrZ2fokTcOqXcgqJhInsgBADhXzrlXdeo9LoaPcZIeGJ9EOJ012xvUFwixfAQAMKaYgTFOrpqbqf5ASG8eaPU6CgAAQFg9vrFW83OTtCg/2esoAIAphAJjnFxSnKboCJ9e3sNRbQAAYOqqbGjXzvp23VVeoMFtSwAAGBsUGOMkNsqvy2al6/d7mryOAgAAEDa/2FSnKL9PdyzL9zoKAGCKocAYR9eVZqm6pVsHW7q9jgIAADDm+gMhPb2tXjcuyFZKXJTXcQAAUwwFxji6rjRLkpiFAQAApqSX9jTpWM+A7ryY2RcAgLFHgTGOitLjVJIZrxfZBwMAAExBT2yuU0ZCtK6ek+l1FADAFESBMc6uK83SG9VH1dMf8DoKAADAmGnt7tdLe5p0x9I8Rfh5iQkAGHs8u4yzlfOy1B8IacP+o15HAQAAGDNrttVrIOh058UFXkcBAExRFBjjrLw4VfFRfr3EPhgAAGAKeWJLvRbkJml+bpLXUQAAUxQFxjiLjvDritkZeml3s5xzXscBAAC4YG8f6dTO+nZmXwAAwooCwwPXzctSfdtx7W3q8joKAADABXtiS50ifKbbl+Z5HQUAMIVRYHjg2tLBnblf3M0yEgAAMLkFQ05Pba3XtaWZykiI9joOAGAKo8DwQG5yrBbkJun5XUe8jgIAAHBBXt3XoiMdfbrzIpaPAADCiwLDIzctzNbmmmNq6erzOgoAAMB5e2JznZJjI7VyfpbXUQAAU1xYCwwzW2Vme8xsn5l96RTXv2Bm24ZuFWYWNLO0cGaaKG5akCPnpBeqmIUBAAAmp47eAT1XeVjvXZKn6Ai/13EAAFNc2AoMM/NL+o6k1ZIWSLrbzBYMH+Oc+4Zzbqlzbqmk/0/Sy8651nBlmkjm5yYqPyVWv62kwAAAAJPTuh2N6guEOH0EADAuwjkD4xJJ+5xz1c65fkmPSbr9DOPvlvTzMOaZUMxMNy3M1iv7WtTdF/A6DgAAwDl7YkudZmXGa0lBstdRAADTQDgLjHxJtcPu1w099i5mFidplaQnTnP9PjPbZGabmpubxzyoV25ckK3+QEiv7J06XxMAAJgeDh3t1saDx3TnxQUyM6/jAACmgXAWGKd6JnOnGXubpNdOt3zEOfeQc67cOVeemZk5ZgG9dklxmpJjI/VbTiMBAACTzJNb6mUmvW/ZKX8/BQDAmAtngVEnqXDY/QJJDacZ+yFNo+UjJ0T4fbp+fpZeqGpSIBjyOg4AAMCoOOf01LZ6XVaSrtzkWK/jAACmiXAWGBslzTGzmWYWpcGSYs3IQWaWLOkaSU+HMcuEddOCbLUfH9BbB6fF3qUAAGAK2FbbpkNHe3THUmZfAADGz6gKDDObY2a/NLNdZlZ94namj3HOBSR9WtJzkqokPe6cqzSz+83s/mFD3yfpt8657vP9Iiazq+dmKjrCx2kkAABg0nh6W4OiInxatSjH6ygAgGlktDMwfijpvyQFJF0n6RFJj57tg5xz65xzc51zs5xz/zD02IPOuQeHjfmRc+5D5x59aoiLitBVczL1XOVhhUKn2yIEAABgYhgIhrR2e4NumJ+lpJhIr+MAAKaRiFGOi3XOvWBm5pw7JOkrZvaKpL8LY7Zp4z2Lc/R81RFtrW3TxTNSvY4DAMC4MLP3SFooKebEY865v/cuEUbj1X0tOtrdr9tZPgIAGGejnYHRa2Y+SXvN7NNm9j5JWWHMNa1cPz9bUX6f1u1s9DoKAADjwswelHSXpD/V4MllH5A0w9NQGJWnt9YrOTZS15ZOnZPhAACTw2gLjM9KipP0Z5IulnSPpI+GK9R0kxQTqavnZmjdzkaWkQAApovLnXN/LOmYc+6rki7TO08vwwTU3RfQc5VHdMuiXEVH+L2OAwCYZkZVYDjnNjrnupxzdc65jzvn3u+ceyPc4aaT9yzOVWN7r7bWtnkdBQCA8XB86G2PmeVJGpA008M8GIXf7Tqi4wNB3bE0z+soAIBpaFR7YJjZXElf0ODUzpMf45xbGaZc087wZSTsgwEAmAZ+bWYpkr4haYskJ+lhbyPhbJ7aVq+85BgtL07zOgoAYBoa7Saev5D0oKTvSQqGL870NXwZyV/dMl8+n3kdCQCAcPpn51yfpCfM7Nca3Miz90wfYGY/kHSrpCbnXNkpridL+omkIg2+xvkX59wPxzz5NNXS1adX9rbovqtLeJ0CAPDEaPfACDjn/ss595ZzbvOJW1iTTUMsIwEATCMbTrzjnOtzzrUPf+w0fiRp1RmuPyBpl3NuiaRrJf2rmUVdYE4M+fX2BgVDTndw+ggAwCNnnIFhZifmB641s09J+pWkvhPXnXOtYcw27bCMBAAw1ZlZjqR8SbFmtkyDJ5BIUpIGNww/LefcejMrPtMQSYlmZpISJLVKClxoZgx6aluD5uUkqjQn0esoAIBp6mxLSDZr8MXAiRcXXxh2zUkqCUeo6erEMpLf7GAZCQBgyrpZ0sckFUj65rDHOyR9+QI/97clrZHUIClR0l3OudCpBprZfZLuk6SioqIL/GOnvoMt3dpW26YvrZ7ndRQAwDR2xgLDOcdu4OPsvUvz9XxVk9480KrLZqV7HQcAgDHlnPuxpB+b2Z3OuSfG+NPfLGmbpJWSZkn6nZm94pzrOEWOhyQ9JEnl5eWcYX4WT22rl5n03iWcPgIA8M6o9sAwsxgz+5yZPWlmT5jZZ80sJtzhpqMb52crPsqvp7fVex0FAIBwes3Mvm9mz0iSmS0ws3sv8HN+XNKTbtA+SQckMWXgAjnn9PS2Bl06M015KbFexwEATGOj3cTzEUkLJf2nBqdnLpD0aLhCTWexUX7dXJaj3+xsVO8AB74AAKasH0p6TtKJX+m/LemzF/g5ayRdL0lmli2pVFL1BX7OaW9HXbsOtHSzeScAwHOjLTBKnXP3OudeGrrdJ2luOINNZ3cszVdnb0C/39PkdRQAAMIlwzn3uKSQJDnnAjrLUe1m9nMNnlRSamZ1Znavmd1vZvcPDfmapMvNbKekFyR90TnXEr4vYXr41dZ6Rfl9Wr0o1+soAIBp7mybeJ6w1cxWOOfekCQzu1TSa+GLNb1dPitdmYnR+tXWeq0q48UCAGBK6jazdA1uCi4zWyGp/Uwf4Jy7+yzXGyTdNGYJoUAwpF/vaNDKeVlKjo30Og4AYJobbYFxqaQ/NrOaoftFkqqGfsPhnHOLw5Jumorw+3Tb4jz95I1Dau8ZUHIcLxgAAFPO5zR4YkiJmb0mKVPS//I2EkZ6bf9RtXT1645lbN4JAPDeaAuMVWFNgXd537J8/eC1A1pX0ai7L+F4NwDAlLNL0q8k9UjqlPSUBvfBwATy9NZ6JcZE6NrSLK+jAABw5j0wzCzNzNI0+MLiXTfn3CHn3KHwx5x+yvKTVJIZr19t5TQSAMCU9IgGTwj5fxrcJHyO2CB8QukdCOq3u45odVmOYiL9XscBAOCsMzA2a3Btqg3dP3FOug29XxKmXNOemel9S/P1r797W7WtPSpMi/M6EgAAY6nUObdk2P2XzGy7Z2nwLr/f06SuvoBuW8LyEQDAxHDGGRjOuZnOuRLn3ExJF0u6W4NnrH9s6C3C6P0XF8hM+sXmOq+jAAAw1rYObdwpiQ3CJ6I12xuUkRCly0rSvY4CAICkUR6jamafkPSypGclfWXo7d+GLxYkKT8lVlfOztAvN9UqGHJn/wAAACY4M9tpZjs0uEH462Z20MwOaPB41Ku9TYcTuvoCeqGqSbcsylWEf1QvFwEACLvRPiN9RtJySYecc9dJWiaJc9XHwQfLC9XQ3qvX9/OfGwAwJdwq6TYNbhA+U9I1kq4dev893sXCcM/vOqK+QIjlIwCACWW0p5D0Oud6zUxmFu2c221mpWFNBknSTQuzlRIXqf/ZWKur5mR6HQcAgAvC5t+Tw5rtDcpLjtHFRaleRwEA4KTRzsCoM7MUDR5x9jsze1pSQ/hi4YToCL/uWJqv31YeUVtPv9dxAADAFNfW06/1bzfr1iV58vns7B8AAMA4GVWB4Zx7n3OuzTn3FUl/I+n7ku4IZzD8wQfLC9UfDOkpjlQFAABh9mzFYQVCTrctZvkIAGBiOeddmZxzLzvn1jjnmA4wThbkJaksP0mPb+I0EgAAEF5rtjdoZka8yvKTvI4CAMA7sK30JPHB8kLtauzQzrp2r6MAAIApqqmjVxuqj+q2xbkyY/kIAGBiocCYJG5fmq/YSL9+8gZ7nwEAgPBYt7NRzonTRwAAExIFxiSRHBup25fm6ent9Wo/PuB1HAAAMAWt2d6geTmJmpOd6HUUAADehQJjEvmjFTPUOxDSE5vZCwMAAIyt2tYebalpY/YFAGDCosCYRMryk7W0MEU/efOQnHNexwEAAFPIb3Y2ShKnjwAAJiwKjEnmnhUzVN3crQ37j3odBQAATCFrtjVoaWGKitLjvI4CAMApUWBMMu9ZnKuUuEj95E028wQAAGNjX1OXdjV2sHwEADChUWBMMjGRfn2wvFDPVR7RkY5er+MAAIAp4Nc7GmQm3bo41+soAACcFgXGJPSRS4sUck4/5UhVAABwgZxzWru9QZfOTFN2UozXcQAAOC0KjEloRnq8rp+XrZ+8WaPegaDXcQAAwCS2q7FD+5u7WT4CAJjwwlpgmNkqM9tjZvvM7EunGXOtmW0zs0ozezmceaaSe6+cqdbufv1qa73XUQAAwCS2dnujInym1WUsHwEATGxhKzDMzC/pO5JWS1og6W4zWzBiTIqk70p6r3NuoaQPhCvPVLOiJE0L85L0g1cPcKQqAAA4LyeWj1w5J0Np8VFexwEA4IzCOQPjEkn7nHPVzrl+SY9Jun3EmA9LetI5VyNJzrmmMOaZUsxM9145U3uburR+b4vXcQAAwCS0paZN9W3Hddtilo8AACa+cBYY+ZJqh92vG3psuLmSUs3s92a22cz+OIx5ppxbF+cpKzFaD79S7XUUAAAwCa3d3qCoCJ9uWpjtdRQAAM4qnAWGneKxkWsdIiRdLOk9km6W9DdmNvddn8jsPjPbZGabmpubxz7pJBUV4dNHLy/WK3tbtOdwp9dxAADAJBIMOf1mZ6NWlmYpMSbS6zgAAJxVOAuMOkmFw+4XSGo4xZhnnXPdzrkWSeslLRn5iZxzDznnyp1z5ZmZmWELPBl9+JIixUT69D1mYQAAgHPwZvVRNXf2cfoIAGDSCGeBsVHSHDObaWZRkj4kac2IMU9LusrMIswsTtKlkqrCmGnKSY2P0oeWF+mprfWqbzvudRwAAMLGzH5gZk1mVnGGMZxuNkprdzQoPsqvlfOyvI4CAMCohK3AcM4FJH1a0nMaLCUed85Vmtn9Znb/0JgqSc9K2iHpLUkPO+dO+6IEp/a/ry6RJH1vPbMwAABT2o8krTrdRU43G73+QEjPVBzWjQuyFRvl9zoOAACjEhHOT+6cWydp3YjHHhxx/xuSvhHOHFNdfkqs3rcsX49trNGnV85WRkK015EAABhzzrn1ZlZ8hiGcbjZKr+5rVlvPAMtHAACTSjiXkGAc3X/tLPUFQvrhawe8jgIAgFc43WyU1m5vVHJspK6aw95iAIDJgwJjipiVmaDVZTl6ZMMhdfQOeB0HAAAvjOp0M2l6n3DWOxDUbysPa3VZjqIieCkIAJg8eNaaQj517Wx19gb06IZDXkcBAMALozrdTJreJ5y9uLtJ3f1Blo8AACYdCowppCw/WdfMzdTDr1Srqy/gdRwAAMYbp5uNwtrtDcpIiNaKknSvowAAcE4oMKaYP79xro71DOhH7IUBAJhizOznkjZIKjWzOjO7l9PNzk1n74Be3N2kWxfnyu8zr+MAAHBOwnoKCcbf0sIU3TA/Ww+tr9Y9lxUrOTbS60gAAIwJ59zdoxjD6WZn8LtdR9QXCOm2JbleRwEA4JwxA2MK+tyNc9XRG9D3X6n2OgoAAJhA1m5vUH5KrC4qSvU6CgAA54wCYwpakJekWxbl6AevHdSx7n6v4wAAgAngWHe/XtnbolsX58qM5SMAgMmHAmOK+uwNc9XdH9B/r2cWBgAAkJ6tPKxAyHH6CABg0qLAmKLmZifq9iV5+vHrB9XU2et1HAAA4LG12xtUkhGvhXlJXkcBAOC8UGBMYZ+5Ya4GgiF96/m9XkcBAAAeauro1Ybqo7p1SR7LRwAAkxYFxhQ2MyNef7Rihh7bWKu9Rzq9jgMAADyybmejnJNuW8zpIwCAyYsCY4r7s+vnKC7Sr68/s9vrKAAAwCNrdzRqXk6i5mQneh0FAIDzRoExxaXFR+lT183WC7ub9Pq+Fq/jAACAcVZ3rEebDx1j804AwKRHgTENfPyKYuWnxOof1lUpFHJexwEAAOPoNzsaJUm3LabAAABMbhQY00BMpF9fuLlUlQ0dempbvddxAADAOFq7o0FLClNUlB7ndRQAAC4IBcY08d4leVqUn6x/fnaPuvsCXscBAADjoLq5SxX1HWzeCQCYEigwpgmfz/SV9y7Q4Y5e/eeL+7yOAwAAxsGvdzTKTLqV5SMAgCmAAmMauXhGmj5wcYEefqVa+5q6vI4DAADCyDmnNdsbtLw4TTnJMV7HAQDgglFgTDNfXD1PcVF+fWVNpZxjQ08AAKaqPUc6ta+pi9NHAABTBgXGNJOREK2/uLlUr+5r0bqdh72OAwAAwmTt9gb5TFpdluN1FAAAxgQFxjT0kUtnaEFukv7vb3axoScAAFOQc05rtzfqitkZykiI9joOAABjggJjGvL7TF+7Y6Ea23v1zd+97XUcAAAwxnbUtaumtUe3sXknAGAKocCYpi6ekaY/WlGkH752QFtrjnkdBwAAjKG12xsU6TfdvJDlIwCAqYMCYxr74qp5yk6K0Ref2KH+QMjrOAAAYAyEQk6/3tGoa+ZmKjku0us4AACMGQqMaSwxJlL/8L4yvX2kS9/9/T6v4wAAgDGwueaYDnf0cvoIAGDKocCY5lbOy9YdS/P0nZf2ac/hTq/jAACAC7R2e4NiIn26YX6211EAABhTFBjQ3962UIkxkfrLX25XIMhSEgAAJqtAMKR1Oxt1/bxs/f/t3Xl8XHW9//H3Z2Yy2Ze2aZM23VKa0o0uEGihgFVBFqkFBBW0ClcpoHCVn9er3vu78vNy/fnzPlxR2VRAEIpssi+CotQfFLoGutDSHyVtmjRJ1+yZzMz398dM27RN22SayZkkr+fjMY9z5syZk08+jyzfvHPO92SnB7wuBwCAXkWAAQ3NDuq2hdNVUbVPv3qNS0kAAOivln2wWzubQlowc6TXpQAA0OsIMCBJ+uSMkbpsdol++dfN3JUEAIB+6tmKauWkBzT/5BFelwIAQK8jwMAB3184TcV5Gbrlj2vU3B72uhwAANADoXBUL66t0SemFikjze91OQAA9DoCDByQl5Gmn3xmpip3t+i/nt/gdTkAAKAHlr5fr4a2MHcfAQAMWAQYOMTcCcO0+NwJWvL2Vr2yvtbrcgAAQDc9W1Gtgqw0zZtY6HUpAAAkBQEGjvA/zp+k6SV5+pfHKlS1p8XrcgAAwHG0hiJ6ZX2tLpperGCA4R0AYGDiNxyOkB7w69dXn6po1OlrD69WKMytVQEA3jOze82szszWHme/080sYmZX9FVtXnttY52aQxEtmMHlIwCAgYsAA10aNyxb/33FDFVs26sfvsh8GACAlHC/pAuPtYOZ+SX9SNLLfVFQqni2olqFOemaM2GY16UAAJA0SQ0wzOxCM9toZpvN7DtdvD7fzPaZ2Zr443vJrAc9c9EpI3XtvPG67/9+qJfW1nhdDgBgkHPOvS5p93F2u1nSE5Lqkl9Ramhs69Bf36vTJTNGyu8zr8sBACBpAsk6cPw/IL+WdL6kKknLzewZ59z6w3Zd6py7JFl14MR896IpWrV1r7712DsqK8rVScNzvC4JAIAumVmJpMskfUzS6cfZd7GkxZI0duzY5BeXRK9uqFV7OKoFM0d6XQoAAEmVzDMwzpC02Tn3gXMuJOkRSQuT+PGQBMGAT3d8/lQFAz5d9/sV2tfa4XVJAAAczc8lfds5Fznejs65e5xz5c658uHDh/dBacnz9JpqlRRkavaYIV6XAgBAUiUzwCiRtK3T86r4tsOdaWYVZvaimU3r6kBmttjMVpjZivr6+mTUimMoKcjUnV84TVt3t+ifl6xWJOq8LgkAgK6US3rEzD6UdIWkO8zsUm9LSq5dTe1a+v5OLZg5Sj4uHwEADHDJDDC6+i16+F++qySNc87NlPRLSU91daCB9F+S/uqM0qH6/sJp+vumev33S+95XQ4AAEdwzpU658Y758ZLelzSV51zXY4tBooX3q1RJOq0cBZ3HwEADHzJDDCqJI3p9Hy0pOrOOzjnGpxzTfH1FySlmVlhEmvCCfj8nHH6wtyxuvv1D/TkqiqvywEADDJmtkTSm5JONrMqM/uymd1gZjd4XZtXnl5TrZOLcjVlZJ7XpQAAkHRJm8RT0nJJZWZWKmm7pM9JurrzDmZWLKnWOefM7AzFApVdSawJJ+jWBdO0ua5J337iHRXnZeisieRNAIC+4Zy7qgf7XpPEUlLCtt0tWlG5R9+64GSvSwEAoE8k7QwM51xY0k2K3Yd9g6RHnXPrDvtPyRWS1ppZhaTbJX3OOccECyksze/T3YvKVVqYresfXKn3djR4XRIAAIPSMxWxE1s/NZPLRwAAg0MyLyGRc+4F59wk59xJzrkfxLfd5Zy7K77+K+fcNOfcTOfcXOfcGBVA4wAAGy9JREFUG8msB70jPzNN9117hrLS/br2vuWq2dfqdUkAAAw6z6ypVvm4IRozNMvrUgAA6BNJDTAwcJUUZOq+a85QY1tY1963XA1t3F4VAIC+sqGmQRtrG5m8EwAwqBBgIGFTR+Xpri+cps11TfrK/SvUEgp7XRIAAIPC02uq5feZLj5lpNelAADQZwgwcELOLivUzz47Sysqd+v6B1eqrSPidUkAAAxo0ajTsxXVOqesUMNy0r0uBwCAPkOAgRO2YOYo/ejTM7T0/Z266eFV6ohEvS4JAIABa+XWPdq+t1WXzirxuhQAAPoUAQZ6xZXlY3Tbwml6dUOdvvHHNYpEuZkMAADJ8NTq7cpI8+n8qUVelwIAQJ8KeF0ABo5FZ45XW0dUP3hhgwI+00+unKmAn4wMAIDeEgpH9fy7NTp/arGy0xnGAQAGF37zoVddd+4EhaNOP3rpPbV3RHX7VbMVDBBiAADQG/6xuV57Wzq0cCZ3HwEADD78ZYled+P8k3Trgql6ad0OLX5wBRN7AgDQS55eU62CrDSdO2m416UAANDnCDCQFNfOK9UPLz9Ff99Ur2vvW67mdm6xCgDAiWhuD+vP62p18SkjObsRADAo8dsPSXPVGWP108/M1Ftbdumq3yzTzqZ2r0sCAKDfenVDrVo7Ilw+AgAYtAgwkFSXzR6tuxeVa1Ntoy6/4w1t2dnsdUkAAPRLT6+p1qj8DJ0+fqjXpQAA4AkCDCTd+VOL9PB1c9XUHtan73xDq7fu8bokAAD6ld3NIb2+qV4LZo2Sz2delwMAgCcIMNAnTh07RE/ceJZyMwK66jfL9NLaGq9LAgCg33j+3RqFo04LZ5Z4XQoAAJ4hwECfKS3M1hM3nqXJxXm64Q+r9LNXNikadV6XBQBAyntq9XaVjcjRlJG5XpcCAIBnCDDQpwpz0vXI4rn69Kmj9Yu/vK8bH1rJHUoAADiGyl3NWlm5R5efOlpmXD4CABi8CDDQ5zLS/PrxlTP0H5dM1Svra3X5HW9o664Wr8sCACAlPblqu8ykS2dz9xEAwOBGgAFPmJm+fHapHvinOdrR0KZLfrlUL6/b4XVZAACkFOec/rR6u846aZhG5md6XQ4AAJ4iwICnzi4r1LM3na3xhdm6/sGV+l/PrFN7OOJ1WQAApISVlXu0dXeLLp892utSAADwHAEGPDd2WJYeu+FMXTtvvO5/40NdceebXFICAICkJ1ZtV2aaXxdOL/a6FAAAPEeAgZSQHvDr1gXTdPei01S5q1mfvH2pHl9ZJee4SwkAYHBq64jo+XeqdeH0YmWnB7wuBwAAzxFgIKVcMK1YL3z9HE0Zmad/eaxC1z+4Ujub2r0uCwCAPvfX9+rU0BbWZbNLvC4FAICUQICBlDN6SJaWLJ6rf794iv62qV4X/Ox1vbSWCT4BAIPLk6uqNCI3XfMmFnpdCgAAKYEAAynJ7zNdd+4EPXfz2RpZkKEb/rBSNz28SnWNbV6XBgBA0u1qatffNtbrstkl8vvM63IAAEgJBBhIaZOKcvWnr87TLedN0p/X1erjP/m7HnqrUtEoc2MAAAauZyuqFY46XXYql48AALAfAQZSXprfp6+fV6YXv3GOpo/K17//aa2uvPtNbdzR6HVpAAAkxZOrt2vqyDxNLs7zuhQAAFIGAQb6jZOG5+jh6+box1fO1Af1Tfrk7Uv1n8+u176WDq9LAwD0ATO718zqzGztUV7/vJm9E3+8YWYz+7rG3rC5rlHvVO3T5Zx9AQDAIQgw0K+Yma44bbT+8s35urJ8tO57Y4s+8uPX9MCbHyociXpdHgAgue6XdOExXt8i6SPOuRmSbpN0T18U1dueXLVdPpM+NWuU16UAAJBSCDDQLw3NDuqHl8/Q8zefo8nFufre0+t00S+W6m8b6+Qc82MAwEDknHtd0u5jvP6Gc25P/OkySaP7pLBeFI06PbV6u86dNFwjcjO8LgcAgJRCgIF+beqoPC25bq7uXnSaQpGorrlvuT57zzIt//Co41sAwODwZUkvel1ETy3bskvV+9p02WwuHwEA4HAEGOj3zEwXTCvWn285V9//1DR9UN+sK+96U1+69229W7XP6/IAAH3MzD6qWIDx7WPss9jMVpjZivr6+r4r7jieWLldOekBfWJqsdelAACQcggwMGCkB/z60lnjtfRfP6rvXDRZFVV7teBX/9D1D67Q2u0EGQAwGJjZDEm/lbTQObfraPs55+5xzpU758qHDx/edwUeQ1N7WC+8W6MFM0cqM+j3uhwAAFJOwOsCgN6WGfTrho+cpKvnjNXvlm7Rvf/YopfX1eqcskJ9df5EzZ0wVGbmdZkAgF5mZmMlPSlpkXNuk9f19NTz71SrtSOiK04b43UpAACkJAIMDFh5GWm65fxJ+vI5pfrDskrd+48tuuo3yzRrTIG+Ov8knTelSD4fQQYA9BdmtkTSfEmFZlYl6VZJaZLknLtL0vckDZN0RzyoDjvnyr2ptuceXVGlk4Zn69SxBV6XAgBASiLAwICXl5Gmr86fqH+aV6rHVlbpntf/nxY/uFLjhmXpi2eO15Xlo5WXkeZ1mQCA43DOXXWc178i6St9VE6v2lzXpJWVe/TdiyZzliAAAEfBHBgYNDLS/Fo0d5xe++Z8/fKq2Rqek67bnluvuf/7L/qfT72rzXWNXpcIABikHl9ZJb/PdNmp3H0EAICjSWqAYWYXmtlGM9tsZt85xn6nm1nEzK5IZj2AJAX8Pi2YOUqP33iWnrv5bF18ykg9uqJK5/30dV39m2V6es12tXVEvC4TADBIhCNRPbGqSh89ebhG5GZ4XQ4AACkraZeQmJlf0q8lnS+pStJyM3vGObe+i/1+JOnlZNUCHM30knz9+MqZ+u5Fk/XI8m1a8vZWff2RNcrLCGjhrBJ99vQxmjYqj9N5AQBJ8/dN9apvbNeV5UzeCQDAsSRzDowzJG12zn0gSWb2iKSFktYftt/Nkp6QdHoSawGOaVhOur720Ym68SMnadkHu/THFdv0xxXb9OCySk0ZmadPn1qiBTNHqSiP/4wBAHrXYyuqVJgT1Mcmj/C6FAAAUloyA4wSSds6Pa+SNKfzDmZWIukySR/TMQIMM1ssabEkjR07ttcLBfbz+UxnTSzUWRML9Z8tHXqmYrseXVGl/3p+g37wwgbNKR2qT80s0UXTizUkO+h1uQCAfm5XU7te3VCra84arzQ/U5MBAHAsyQwwujrn3h32/OeSvu2cixzrFH3n3D2S7pGk8vLyw48BJEV+VpoWnTlei84cr811TXq2olrPVlTr3/70rr739FqdU1aoS2aM0senjFBBFmEGAKDn/rR6u8JRx+UjAAB0QzIDjCpJnX8bj5ZUfdg+5ZIeiYcXhZIuNrOwc+6pJNYF9NjEETm65fxJ+sZ5ZVpf06BnKqr1XEWNvvlYhfw+0+njh+j8qcX6xNQijRma5XW5AIB+wDmnx1ZUaeaYAp1cnOt1OQAApLxkBhjLJZWZWamk7ZI+J+nqzjs450r3r5vZ/ZKeI7xAKjMzTRuVr2mj8vWdCyeromqfXlm/Q6+sr9Vtz63Xbc+t1+TiXH1iapE+NqVIp5Tky+9jAlAAwJHe3b5PG2sb9YPLpntdCgAA/ULSAgznXNjMblLs7iJ+Sfc659aZ2Q3x1+9K1scG+oKZadaYAs0aU6BvXTBZlbua9cr6Wv15fa1+9dpm3f7XzRqSlaZ5Ewt17qThOrdsuIrzmQQUABDz6IptSg/Ebu0NAACOL5lnYMg594KkFw7b1mVw4Zy7Jpm1AMk2bli2vnLOBH3lnAna3RzS0vfr9fdN9Vr6/k49906NJGlSUY7OKRuus8sKVT5uiHIz0jyuGgDghZZQWE+vrtZF04uVx+8CAAC6JakBBjBYDc0OauGsEi2cVSLnnN7b0ajX42HGg8sq9bt/bJHPpOkl+ZpTOlRnlA7TGeOHKj+LQSwADAbPVdSosT2sq+eM87oUAAD6DQIMIMnMTFNG5mnKyDxd/5GT1BqKaGXlHr21ZZfe2rJbv3+zUr9ZukVm0uTiPM0pHarTxg3RrDEFGj0kU8e6Qw8AoH966O2tmjgiR6ePH+J1KQAA9BsEGEAfywz6dXZZoc4uK5QktXVEVLFtr97asltvbdmlR5Zv1f1vfChJKsxJ1+yxsXk2Zo8t0IzRBcpJ59sWAPqzddX7VLFtr/7jkqmE1AAA9AB/CQEey0jza86EYZozYZikMnVEotq4o1Grt+7R6m17tWbrXr2yvlaS5DNpUlGuZozOj98NJXZmRzahBgD0G0ve3qpgwKdPn1ridSkAAPQr/NUDpJg0v0/TS/I1vSRfi86MbdvbEtKabXu1euterd62V69uqNOjK6okSWZSaWH2gUAj9sjX0Oygh58FAKArLaGwnlpdrU+eMlIFWfycBgCgJwgwgH6gICuo+SeP0PyTR0iSnHPa0dCmddsbtK66Qeuq92lV5R49W1F94D1FeemaVJSrshG5mlSUo0nFuSobkcOdTwDAQ89WVKupPayr54z1uhQAAPodAgygHzIzjczP1Mj8TJ03tejA9j3NIa2viQUa79U0alNdox5+u1JtHdED+4zKz1BZUSzUKCvK1cQROZpQmM1/AgGgDzz89jZNHJGj8nFM3gkAQE8RYAADyJDsoOZNLNS8iYUHtkWiTlV7WrSptkmbahv1fm2jNtU26c0PdikUPhhsFGSlqbQwW6WF2ZpQmK3SwhyNL8xSaWG2soL8qACAE7V/8s7vMXknAAAJ4a8SYIDz+0zjhmVr3LBsnd/pbI1I1KlyV7M+qG/Wlp3N2rKrWVvqm/XG5l16ctX2Q45RnJeh0sJsjRuWpTFDszR6SKbGDM3SmCFZKswJMhAHgG7YP3nn5UzeCQBAQggwgEHK7zNNGJ6jCcNzjnitJRTWhztbtGVnsz48EHI06dUNtdrZFDpk34w0n0YPydKYTqHGmKGZGj0kFnTkZ6YRcAAY9JrbY5N3XsLknQAAJIwAA8ARsoIBTR2Vp6mj8o54rSUUVtWeVm3b3RJ7xNer9rRqReUeNbaFDzuWX8X5GRqVnxlfZqg4P1MjCw5uy8sIEHIAGND2T955FZN3AgCQMAIMAD2SFQxoUlGuJhXldvn6vpYObdvTciDUqNnXppp9seXS9+tV19gu5w59T/b+kKMgU8V5GSrKy9CIvHSNyE3X8Nx0jcjN0PDcdGWk+fvgMwSA3uWc0wNvVurkolwm7wQA4AQQYADoVflZacrPytf0kvwuX++IRFXX2K4d+1pVvbdNO/a1qXpfa3zZpo076rWzqV1Rd+R7czMCh4QaB9bzDoYcw7KDKsgKyu/jjA4AqWHV1j1aX9OgH1w2nbPNAAA4AQQYAPpUmt+nkoJMlRRk6rRxXe8TiTrtbg6prrFNdY3tqu/0qGtsU11Duyqq9qquoV2tHZEj3u8zqSArqKHZsceww5ZDc9IPbssJakhWUGl+X5I/cwCD1e/fqFRuRkCXzmLyTgAATgQBBoCU4/eZhsfPrph2jP2cc2oORVTXEAs66hrbtbupXbubQ9rVHDqwfL+uSbubQ9rTEjri8pX98jPTNCw7qCHZQQ3JSlN+ZlD5mWkqyIo9YutBFezflhlUbkZAPs70AHAMdQ1teuHdGn3xzPHKTmfYBQDAieA3KYB+y8yUkx5QzlHupnK4SNRpT0s82GiKLXc3tx8SduxuCql6b5s21DRqb0tIzaEjz/A4+PGlvIz9gUaa8jsFHHkZacrNCCj3wDK2npcRUE58PTvo53RyYIBb8vY2haNOi848yilnAACg2wgwAAwafp+pMCddhTnpUlH33hMKR9XQ1qG9LR3a1xrS3pbY+t7WDu1r7dC+lpD2th7ctnVXs/a2dqihtaPLeTw685mUk34w5MjLSIuHG4HDwo805aT7lRUMKDsYUFa6P7YM+pWTHnse9PsIQ4AU0xGJ6qG3KnXupOEqLcz2uhwAAPo9AgwAOIZgwHcw9OiB/Ze3NLWF1djWoYb4srEtHH90HLJsaAurqb1DtQ1t2lx3cHv4eClIXMBnygr6lZ0eiD2C8cAj/eAyFn7EX0sPKCvNr4w0vzKDPmXsX48/9q9nBH2EI0CCXl63Q3WN7frh5Zx9AQBAbyDAAIAkOHB5S3pAxfkZCR3DOae2jqga2zrUHIqouT2sllBEzaGwWtpjz5tD8W3tB5fNobCa2yNqCYVVvbdDLaHwIe/v+eeiQ4KNjDTfwbAj6Fd6ILbM7LQ9Pc2v9IBP6QGfgoFYCJKe5lPQ71ew0/bOy/SA/7B9fQowuSo6MbN7JV0iqc45N72L103SLyRdLKlF0jXOuVV9W+VBD7xZqTFDMzX/5BFelQAAwIBCgAEAKcrMYsFA0N9rx4xGnVo7YmFGa0dEbR1RtXZE1BqKqC0cUVsocsj2tvhj/+utoejBbR0RNbWHtbMpdNg+EbWHo71Sr890MNg4IhDxK+g3BXw+pQV8SvOZAn5Tmt+nNL9PAZ912u6Lb9+/vynN5+u0/+HHiW079Dj79zf5LLa/32/ym8nvO/gIdFr3mzHRa++6X9KvJD1wlNcvklQWf8yRdGd82ec21DTo7S279W8XT+a2zgAA9BICDAAYRHw+O3CZSTI55xSKRNUejioUfxy6HoktI1G1d0Rj+3ZEFIocfd9QfN/2Tvt0hKMKR6NqaY0oHIkqHHHqiETVEe20HnEKx5cd0ehR70STLGaxS3xioUcs0IiFHD75fVLA55MvvtwfehweiPiOEozElpLPYsf3xz+Oz2JzvpiZ/D7Jb7H12WMLtLAf38rTOfe6mY0/xi4LJT3gnHOSlplZgZmNdM7V9EmBnTzwZqXSAz59pnxMX39oAAAGLAIMAECvMzOlB2KXl6SaSHR/sNE58NgfcuwPPGIBTDgSVTi6fz22byTqDnmEo04R5xSJRBVxUiQae080/tr+Zef9oy6+LRJ/7yGvRxWJxo5z4Hjxj93acejxnJMiLna8aLyOaFSx584pcsh67Nj9OcDohhJJ2zo9r4pvOyLAMLPFkhZL0tixY3u1iGjU6b0dDbp0VokKsoK9emwAAAYzAgwAwKASO4shNp8HBpyurtXo8pwb59w9ku6RpPLy8l49L8fnMz1541lq7ej5nDMAAODomB0NAAAMFFWSOl+zMVpStReFmJmygvyfCACA3kSAAQAABopnJH3RYuZK2ufF/BcAACA5+NcAAADoF8xsiaT5kgrNrErSrZLSJMk5d5ekFxS7hepmxW6jeq03lQIAgGQgwAAAAP2Cc+6q47zuJH2tj8oBAAB9jEtIAAAAAABAyiPAAAAAAAAAKY8AAwAAAAAApDwCDAAAAAAAkPIIMAAAAAAAQMojwAAAAAAAACmPAAMAAAAAAKQ8AgwAAAAAAJDyCDAAAAAAAEDKM+ec1zX0iJnVS6pMwqELJe1MwnEHA3p3Yuhf4uhd4uhd4ujdkcY554Z7XUSiGFukJHqXOHqXOHqXOHqXOHrXtS7HFv0uwEgWM1vhnCv3uo7+iN6dGPqXOHqXOHqXOHqH7uJrJXH0LnH0LnH0LnH0LnH0rme4hAQAAAAAAKQ8AgwAAAAAAJDyCDAOusfrAvoxendi6F/i6F3i6F3i6B26i6+VxNG7xNG7xNG7xNG7xNG7HmAODAAAAAAAkPI4AwMAAAAAAKQ8AgwAAAAAAJDyCDAkmdmFZrbRzDab2Xe8rifVmNkYM3vNzDaY2Toz+3p8+1Aze8XM3o8vh3R6z3fj/dxoZhd4V733zMxvZqvN7Ln4c/rWTWZWYGaPm9l78a+/M+lf95jZLfHv17VmtsTMMuhd18zsXjOrM7O1nbb1uFdmdpqZvRt/7XYzs77+XJAaGFccG+OKE8fYIjGMKxLHuKJnGFskz6APMMzML+nXki6SNFXSVWY21duqUk5Y0jedc1MkzZX0tXiPviPpL865Mkl/iT9X/LXPSZom6UJJd8T7PFh9XdKGTs/pW/f9QtJLzrnJkmYq1kf6dxxmViLpnyWVO+emS/Ir1ht617X7Ffu8O0ukV3dKWiypLP44/JgYBBhXdAvjihPH2CIxjCsSwLgiIfeLsUVSDPoAQ9IZkjY75z5wzoUkPSJpocc1pRTnXI1zblV8vVGxH/YlivXp9/Hdfi/p0vj6QkmPOOfanXNbJG1WrM+DjpmNlvRJSb/ttJm+dYOZ5Uk6V9LvJMk5F3LO7RX9666ApEwzC0jKklQtetcl59zrknYftrlHvTKzkZLynHNvutjs2A90eg8GF8YVx8G44sQwtkgM44oTxriiBxhbJA8BRuwX5rZOz6vi29AFMxsvabaktyQVOedqpNhgRNKI+G709KCfS/pXSdFO2+hb90yQVC/pvvhpsr81s2zRv+Nyzm2X9GNJWyXVSNrnnPuz6F1P9LRXJfH1w7dj8OH7qQcYVySEsUViGFckiHFFr2Fs0QsIMKSuriPi3rJdMLMcSU9I+oZzruFYu3axbdD11MwukVTnnFvZ3bd0sW3Q9a2TgKRTJd3pnJstqVnxU+2Ogv7Fxa+pXCipVNIoSdlm9oVjvaWLbYOyd91wtF7RQ+zH10I3Ma7oOcYWJ4RxRYIYVyQdY4seIMCIJVljOj0frdgpUejEzNIUG2Q85Jx7Mr65Nn5qk+LLuvh2ehozT9KnzOxDxU4h/piZ/UH0rbuqJFU5596KP39csYEH/Tu+8yRtcc7VO+c6JD0p6SzRu57oaa+q4uuHb8fgw/dTNzCuSBhji8Qxrkgc44rewdiiFxBgSMsllZlZqZkFFZtA5RmPa0op8dlufydpg3Pup51eekbSl+LrX5L0dKftnzOzdDMrVWzCmbf7qt5U4Zz7rnNutHNuvGJfV391zn1B9K1bnHM7JG0zs5Pjmz4uab3oX3dslTTXzLLi378fV+wac3rXfT3qVfxU0EYzmxvv+Rc7vQeDC+OK42BckTjGFoljXHFCGFf0DsYWvSDgdQFec86FzewmSS8rNqPuvc65dR6XlWrmSVok6V0zWxPf9m+S/o+kR83sy4r9YLtSkpxz68zsUcV+KYQlfc05F+n7slMWfeu+myU9FP8j4ANJ1yoWvNK/Y3DOvWVmj0tapVgvVku6R1KO6N0RzGyJpPmSCs2sStKtSuz79EbFZh3PlPRi/IFBhnFFtzCu6H30rnsYVySAcUXPMbZIHotNaAoAAAAAAJC6uIQEAAAAAACkPAIMAAAAAACQ8ggwAAAAAABAyiPAAAAAAAAAKY8AAwAAAAAApDwCDAAAAAAAkPIIMAAAAAAAQMr7//x4zdZ/9OdhAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 1080x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(trace_dic['loss'])\n",
"plt.title(\"ELBO\")\n",
"plt.xlabel(\"step\")\n",
"plt.ylabel(\"loss\");\n",
"savefig(\"loss\")\n",
"plt.show()\n",
"\n",
"\n",
"\n",
"fig = plt.figure(figsize=(15,5))\n",
"\n",
"for i,param in enumerate(['alpha', 'beta']):\n",
" plt.subplot(1,2,i+1)\n",
" plt.plot(trace_dic[param])\n",
" plt.ylabel(param)\n",
"\n",
"plt.tight_layout()\n",
"savefig(\"params\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最尤推定結果と真値の比較"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"alpha 0.33812472224235535 true alpha 0.2847422647809694\n",
"beta 2.31745982170105 true beta 1.7152165622510307\n"
]
}
],
"source": [
"trace = poutine.trace(model).get_trace()\n",
"\n",
"print('alpha', trace.nodes['alpha']['value'].item(), 'true alpha', true_alpha)\n",
"print('beta', trace.nodes['beta']['value'].item(), 'true beta', true_beta)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"推定したパラメータでサンプリング"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlAAAAE9CAYAAADEYFxcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXxU5d3//9dnFsgOEQKyqKBFDJBFQMSNxZUKt4rVr7u43dha69Li1l9V2tpqv1q19qeluPcWtQpFrHq3RYQClUWorCIiiKwaCBBCFpKZub5/zJAGSGBOtknI+/l4nMfZrnPOZ3KAvLnmLOacQ0RERETi50t0ASIiIiItjQKUiIiIiEcKUCIiIiIeKUCJiIiIeKQAJSIiIuKRApSIiIiIR4GmPFjHjh1djx49mvKQIiIiInWyePHi7c65rJrWNWmA6tGjB4sWLWrKQ4qIiIjUiZl9Xdu6w36FZ2ZJZrbQzJaa2Uoz+3ls+Xgz22xmS2LDhQ1ZtIiIiEhzFU8P1F7gbOfcHjMLAnPN7H9j655yzj3ReOWJiIiIND+HDVAu+q6XPbHZYGzQ+19ERESk1YrrGigz8wOLge8AzzrnFpjZd4Hbzex6YBHwE+fczhq2HQuMBTj22GMbrHAREZG6qqysZNOmTZSXlye6FGkGkpKS6N69O8FgMO5tzMvLhM2sPTAV+BGwDdhOtDfql0AX59xNh9p+4MCBTheRi4hIon311Vekp6fToUMHzCzR5UgCOecoLCykuLiYnj177rfOzBY75wbWtJ2n50A553YBs4ARzrlvnXNh51wEeB4YVLfSRUREmlZ5ebnCkwBgZnTo0MFzb2Q8d+FlxXqeMLNk4FzgczPrUq3ZaGCFpyOLiIgkkMKT7FOXPwvx9EB1AWaa2TLgE2C6c+494P+a2fLY8uHA3Z6PLiIi0kqZGdddd13VfCgUIisri1GjRgHwyiuvcPvttzfY8WbNmsXHH39cNT9hwgT+9Kc/Nci+f/3rX3vepr6f74YbbmDy5MkAzJkzh759+5Kfn09ZWVmd9+lFPHfhLQNOrmH5dTU0FxERkTikpqayYsUKysrKSE5OZvr06XTr1q3Rjjdr1izS0tI4/fTTAfj+97/fYPv+9a9/zU9/+tMG259XkyZNYty4cdx4441Ndky9C09ERCRBvvvd7/L+++8D8MYbb3DVVVd52n7x4sUMHTqUAQMGcMEFF7B161YAnnnmGfr06UNubi5XXnkl69evZ8KECTz11FPk5+czZ84cxo8fzxNPRB/lOGzYMO6++26GDBlCdnY2n3zyCZdeeim9evXiZz/7WdXxLrnkEgYMGEDfvn2ZOHEiAPfffz9lZWXk5+dzzTXXAPDaa68xaNAg8vPzufXWWwmHwwC8/PLLnHjiiQwdOpR//etfNX6m8ePHc91113H22WfTq1cvnn/+eSB6sfftt99Onz59GDlyJAUFBQC88MILvPXWW/ziF7+oOn6TcM412TBgwAAnIiKSaJ999lmiS3Cpqalu6dKl7nvf+54rKytzeXl5bubMmW7kyJHOOedefvll98Mf/rDW7SsqKtxpp53mCgoKnHPOvfnmm+7GG290zjnXpUsXV15e7pxzbufOnc455x5++GH3+OOPV21ffX7o0KHu3nvvdc459/TTT7suXbq4LVu2uPLyctetWze3fft255xzhYWFzjnnSktLXd++fauWp6amVu33s88+c6NGjXIVFRXOOed+8IMfuFdffdVt2bLFHXPMMa6goMDt3bvXnX766TV+vocfftjl5ua60tJSt23bNte9e3e3efNmN2XKFHfuuee6UCjkNm/e7Nq1a+fefvtt55xzY8aMqZquq5r+TACLXC2ZpknfhdcUlm8qOmhZTvd2CahERERagrvuuoslS5Y06D7z8/N5+umnD9suNzeX9evX88Ybb3Dhhd7eiLZ69WpWrFjBeeedB0A4HKZLly5V+73mmmu45JJLuOSSS+La30UXXQRATk4Offv2rdrX8ccfz8aNG+nQoQPPPPMMU6dOBWDjxo2sWbOGDh067LefGTNmsHjxYk455RQAysrK6NSpEwsWLGDYsGFkZUXfzXvFFVfwxRdf1FjLxRdfTHJyMsnJyQwfPpyFCxcye/ZsrrrqKvx+P127duXss8/28uNqcEdcgBIREWlJLrroIsaNG8esWbMoLCyMezvnHH379mXevHkHrXv//feZPXs27777Lr/85S9ZuXLlYffXtm1bAHw+X9X0vvlQKMSsWbP48MMPmTdvHikpKQwbNqzGW/+dc4wZM4ZHH310v+XvvPNO3He7Hdhu33xzunNSAUpERFq1eHqKGtNNN91Eu3btyMnJYdasWXFv17t3b7Zt28a8efM47bTTqKys5IsvviA7O5uNGzcyfPhwzjzzTF5//XX27NlDeno6u3fvrnOdRUVFZGZmkpKSwueff878+fOr1gWDQSorKwkGg5xzzjlcfPHF3H333XTq1IkdO3ZQXFzMqaeeyp133klhYSEZGRm8/fbb5OXl1XisadOm8cADD1BSUsKsWbN47LHHCIfD/PGPf+T666+noKCAmTNncvXVV9f589SXApSIiEgCde/enTvvvLPGda+88grvvPNO1fz8+fPp3r07AG3atGHy5MnccccdFBUVEQqFuOuuuzjxxBO59tprKSoqwjnH3XffTfv27fmv//ovLrvsMqZNm8bvf/97z3WOGDGCCRMmkJubS+/evRk8eHDVurFjx5Kbm0v//v2ZNGkSjzzyCOeffz6RSIRgMMizzz7L4MGDGT9+PKeddhpdunShf//+VReXH2jQoEGMHDmSDRs28OCDD9K1a1dGjx7NRx99RE5OTtWF6Ink6VUu9dUUr3LRNVAiInI4q1atIjs7O9FlSA3Gjx9PWloa48aNa9Lj1vRnosFe5SIiIiIi+gpPREREmpHx48cnuoS4qAdKRERExCMFKBERERGPFKBEREREPFKAEhEREfFIAUpERKSJ7dq1i+eeey7RZXDDDTcwefJkAObMmUPfvn3Jz8+nrKwswZU1fwpQIiIiTexQAaq2h0s2tkmTJjFu3DiWLFlCcnJyQmpoSRSgREREmtj999/P2rVryc/P55577mHWrFkMHz6cq6++mpycHNavX0+/fv2q2j/xxBNVt/evXbuWESNGMGDAAM466yw+//zzg/Y/fvx4rrvuOs4++2x69erF888/D0TfU3f77bfTp08fRo4cSUFBAQAvvPACb731Fr/4xS+45pprGv8HcATQc6BERESa2GOPPcaKFStYsmQJALNmzWLhwoWsWLGCnj17sn79+lq3HTt2LBMmTKBXr14sWLCA2267jY8++uigdsuWLWP+/PmUlJRw8sknM3LkSObPn8/q1atZvnw53377LX369OGmm27illtuYe7cuYwaNYrLLrussT72EUUBSkREWre77oJYkGkw+fng8SXFgwYNomfPnodss2fPHj7++GMuv/zyqmV79+6tse3FF19McnIyycnJDB8+nIULFzJ79myuuuoq/H4/Xbt25eyzz/ZUo/yHApSIiEgzkJqaWjUdCASIRCJV8+Xl5QBEIhHat29f1XN1KGZW4/yBy6VuFKBERKR189hT1BDS09MpLi6udX3nzp0pKCigsLCQtLQ03nvvPUaMGEFGRgY9e/bk7bff5vLLL8c5x7Jly8jLyztoH9OmTeOBBx6gpKSEWbNm8dhjjxEOh/njH//I9ddfT0FBATNnzuTqq69uzI96xNJF5CIiIk2sQ4cOnHHGGfTr14977rnnoPXBYJCHHnqIU089lVGjRnHSSSdVrZs0aRIvvvgieXl59O3bl2nTptV4jEGDBjFy5EgGDx7Mgw8+SNeuXRk9ejS9evUiJyeHH/zgBwwdOrTRPuORzpxzTXawgQMHukWLFjXqMZZvKjpoWU73do16TBERaVlWrVpFdnZ2ostoNOPHjyctLY1x48YlupQWo6Y/E2a22Dk3sKb26oESERER8UjXQImIiBxh9j0zShqPeqBEREREPFKAEhEREfFIAUpERETEIwUoEREREY8UoEREREQ8OmyAMrMkM1toZkvNbKWZ/Ty2/Cgzm25ma2LjzMYvV0RERCTx4umB2guc7ZzLA/KBEWY2GLgfmOGc6wXMiM2LiIhIPaxfv55+/foluoyDjB8/nieeeKLebXbt2sVzzz1XpxoikQijRo0iJyeHjRs3xrXNj3/8Y7Kzs5k5c2adjlmbwz4HykUfVb4nNhuMDQ64GBgWW/4qMAu4r0GrExERaQI1vcWiPprTGzCcczjn8Pmax1U7+wLUbbfd5nnb5cuXU1BQwPLly+Pe5sknn2TQoEG89NJLDB8+3PMxaxPXT9PM/Ga2BCgApjvnFgCdnXNbAWLjTrVsO9bMFpnZom3btjVU3SIiIi3ek08+Sb9+/ejXrx9PV3upcSgUYsyYMeTm5nLZZZdRWlpKSUkJI0eOJC8vj379+vHnP/8ZgNdee41BgwaRn5/PrbfeSjgcZv369WRnZ3PbbbfRv39/br755v16fcaPH89vf/vbWrff51e/+hW9e/fm3HPPZfXq1TV+htraXHLJJQwYMIC+ffsyceLEquX3338/a9euJT8/n3vuuafWdjXZtWsXnTrtHzeGDx/O9OnTAfjZz37GHXfccdB2Rx99NLt27Trkvr2K60nkzrkwkG9m7YGpZhZ336JzbiIwEaLvwqtTlSIiIkeYxYsX8/LLL7NgwQKcc5x66qkMHTqUzMxMVq9ezYsvvsgZZ5zBTTfdxHPPPUfPnj3p2rUr77//PgBFRUWsWrWKP//5z/zrX/8iGAxy2223MWnSJIYMGcLq1at5+eWXee655/j000+56667qnp93nrrLf72t7/Vuv3111/P4sWLefPNN/n0008JhUL079+fAQMGHPQZamvz0ksvcdRRR1FWVsYpp5zC9773PTp06MBjjz3GihUrWLJkCQA7duyosV1NwuHwQT1pP//5z3nooYcoKCjg008/5d133z1oO5/Pt18wbAie+vOcc7uIflU3AvjWzLoAxMYFDVqZiIjIEWzu3LmMHj2a1NRU0tLSuPTSS5kzZw4AxxxzDGeccQYA1157LXPnziUnJ4cPP/yQ++67jzlz5tCuXTtmzJjB4sWLOeWUU8jPz2fGjBmsW7cOgOOOO47BgwcDcPLJJ1NQUMCWLVtYunQpmZmZHHvssYfcfs6cOYwePZqUlBQyMjK46KKLDvoMh2rzzDPPkJeXx+DBg9m4cSNr1qyp8ecQbzuAJUuW0L179/2WDRkyBOccTz75JG+++SZ+vx+ABx98sKpNt27d+OKLLygvLz/0SfHgsD1QZpYFVDrndplZMnAu8BvgXWAM8FhsPK3BqhIRETnCRS8xrpmZHTR/4oknsnjxYj744AMeeOABzj//fDIzMxkzZgyPPvrofu3Xr19Pamrqfssuu+wyJk+ezDfffMOVV15ZVUNN29dWR7xtZs2axYcffsi8efNISUlh2LBhNYaXeNsBXH311bz33nvMmjVrv+XLly9n69atdOzYkfT0dAC++eYbQqFQVZsTTjiBPn36VIXGnJycw36uw4mnB6oLMNPMlgGfEL0G6j2iwek8M1sDnBebFxERkTgMGTKEd955p+r6pqlTp3LWWWcBsGHDBubNmwfAG2+8wZlnnsmWLVtISUnh2muvZdy4cfz73//mnHPOYfLkyRQURL8E2rFjB19//XWNx7vyyit58803mTx5MpdddhnAIbcfMmQIU6dOpaysjOLiYv7617/W+BlqalNUVERmZiYpKSl8/vnnzJ8/v2qb9PR0iouLD9vuQK+//jqPP/74fteKbd26lWuuuYZp06aRmprK3//+dwA+/fRT8vPzq9otXbqUdevWsXnz5gYJTxDfXXjLgJNrWF4InNMgVYiIiLQy/fv354YbbmDQoEEA3HLLLZx88slVF4C/+uqr3HrrrfTq1Ysf/OAHzJkzh3vuuQefz0cwGOQPf/gDffr04ZFHHuH8888nEokQDAZ59tlnOfroow86Xt++fSkuLqZbt2506dIFoNbtjzvuOPr3788VV1xBfn4+xx13XFW4O/Az1NRmxIgRTJgwgdzcXHr37l31VSJAhw4dOOOMM+jXrx/nnXceoVCoxnY16d27d1VIKy0t5dJLL+W3v/0t2dnZPPjgg9x3331ccMEFLFmyhEsvvbRqu507d9KjRw+CwaDHs1Q7O1QXYkMbOHCgW7RoUaMeo6ZbUZvT7aQiIpJ4q1atIjs7O9FliEcLFy7kRz/6EfPnzz/k14s333wzzz//fNUF52+99RZTpkypunOxJjX9mTCzxc65gTW1bx4PhRARERE5jPz8fI455hjy8/MP+SDNF198sSo8/fjHP+Y3v/kNt9xyS4PWEtdjDEREREQSrU2bNkyePNnTNk8++WSj1KIeKBERERGPFKBEREREPFKAEhEREfFIAUpERFqlprwLXZq3uvxZUIASEZFWJykpicLCQoUowTlHYWEhSUlJnrbTXXgiItLqdO/enU2bNrFt27ZElyLNQFJS0kHv2DscBSgREWl1gsEgPXv2THQZ0oLpKzwRERERjxSgRERERDxSgBIRERHxSAFKRERExCMFKBERERGPFKBEREREPFKAEhEREfFIAUpERETEIwUoEREREY8UoEREREQ8UoASERER8UgBSkRERMQjBSgRERERjxSgRERERDxSgBIRERHxSAFKRERExCMFKBERERGPFKBEREREPFKAEhEREfHosAHKzI4xs5lmtsrMVprZnbHl481ss5ktiQ0XNn65IiIiIokXiKNNCPiJc+7fZpYOLDaz6bF1Tznnnmi88kRERESan8MGKOfcVmBrbLrYzFYB3Rq7MBEREZHmytM1UGbWAzgZWBBbdLuZLTOzl8wss5ZtxprZIjNbtG3btnoVKyIiItIcxB2gzCwNmALc5ZzbDfwBOAHIJ9pD9duatnPOTXTODXTODczKymqAkkVEREQSK64AZWZBouFpknPuLwDOuW+dc2HnXAR4HhjUeGWKiIiINB/x3IVnwIvAKufck9WWd6nWbDSwouHLExEREWl+4rkL7wzgOmC5mS2JLfspcJWZ5QMOWA/c2igVioiIiDQz8dyFNxewGlZ90PDliIiIiDR/ehK5iIiIiEcKUCIiIiIeKUCJiIiIeKQAJSIiIuKRApSIiIiIRwpQIiIiIh4pQImIiIh4pAAlIiIi4pEClIiIiIhHClAiIiIiHilAiYiIiHikACUiIiLikQKUiIiIiEcKUCIiIiIeKUCJiIiIeKQAJSIiIuKRApSIiIiIRwpQIiIiIh4pQImIiIh4pAAlIiIi4pEClIiIiIhHClAiIiIiHilAiYiIiHikACUiIiLikQKUiIiIiEcKUCIiIiIeKUCJiIiIeKQAJSIiIuKRApSIiIiIR4cNUGZ2jJnNNLNVZrbSzO6MLT/KzKab2ZrYOLPxyxURERFJvHh6oELAT5xz2cBg4Idm1ge4H5jhnOsFzIjNi4iIiBzxDhugnHNbnXP/jk0XA6uAbsDFwKuxZq8ClzRWkSIiIiLNiadroMysB3AysADo7JzbCtGQBXRq6OJEREREmqO4A5SZpQFTgLucc7s9bDfWzBaZ2aJt27bVpUYRERGRZiWuAGVmQaLhaZJz7i+xxd+aWZfY+i5AQU3bOucmOucGOucGZmVlNUTNIiIiIgkVz114BrwIrHLOPVlt1bvAmNj0GGBaw5cnIiIi0vwE4mhzBnAdsNzMlsSW/RR4DHjLzG4GNgCXN06JIiIiIs3LYQOUc24uYLWsPqdhyxERERFp/vQkchERERGPFKBEREREPFKAEhEREfFIAUpERETEIwUoEREREY8UoEREREQ8UoASERER8UgBSkRERMQjBSgRERERjxSgRERERDxSgBIRERHxSAFKRERExCMFKBERERGPFKBEREREPFKAEhEREfFIAUpERETEIwUoEREREY8UoEREREQ8UoASERER8UgBSkRERMQjBSgRERERjxSgRERERDxSgBIRERHxSAFKRERExCMFKBERERGPFKBEREREPFKAEhEREfFIAUpERETEIwUoEREREY8OG6DM7CUzKzCzFdWWjTezzWa2JDZc2LhlioiIiDQf8fRAvQKMqGH5U865/NjwQcOWJSIiItJ8HTZAOedmAzuaoBYRERGRFqE+10DdbmbLYl/xZTZYRSIiIiLNXF0D1B+AE4B8YCvw29oamtlYM1tkZou2bdtWx8OJiIiINB91ClDOuW+dc2HnXAR4Hhh0iLYTnXMDnXMDs7Ky6lqniIiISLNRpwBlZl2qzY4GVtTWVkRERORIEzhcAzN7AxgGdDSzTcDDwDAzywccsB64tRFrFBEREWlWDhugnHNX1bD4xUaoRURERKRF0JPIRURERDxSgBIRERHxSAFKRERExCMFKBERERGPFKBEREREPFKAEhEREfFIAUpERETEIwUoEREREY8UoEREREQ8UoASERER8UgBSkRERMQjBSgRERERjxSgRERERDxSgBIRERHxSAFKRERExCMFKBERERGPFKBEREREPFKAEhEREfFIAUpERETEIwUoEREREY8UoEREREQ8UoASERER8UgBSkRERMQjBSgRERERjxSgRERERDxSgBIRERHxSAFKRERExCMFKBERERGPFKBEREREPDpsgDKzl8yswMxWVFt2lJlNN7M1sXFm45YpIiIi0nzE0wP1CjDigGX3AzOcc72AGbF5ERERkVbhsAHKOTcb2HHA4ouBV2PTrwKXNHBdIiIiIs1WXa+B6uyc2woQG3dquJIa1of/+y49evSgsLAw0aWIiIjIEaLRLyI3s7FmtsjMFm3btq2xD3eQlJQ0vv76a5YvX97kxxYREZEjU10D1Ldm1gUgNi6oraFzbqJzbqBzbmBWVlYdD1d3vU7qA8CyZcua/NgiIiJyZKprgHoXGBObHgNMa5hyGl7HTp3p2LGjeqBERESkwcTzGIM3gHlAbzPbZGY3A48B55nZGuC82HyzZGbk5OSoB0pEREQaTOBwDZxzV9Wy6pwGrqVRpM6by9MbNnDuli1EIhF8Pj07VEREROrniE8TvuLd5K5dywllZaxbty7R5YiIiMgR4IgPUOXZfQHIBV0HJSIiIg3iiA9Qld2PxWVkkI/uxBMREZGGccQHKMyw3FxOSUpSD5SIiIg0iCM/QAHk5dEnFGLZ0qWJrkRERESOAK0jQOXmkhIKEfryS0pLSxNdjYiIiLRwrSNA5eUBkAOsXLkysbWIiIhIi9c6AlS/fjgz8tCdeCIiIlJ/rSNApabCd77DyX6/7sQTERGRemsdAQqw3FwGBALqgRIREZF6O+yrXI4YeXl0nzKFtUuX4pzDzGpstnxT0UHLcrq3a+zqREREpAVpNT1Q5ObiA44uLOTbb79NdDUiIiLSgrWeABW7Ey8XPZFcRERE6qf1BKjjjiOSlqY78URERKTeWk+AMsOXl8fAYFA9UCIiIlIvrSdAAeTl0c85litAiYiISD20rgCVm0tqKETJZ58RCoUSXY2I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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"\n",
"# traceでパラメータを取得\n",
"trace = poutine.trace(model).get_trace()\n",
"alpha = trace.nodes['alpha']['value'].item()\n",
"beta = trace.nodes['beta']['value'].item()\n",
"\n",
"# generate a pdf\n",
"estimated_dist = dist.Beta(alpha, beta)\n",
"y = [estimated_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"# plot\n",
"plt.plot(x_range, y, c='k', label='ML estimated pdf')\n",
"plt.plot(x_range, true_y, c='r', label=r'true pdf')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"\n",
"\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"savefig(\"sampled-pdf\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"観測データobsのサンプリング."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlAAAAE9CAYAAADEYFxcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deZSU1Z3/8fcXRQlIEAUNsggqKrI10CIZCIG4xESP25CjJiQYMSj8jBMzcTCJSUjGHM2JMo5nxAxGIjNxHdwNMVECERxUaFkVcUUhICBGBYGMyP390WWHpZqup7eqhvfrnDpd9dS99XyrHqA/3OepeyOlhCRJkgrXrNgFSJIkNTUGKEmSpIwMUJIkSRkZoCRJkjIyQEmSJGVkgJIkScpo/8bcWbt27VLXrl0bc5eSJEm1UlFR8U5KqX2+5xo1QHXt2pX58+c35i4lSZJqJSLerO65Gk/hRUSLiHguIhZFxAsR8dPc9gkR8ZeIWJi7fbk+i5YkSSpVhYxA/Q34QkppU0Q0B+ZExO9zz/1bSumGhitPkiSp9NQYoFLlWi+bcg+b526u/yJJkvZZBV0DFRH7ARXAMcAtKaVnI+JLwOUR8Q1gPvDPKaW/5uk7BhgD0KVLl3orXJKk2vroo49YtWoVW7duLXYpKgEtWrSgU6dONG/evOA+kWUx4Yg4GHgQ+DawHniHytGofwU6pJQu3lP/8vLy5EXkkqRie+ONN2jdujWHHnooEVHsclREKSU2bNjAxo0b6dat207PRURFSqk8X79M80CllN4DZgGnp5TWppQ+TiltB24DBtaudEmSGtfWrVsNTwIgIjj00EMzj0YW8i289rmRJyLiU8ApwEsR0WGHZucCSzPtWZKkIjI86RO1+bNQyDVQHYCpueugmgH3pZQei4j/jogyKk/hrQAuzbx3SZKkJqiQb+EtBvrl2f71BqlIkiSpxLkWniRJJWTFihX06tWr2GXsZsKECdxww56nfiykzXvvvcekSZNqVcP27ds588wz6d27NytXriyoz3e/+1169OjBzJkza7XP6jTqUi6SJJWiJaver9fX692pTb2+Xl2klEgp0axZaYyZfBKgxo0bl7nvkiVLWLduHUuWLCm4z8SJExk4cCBTpkxh+PDhmfdZndL4NOvRklXv73aTJKkUTZw4kV69etGrVy9uuummqu3btm1j1KhR9OnThxEjRrB582Y+/PBDzjjjDPr27UuvXr249957Afjtb3/LwIEDKSsr49JLL+Xjjz9mxYoV9OjRg3HjxtG/f39Gjx6906jPhAkTuPHGG6vt/4mf//znHHfccZxyyiksX74873uors0555zDgAED6NmzJ5MnT67afvXVV/Paa69RVlbGVVddVW27fN577z0OO+ywnbYNHz6cJ554AoBrrrmGK664Yrd+n/nMZ3jvvff2+NpZOQIlSVIRVFRU8Jvf/IZnn32WlBInnXQSn//852nbti3Lly/n9ttvZ/DgwVx88cVMmjSJbt26ccQRR/C73/0OgPfff59ly5Zx77338vTTT9O8eXPGjRvHnXfeydChQ1m+fDm/+c1vmDRpEgsWLOA73/lO1ajPfffdx+OPP15t/2984xtUVFRwzz33sGDBArZt20b//v0ZMGDAbu+hujZTpkzhkEMOYcuWLZx44on84z/+I4ceeijXX389S5cuZeHChQC8++67edvl8/HHH+82kvbTn/6UH//4x6xbt44FCxbwyCOP7NavWbNmOwXD+rDXjUBJktQUzJkzh3PPPZdWrVpx0EEHcd555zF79mwAOnfuzODBgwEYOXIkc+bMoXfv3jz55JOMHz+e2bNn06ZNG2bMmEFFRQUnnngiZWVlzJgxg9dffx2AI488kkGDBgHQr18/1q1bx+rVq1m0aBFt27alS5cue+w/e/Zszj33XFq2bMmnP/1pzjrrrN3ew57a3HzzzfTt25dBgwaxcuVKXnnllbyfQ6HtABYuXEinTp122jZ06FBSSkycOJF77rmH/fbbD4Af/ehHVW06duzIyy+/XK8zzzsCJUlSEexpJZBd5yWKCI499lgqKiqYPn063//+9znttNNo27Yto0aN4rrrrtup/YoVK2jVqtVO20aMGMG0adN4++23ueCCC6pqyNe/ujoKbTNr1iyefPJJ5s6dS8uWLRk2bFje8FJoO4CvfvWrPPbYY8yaNWun7UuWLGHNmjW0a9eO1q1bA/D222+zbdu2qjZHH300J5xwQlVo7N27d43vqyaOQEmSVARDhw7loYceqrq+6cEHH+Rzn/scAG+99RZz584F4O6772bIkCGsXr2ali1bMnLkSL73ve/x/PPPc/LJJzNt2jTWrVsHVJ4Oe/PNN/Pu74ILLuCee+5h2rRpjBgxAmCP/YcOHcqDDz7Ili1b2LhxI48++mje95Cvzfvvv0/btm1p2bIlL730Es8880xVn9atW7Nx48Ya2+3qrrvu4pe//OVO14qtWbOGr33tazz88MO0atWKP/zhDwAsWLCAsrKyqnaLFi3i9ddf5y9/+Uu9hCdwBEqSpKLo378/F110EQMHVq6Edskll9CvX7+qC8CnTp3KpZdeSvfu3Rk7diyzZ8/mqquuolmzZjRv3pxbb72VE044gWuvvZbTTjuN7du307x5c2655RY+85nP7La/nj17snHjRjp27EiHDpWLiVTX/8gjj6R///6cf/75lJWVceSRR1aFu13fQ742p59+Or/61a/o06cPxx13XNWpRIBDDz2UwYMH06tXL0499VS2bduWt10+xx13XFVI27x5M+eddx433ngjPXr04Ec/+hHjx4/ni1/8IgsXLuS8886r6vfXv/6Vrl27ZlosuCaZFhOuq8ZYTDjft+5K6eukkqTiW7ZsGT169Ch2Gcroueee49vf/jbPPPPMHk8vjh49mttuu63qgvP77ruP+++/v+qbi/nk+zNRb4sJS5IkFUtZWRmdO3emrKxsjxNp3n777VXh6bvf/S6/+MUvuOSSS+q1Fk/hSZKkJuGAAw5g2rRpmfpMnDixQWpxBEqSJCkjA5QkSVJGBihJkqSMDFCSJEkZGaAkSZIyMkBJkiRlZICSJGkvN2zYMLJMZD1r1izOPPPMenndm266ic2bNxe87wkTJhTctpicB0qSpIqK+n29AQPq9/WasJtuuomRI0fSsmXLPbabM2cOV155JStXrmT69Olcf/31fOELX2ikKrNzBEqSpEb24YcfcsYZZ9C3b1969epVtcTIz372M0488UR69erFmDFj+GS5tWHDhnHllVcydOhQevTowbx58zjvvPPo3r0711xzDQArVqzg+OOPZ9SoUfTp04cRI0bkHfn54x//yGc/+1n69+/PV77yFTZt2gTA448/zvHHH8+QIUN44IEH8ta9ZcsWLrjgAvr06cP555/Pli1bqp4bO3Ys5eXl9OzZk5/85CcA3HzzzaxevZrhw4czfPjwattB5Yzh1113HZdddhlPPPEExxxzTF0/5gZlgJIkqZE9/vjjHHHEESxatIilS5dy+umnA3D55Zczb948li5dypYtW3jssceq+hxwwAE89dRTXHbZZZx99tnccsstLF26lDvuuIMNGzYAsHz5csaMGcPixYv59Kc/zaRJk3ba7zvvvMO1117Lk08+yfPPP095eTkTJ05k69atfOtb3+LRRx9l9uzZvP3223nrvvXWW2nZsiWLFy/mhz/8IRU7jNz9/Oc/Z/78+SxevJg///nPLF68mCuuuIIjjjiCmTNnMnPmzGrbffL+PtlvmzZt6NKlSz192g3DACVJUiPr3bs3Tz75JOPHj2f27Nm0aVO56P3MmTM56aST6N27N3/605944YUXqvqcddZZVX179uxJhw4dOPDAAznqqKOq1oXr3LkzgwcPBmDkyJHMmTNnp/0+88wzvPjiiwwePJiysjKmTp3Km2++yUsvvUS3bt3o3r07EcHIkSPz1v3UU09VPdenTx/69OlT9dx9991H//796devHy+88AIvvvhi3teort3kyZO59957ufnmm7nwwgtZsWJF1o+1UXkNlCRJjezYY4+loqKC6dOn8/3vf5/TTjuNf/mXf2HcuHHMnz+fzp07M2HCBLZu3VrV58ADDwSgWbNmVfc/ebxt2zYAImKn/ez6OKXEqaeeyt13373T9oULF+7Wtjr52r3xxhvccMMNzJs3j7Zt23LRRRftVHsh7U444QQeffRRfvjDH9KxY0dGjx7NjBkzCqqpGByBkiSpka1evZqWLVsycuRIvve97/H8889XBYl27dqxadOmzIvmArz11lvMnTsXgLvvvpshQ4bs9PygQYN4+umnefXVVwHYvHkzL7/8MscffzxvvPEGr732WlXffIYOHcqdd94JwNKlS6tOv33wwQe0atWKNm3asHbtWn7/+99X9WndujUbN26ssd3SpUsBaN68Of3796/qU6ocgZIkqZEtWbKEq666imbNmtG8eXNuvfVWDj74YL71rW/Ru3dvunbtyoknnpj5dXv06MHUqVO59NJL6d69O2PHjt3p+fbt23PHHXdw4YUX8re//Q2Aa6+9lmOPPZbJkydzxhln0K5dO4YMGVIVaHY0duxYvvnNb9KnTx/KysoYOHAgAH379qVfv3707NmTo446quo0IsCYMWP40pe+RIcOHZg5c2a17SZNmsTChQtZuXIlDz30EDfddFPm99+Y4pMr/BtDeXl5yjIPRW0sWfX+btt6d2rToPuUJDUty5Yto0ePHsUuo16tWLGCM888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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"obs = []\n",
"for _ in range(10000):\n",
" trace = poutine.trace(model).get_trace()\n",
" obs.append(trace.nodes['obs']['value'].item())\n",
"\n",
"plt.xlabel('posterior samples')\n",
"\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"plt.hist(obs, range=(x_min, x_max), bins=100, alpha=0.2, density=True, color='r', label=r'sampled data$')\n",
"\n",
"plt.legend()\n",
"savefig(\"pdf-obs\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# T分布の最尤推定"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"保存先設定"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"experiment_name = \"student-t\"\n",
"\n",
"file_format = \"png\" # \"pdf\"\n",
"savedir = \"./20200627_pyro_5th_trial/\"\n",
"os.makedirs(savedir, exist_ok=True)\n",
"\n",
"def savefig(desc):\n",
" fig.savefig(os.path.join(savedir, '{0}_{1}.{2}'.format(\n",
" experiment_name, desc, file_format)), bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真の自由度$\\mu$と分布の中心をランダムに作成"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"nu = 6.852769816973126\n",
"center = 8.338968626360765\n"
]
},
{
"data": {
"text/plain": [
"(12.328968626360595, 4.338968626360765)"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"true_nu = np.abs(np.random.rand() * 10)\n",
"true_center = np.random.rand() * 10\n",
"print('nu =', true_nu) # dgrees of freedom:自由度\n",
"print('center =', true_center) # 分布の中心\n",
"\n",
"x_range = np.arange(true_center - 4, true_center + 4, 0.01)\n",
"x_max = x_range.max()\n",
"x_min = x_range.min()\n",
"x_max, x_min"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真の分布からデータをサンプリング.最尤推定の解析解を計算."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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SGZ03TJlrY01xvQk/lt63sAYa+0vxpinXON1npSIpLszZ06zfv0O/vzzT/bu3cvRo0c5ffo0586dI0eOHPj5+REcHEyJEiUoWbIkYWFh5MqVy+nYIpIJubNnCmvtfGB+kmHJlihrbRfPY4mIXCnm1EnWr1nJmu+XErVxPbt3/UZcXFzC+OzZs+Pv70/27Nk5f/48p0+f5vz58wnjvby8KF++PLVr16Zp06Y0btyYPHnyOLEqIpLJuFWmRESccPbsGVZ8t4C5305h7cplxMbGkisgkPCImjRq1oKm9WtTqlQpSpQoQWBg4FXzx8TEsHfvXv744w82b97Mhg0bmDp1Kp9//jne3t40btyYRx99lNatW+Pv7+/AGopIZqAyJSIZzsEDfzN53GimThxLzMmTFCxchEe69aBeo6ZUqVYDHx8fACoVzX3N5QQEBBAWFkZYWBitWsVfHi82NpYff/yRuXPnMmnSJB555BECAwN54okneO655yhevHiar5+IZC4qUyLCtuiTyQ6/XllJbbt27eKdd95h8uTJxMXF0fieljz0aFciat2Fl9fN30o06foFlghj0KA6DBw4kNWrVzNy5EiGDRvGsGHDaNu2Lf369aNcuXKero7beSD9t7WIpB7d6FhEHLd//36eeuopypcvz4wZM3i4S3fmrd7MkBHjqHFnPY+K1LV4eXlRr149Jk2axJ9//slLL73E/PnzqVixIt26dSM6OjpNPldEMheVKRFxzMULFxg0aBClSpVizJgxPP300/zxxx/0euu/FClWIl2zFCtWjPfee48//viD5557jgkTJlC6dGnefvvtK05kFxFJSmVKRByxcd0aHmxWl1dffZXmzZvz22+/8cknn1CwYEFHc+XPn58PP/yQnTt30qpVK/r160flypVZunSpo7lEJONSmRKRdHXmzGn6932Jrg+24Ny5s8ydO5fp06dz2223OR3tCiVKlGDy5MksXLiQS5cu0bhxYx5//HFiYmKcjiYiGYzKlIikm62bN9KuWT2mTRxLp+49mbF0HS1atHA61jU1bdqUbdu20adPH8aNG0eVKlVYs2aN07FEJANRmRKRNBcXF8eoj4fQ+f6mXLhwni+mzOHlNwaQM6ef09HckjNnTgYNGsTKlSsxxlCvXj0+GzKQS5eueW93EckiVKZEJE2dPH6cZx9rz6fvD6DpfW2Y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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# sampling\n",
"target_dist = dist.StudentT(df=true_nu, loc=true_center)\n",
"data = torch.tensor([target_dist() for i in range(100)])\n",
"true_y = [target_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(x_range, true_y, c='k', label=r'StudentT($\\nu$)')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, density=True, alpha=0.2, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"plt.title(r'$\\nu$={0:.3f} center={1:.3f}'.format(true_nu, true_center))\n",
"\n",
"plt.ylim(0,)\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"plt.savefig('obs-data')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"モデル`model`\n",
"- $p_\\theta(X)$\n",
"- $X = \\{x_1, \\ldots, x_N \\}$は観測されたデータ\n",
"- パラメータは$\\theta = \\{ \\nu, c \\}$\n",
" - $x_i \\sim \\mathrm{T}(\\nu, c)$\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 124.724x110.079 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pgm = daft.PGM()\n",
"\n",
"pgm.add_node(\"xn\", r\"$x_n$\", 2, 1, observed=True)\n",
"pgm.add_node(\"nu\", r\"$\\nu$\", 1.5, 2, fixed=True)\n",
"pgm.add_node(\"center\", \"center\", 2.5, 2, fixed=True)\n",
"pgm.add_edge(\"nu\", \"xn\")\n",
"pgm.add_edge(\"center\", \"xn\")\n",
"pgm.add_plate([1, 0.5, 2, 1], label=r\"$n = 1, \\ldots, N$\", shift=-0.2)\n",
"\n",
"pgm.show() # render and show"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
"def model(data=None):\n",
" \n",
" nu = pyro.param(\"nu\", torch.tensor(5.0), constraint=constraints.positive)\n",
"\n",
" center = pyro.param(\"center\", torch.tensor(1.0))\n",
"\n",
" with pyro.plate('observe_data'):\n",
" pyro.sample('obs', dist.StudentT(df=nu, loc=center), obs=data) # vector-plate version"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"guideは点推定のAutoDeltaを使用"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"guide = AutoDelta(\n",
" poutine.block(model, hide=['obs']),\n",
" init_loc_fn=init_to_feasible\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"準備"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [],
"source": [
"adam_params = {\"lr\": 0.005, \"betas\": (0.95, 0.999)}\n",
"optimizer = Adam(adam_params)\n",
"\n",
"\n",
"svi = SVI(model=model,\n",
" guide=guide,\n",
" optim=optimizer,\n",
" loss=Trace_ELBO()\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"パラメータの初期化とhookの設定.こうするとすべてのパラメータの途中の値を保存できる."
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tracing nu <class 'torch.Tensor'> tensor(1.6094, requires_grad=True)\n",
"tracing center <class 'torch.Tensor'> tensor(1., requires_grad=True)\n"
]
}
],
"source": [
"pyro.clear_param_store()\n",
"\n",
"svi.loss(model, guide, data)\n",
"\n",
"trace_dic = defaultdict(list)\n",
"for name, value in pyro.get_param_store().named_parameters():\n",
" print('tracing', name, type(value), value)\n",
" value.register_hook(lambda grad, name=name: trace_dic[name].append(pyro.param(name).item()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"収束するまで学習"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"scrolled": true,
"tags": []
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "54eada0b97e1495894ed8bb62299d779",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=15000.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"num_steps = 15000\n",
"\n",
"with tqdm(range(num_steps)) as pbar:\n",
" for i,p in enumerate(pbar):\n",
"\n",
" loss = svi.step(data)\n",
"\n",
" trace_dic['loss'].append(loss)\n",
"\n",
" if i > 100 and np.isclose(trace_dic['loss'][-100], loss):\n",
" break\n",
"\n",
" if i % 10 == 0:\n",
" pbar.set_postfix(loss=loss)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"lossとパラメータの推移をプロット"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(trace_dic['loss'])\n",
"plt.title(\"ELBO\")\n",
"plt.xlabel(\"step\")\n",
"plt.ylabel(\"loss\");\n",
"savefig(\"loss\")\n",
"plt.show()\n",
"\n",
"\n",
"\n",
"fig = plt.figure(figsize=(15,5))\n",
"\n",
"for i,param in enumerate(['nu', 'center']):\n",
" plt.subplot(1,2,i+1)\n",
" plt.plot(trace_dic[param])\n",
" plt.ylabel(param)\n",
"\n",
"plt.tight_layout()\n",
"savefig(\"params\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最尤推定結果と真値の比較"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"nu 74.9804458618164 true nu 6.852769816973126\n",
"center 8.36943531036377 true center 8.338968626360765\n"
]
}
],
"source": [
"trace = poutine.trace(model).get_trace()\n",
"\n",
"print('nu', trace.nodes['nu']['value'].item(), 'true nu', true_nu)\n",
"print('center', trace.nodes['center']['value'].item(), 'true center', true_center)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"推定したパラメータでサンプリング"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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2GVdunShePHilCpViunTp/P+++9Tq1YtYmJicHNz4+uvv6Z8+fIMGjSIChUqkD17dkqVKhV7YvrdypYtS1BQEMeOHePtt98mR44cNGrUiNWrV+Pn5xd7ErudLMc5VY9fQECA2b59uy3bFpHETedMyeO0b98+ChcubHcMicOgQYNImzYt/fr1e6zbjet7wrKsHcaYgLjG69IIIiIiIk7QYT4RERFJlAYNGmR3hHjRzJSIiIiIE1SmRERERJygMiUiIiLiBJUpERERESeoTImIiNjo0qVLjBo1yu4YdOzYkZCQEADWr19P0aJF8ff359q1azYnS/xUpkRERGz0b2XqfheyfNSmT59Ov3792LVrF+7u7rZkeJKoTImIiNiof//+HDp0CH9/f1577TXCwsIIDAykdevW+Pn5cfToUYoVKxY7fvjw4bGXDDh06BB16tShdOnSVK5cmd9+++2e1x80aBDt2rWjevXq5M+fn3HjxgGO++b16NGDIkWKEBQUxNmzZwEYP348c+bMYfDgwbRp0+bRfwGSAF1nSkRExEZDhw7ll19+YdeuXQCEhYXx448/8ssvv5A3b16OHj1633W7dOnCmDFjyJ8/P1u3bqV79+6sXr36nnE///wzW7ZsITw8nJIlSxIUFMSWLVvYv38/e/bs4cyZMxQpUoROnTrRuXNnNmzYQP369WnatOmj2u0kRWVKRETkH717w61Sk2D8/eEBb6BctmxZ8ubN+69j/v77bzZt2kSzZs1in4uMjIxzbHBwMO7u7ri7uxMYGMiPP/7IunXraNWqFa6uruTIkYPq1as/UEb5P5UpERGRRMbDwyP28xQpUhATExP7+Pr16wDExMSQMWPG2Bmtf2NZVpyP735eHo7KlIiIyD8ecAYpIaRLl46rV6/ed3nWrFk5e/YsFy5cIG3atCxevJg6deqQPn168ubNy9y5c2nWrBnGGH7++WdKlChxz2uEhoYyYMAAwsPDCQsLY+jQoURHR/PNN9/Qvn17zp49y5o1a2jduvWj3NUkSyegi4iI2MjLy4uKFStSrFgxXnvttXuWu7m58c4771CuXDnq169PoUKFYpdNnz6dCRMmUKJECYoWLUpoaGic2yhbtixBQUGUL1+et99+mxw5ctCoUSPy58+Pn58f3bp1o2rVqo9sH5M6yxjz34Msqw7wBeAKjDfGDL1reQZg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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"\n",
"# traceでパラメータを取得\n",
"trace = poutine.trace(model).get_trace()\n",
"nu = trace.nodes['nu']['value'].item()\n",
"center = trace.nodes['center']['value'].item()\n",
"\n",
"# generate a pdf\n",
"estimated_dist = dist.StudentT(nu, center)\n",
"y = [estimated_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"# plot\n",
"plt.plot(x_range, y, c='k', label='ML estimated pdf')\n",
"plt.plot(x_range, true_y, c='r', label=r'true pdf')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"\n",
"\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"savefig(\"sampled-pdf\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"観測データobsのサンプリング."
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAE9CAYAAAAvV+dfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3df5RVdb3/8ecbRLkgEoGZMiCYKL8ZAdEuhpppevWryaUlFjc1DdHMm61M/WpFXVvq0lhev1f0UiLcbyZ6SU2N8FeY6JWCUeSHiBqiTKQYJYpAiX6+f5zDfIfhDBzYM+fMzHk+1po15+z92Xu/95lxePn57P3ZkVJCkiRJe6ZduQuQJElqzQxTkiRJGRimJEmSMjBMSZIkZWCYkiRJysAwJUmSlMFe5Tpwjx49Up8+fcp1eEmSpKLV1NT8OaW0f6F1ZQtTffr0YdGiReU6vCRJUtEi4vXG1jnMJ0mSlIFhSpIkKQPDlCRJUgZlu2ZKkqSW4IMPPqC2tpYtW7aUuxS1AB07dqSqqooOHToUvY1hSpJU0Wpra+nSpQt9+vQhIspdjsoopcT69eupra2lb9++RW/nMJ8kqaJt2bKF7t27G6RERNC9e/fd7qU0TEmSKp5BStvsye+CYUqSJCkDw5QkSVIGhilJklqo1atXM3jw4HKXsYPJkydz0003ZW7zzjvvMHXq1D2q4aOPPuK0005jyJAhrFmzpqhtvvWtbzFgwADmzZu3R8dsjHfzSZJUz9LaDU26vyFVXZt0f1mklEgp0a5dy+hL2RamLr744t3edunSpaxbt46lS5cWvc2UKVMYNWoU06dP5/jjj9/tYzamZXyaklTP0toNO3xJbd2UKVMYPHgwgwcP5uabb65bvnXrVs455xyGDh3KuHHj2LRpE++//z6nnnoqw4YNY/Dgwdxzzz0A/OxnP2PUqFFUV1dz4YUX8uGHH7J69WoGDBjAxRdfzPDhwzn//PO36w2aPHkyP/7xjxvdfpsf/ehHHH744Xzuc59j5cqVBc+hsTZf+MIXGDFiBIMGDWLatGl1y6+88kr+8Ic/UF1dzeWXX95ou0LeeecdPvGJT2y37Pjjj+exxx4D4JprruHSSy/dYbtPfvKTvPPOOzvd9+6yZ0qSpDKrqanhzjvv5He/+x0pJY466iiOPfZYunXrxsqVK7njjjsYPXo0X/3qV5k6dSp9+/bloIMO4le/+hUAGzZsYMWKFdxzzz0888wzdOjQgYsvvpi77rqLMWPGsHLlSu68806mTp3K888/zze/+c263qB7772XuXPnNrr9V77yFWpqapg1axbPP/88W7duZfjw4YwYMWKHc2iszfTp0/n4xz/O5s2bOfLII/nnf/5nunfvzvXXX8+yZctYvHgxAH/5y18Ktivkww8/3KGH7Qc/+AHf+973WLduHc8//zwPPvjgDtu1a9duu5DYFOyZkiSpzJ5++mnOPPNMOnfuzL777svYsWOZP38+AL169WL06NEATJgwgaeffpohQ4bw+OOPc8UVVzB//ny6du3KE088QU1NDUceeSTV1dU88cQTrFq1CoCDDz6Yo48+GoAjjjiCdevWsXbtWl544QW6detG7969d7r9/PnzOfPMM+nUqRP77bcfp59++g7nsLM2t9xyC8OGDePoo49mzZo1vPLKKwU/h2LbASxevJiqqqrtlo0ZM4aUElOmTGHWrFm0b98egO9+97t1bXr27MnLL7/cpDPe2zMlSVKZpZQaXddw3qOI4LDDDqOmpoY5c+Zw1VVXcdJJJ9GtWzfOOeccrrvuuu3ar169ms6dO2+3bNy4ccyePZs333yT8ePH19VQaPvG6ii2zZNPPsnjjz/Os88+S6dOnTjuuOMKBpli2wF86Utf4uGHH+bJJ5/cbvnSpUv505/+RI8ePejSpQsAb775Jlu3bq1r86lPfYqBAwfWBcghQ4bs8rx2xZ4pSZLKbMyYMTzwwAN110Pdf//9fOYznwHgjTfe4NlnnwXg7rvv5phjjmHt2rV06tSJCRMm8O1vf5vnnnuOE044gdmzZ7Nu3TogN2T2+uuvFzze+PHjmTVrFrNnz2bcuHEAO91+zJgx3H///WzevJn33nuPhx56qOA5FGqzYcMGunXrRqdOnXjppZdYsGBB3TZdunThvffe22W7hn7+859z4403bndt2Z/+9Ce+/OUv88tf/pLOnTvzyCOPAPD8889TXV1d1+6FF15g1apV/PGPf2ySIAX2TEmSVHbDhw/n3HPPZdSoUQBccMEFHHHEEXUXj8+cOZMLL7yQfv36cdFFFzF//nwuv/xy2rVrR4cOHbjtttsYOHAg1157LSeddBIfffQRHTp04NZbb+WTn/zkDscbNGgQ7733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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"obs = []\n",
"for _ in range(5000):\n",
" trace = poutine.trace(model).get_trace()\n",
" obs.append(trace.nodes['obs']['value'].item())\n",
"\n",
"plt.xlabel('posterior samples')\n",
"\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"plt.hist(obs, range=(x_min, x_max), bins=100, alpha=0.2, density=True, color='r', label=r'sampled data$')\n",
"\n",
"plt.legend()\n",
"savefig(\"pdf-obs\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ラプラス分布の最尤推定"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"保存先設定"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
"experiment_name = \"laplace\"\n",
"\n",
"file_format = \"png\" # \"pdf\"\n",
"savedir = \"./20200627_pyro_5th_trial/\"\n",
"os.makedirs(savedir, exist_ok=True)\n",
"\n",
"def savefig(desc):\n",
" fig.savefig(os.path.join(savedir, '{0}_{1}.{2}'.format(\n",
" experiment_name, desc, file_format)), bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真のmとbをランダムに作成"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"m = 3.069662196722378 b = 1.7872261593667946\n",
"x_range: from -4.079 to 10.211\n"
]
}
],
"source": [
"true_m = np.random.rand() * 10\n",
"true_b = np.abs(np.random.rand() * 2)\n",
"print('m =', true_m, 'b =', true_b)\n",
"\n",
"x_range = np.arange(true_m - 4*true_b, true_m + 4*true_b, 0.01)\n",
"x_max = x_range.max()\n",
"x_min = x_range.min()\n",
"print('x_range: from {0:.3f} to {1:.3f}'.format(x_min, x_max))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真の分布からデータをサンプリング.最尤推定の解析解を計算."
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAFNCAYAAAAzV3pXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeZxO5eP/8dc1g5ixL6mMrUL2aQzpa49QyS5jrywJKVspS4SUIpQlO0UYsoSQ7NmXsS8fSUyExlJ2Y67fHzP8xhjcw9xz7pl5Px+Pebjvc1/XOe8zo+ntnHOf21hrEREREZH45eV0ABEREZGkSCVLRERExA1UskRERETcQCVLRERExA1UskRERETcQCVLRERExA1UskQkWTPGWGPM007nEJGkRyVLRNzOGJPVGPObMSbMGHPOGLPeGFPmHuMfMcZMMMb8a4z52xjTOdpr5YwxF2J8WWNMvWhjOkXNOx+1nkfcvH+PG2PmG2OOR2XJc4+xue6Sv0u0Me8YY/6I2v8txpiy0V7bE2NuuDHmJ3fun4g8GJUsEUkIF4A3gWxAJuBz4CdjTIq7jO8D5ANyA5WA940x1QGstWustWlvfgE1ota/GMAYUw3oDlQG8gBPAn3ds1u3RERtv979Blprj8bIXzRq/mwAY8xzwGdAfSADMB6YY4zxjppfONrcdMBRINgN+yQiD0klS0RuY4w5YozpZozZaYy5aIwZb4zJboz52RjznzFmmTEmU1zWaa29Yq09YK2NAAxwg8iylfkuU5oD/ay1Z621+4CxwOt3GdsCmGWtvRjt+Xhr7R5r7Vmg3z3m3vSyMeawMeYfY8wXxpg4/W601p601o4ENsdlXpTmwGpr7ZGo53mAPdbarTbyIzmmAFmBR2OZWz5q+ewH2K6IuJlKlojEph7wIpAfeBX4GfiIyP/ZewEdbw6MOv13t6/u0VdqjNkJXAHmA+OstadibjiqwD0B7Ii2eAdQOJaxPkQe8ZkcbXHhWOZmN8Zkucf+1gECgQCgFpFH3TDGlL3P/pW9xzpd1TxG/p8Bb2PMc1FHr94EQoC/Y5kbs2CKiAe526F6EUnevrbWngQwxqwBTllrt0c9n0PkqTgArLUZXV2ptbaYMSY1kaUm1V2GpY3683y0ZeeJPDUWUz3gH2BVjPkx5xI1P+wu2/zcWnsGOGOMGQo0IrIErgVc3r+4MsaUA7IDs6It/o/II1NriTzqdw54ycb4oNloBbOmu/KJyMPRkSwRic3JaI8vx/I8LQ8o6tThD0B3Y0zxWIZciPozfbRl6YksHzG1AKbEKCAXYpnLXebfdCza4z+JPJKWEFoAs621F6Ita0Xk0avCRBbRpsACY0zMTHWBM9xeMEXEg6hkichDieWdctG/PrrH1JREXpR+m6jrqE4A0QtYcWBPjO3mBCoSec1SdHtimXvSWnu3o1gAOaM9zgUcj9pGbO9kjP5V7h7rvCdjTBqgAbefKryZ9ydr7UFrbYS1djGR34//izEutoIpIh5EpwtF5KFEvcvtnowxpYn8fbMJ8Cbymq7swMa7TJkC9DTGbIka1xp4I8aYZsA6a+3vscydZIyZSmQ56QlMuk/EbsaYjUQeoXsXGBK1b2tw8ahd1GlQ76injxhjUltrr9xjSh0iTwWuiLF8M9DDGPM18AdQhchr43ZH25Yfke+6bOtKNhFxhkqWiCSER4DhRB65ug7sAl6x1t48YtQE+Mhae/Pi9o+BUUSeurtM5DVTi2OssznwRcwNWWsXG2MGEVle0hB5fdPH98k3D9hK5C0TJhF524S4uhzt8f6oPw2AMWZ0VLbopehuR6KmAE8BK4l8B2Yo8Ja1dn+0Mc2A9bEUTBHxIEZHmkVERETin67JEhEREXEDlSwRERERN1DJEhEREXEDlSwRERERN1DJEhEREXEDj7yFQ9asWW2ePHmcjiEiIiJyX1u3bv3HWpst5nKPLFl58uRhy5YtTscQERERuS9jzJ+xLdfpQhERERE3UMkSERERcQOVLBERERE38MhrskRERDzB9evXCQ0N5cqVe33WtyQXqVOnxs/Pj5QpU7o0XiVLRETkLkJDQ0mXLh158uTBGON0HHGQtZawsDBCQ0PJmzevS3N0ulBEROQurly5QpYsWVSwBGMMWbJkidNRTZUsERGRe1DBkpvi+ndBJUtERMSDpU2b9qHXceTIEYoUKRIPaW43dOhQpkyZ8sDz77ZvXbt2Zfny5Q+8Xk+hkiUiIiJxFh4ezoQJE2jcuHG8r/udd97hs88+i/f1JjSVLBERkUTmp59+4rnnnuPZZ5+lSpUqnDx5EoA+ffrQrFkzXnjhBfLly8fYsWPvmHvkyBHKlStHQEAAAQEBrFu37tZrgwYNomjRohQvXpzu3bsD8Pvvv1O9enVKlChBuXLl2L9/PwDLly8nICCAFCki30NXsWJFOnXqRPny5SlYsCCbN2+mbt265MuXj549e951X7p06UJAQACVK1fm9OnTAOTOnZuwsDD+/vvv+PmGOUQlS0REJJEpW7YsGzZsYPv27QQFBTFo0KBbr+3cuZOFCxeyfv16PvnkE44fP37b3EcffZRffvmFbdu2MWPGDDp27AjAzz//zNy5c9m4cSM7duzg/fffB6BNmzZ8/fXXbN26lS+//JJ27doB8Ntvv1GiRInb1p0qVSpWr15N27ZtqVWrFiNGjGD37t1MmjSJsLCwO/bj4sWLBAQEsG3bNipUqEDfvn1vvRYQEMBvv/0WP98wh+gWDiLiuF2h510aV9Qvg5uT3F1sGZ3M8zCS0r4kpPfee4+QkJB4Xae/vz9Dhw6N87zQ0FAaNmzIiRMnuHbt2m23FKhVqxZp0qQhTZo0VKpUiU2bNuHv73/r9evXr9OhQwdCQkLw9vbm4MGDACxbtow33ngDHx8fADJnzsyFCxdYt24dDRo0uDX/6tWrAJw4cYKCBQvelqtmzZoAFC1alMKFC/P4448D8OSTT3Ls2DGyZMly23gvLy8aNmwIQNOmTalbt+6t1x599NE7CmJio5IlIiKSyLzzzjt07tyZmjVrsnLlSvr06XPrtZjvgIv5/KuvviJ79uzs2LGDiIgIUqdODUTeByrm2IiICDJmzBhruUyTJs0dtzN45JFHgMjydPPxzefh4eH33a/o279y5Qpp0qS57xxPppIlIiLiggc54uQu58+fJ0eOHABMnjz5ttfmzZvHhx9+yMWLF1m5ciWfffYZ165du22un58fXl5eTJ48mRs3bgBQtWpVPvnkExo3boyPjw9nzpwhc+bM5M2bl+DgYBo0aIC1lp07d1K8eHEKFizIoUOH4py9cuXKTJkyhRw5chAREcGsWbMICgpi2rRplC1b9ta4gwcP3nYELTHSNVkiIiIe7NKlS/j5+d36GjJkCH369KFBgwaUK1eOrFmz3ja+VKlSvPLKK5QuXZpevXrxxBNP3PZ6u3btmDx5MqVLl+bgwYP4+voCUL16dWrWrElgYCD+/v58+eWXAEydOpXx48dTvHhxChcuzLx58wB46aWXWL16dZz2JSIigkOHDpE5c2YAfH192bNnDyVKlGD58uX07t0biDyleejQIQIDA+P+DfMgxlp7/0HGVAeGAd7AOGvtZzFerwX0AyKAcOA9a+3aqNeOAP8BN4Bwa+19v2OBgYF2y5YtcdsTEUm0dE1WwkpK++Ju+/btu+O6I0/Wp08f0qZNS9euXRNke3Xq1GHQoEHky5fPpfG7d+9mwoQJDBky5J7j5syZw7Zt2+jXr198xIxXsf2dMMZsja3f3PdIljHGGxgBvAQUAhoZYwrFGPYrUNxa6w+8CYyL8Xola62/KwVLREREEofPPvuMEydOuDy+SJEi9y1YEHkPri5dujxMNI/gyjVZpYBD1trDAMaY6UAtYO/NAdbaC9HG+wL3PzwmIiIi8Sr6BfAJoUCBAhQoUCDe15vYr8W6yZVrsnIAx6I9D41adhtjTB1jzH5gIZFHs26ywFJjzFZjTJuHCSsiIiKSWLhSsmL7NMQ7jlRZa+dYa58BahN5fdZNZay1AUSebmxvjCkf60aMaWOM2WKM2XLzjq8iIiIiiZUrJSsUyBntuR9w17uDWWtXA08ZY7JGPT8e9ecpYA6Rpx9jmzfGWhtorQ3Mli2bi/FFREREPJMrJWszkM8Yk9cYkwoIAuZHH2CMedpE3UHMGBMApALCjDG+xph0Uct9garA7vjcARERERFPdN8L36214caYDsASIm/hMMFau8cY0zbq9dFAPaC5MeY6cBloaK21xpjswJyo/pUCmGatXeymfRERERHxGC7d8d1auwhYFGPZ6GiPPwc+j2XeYaD4Q2YUERERSXR0x3cREZFE6MiRIxQpUsTpGHfo06fPrbvFP8yYc+fOMXLkyAfKEBERQY0aNShatCjHjh27/wSgc+fOFCxYkBUrVjzQNmOjzy4UERFxkaufTuAqT7rTvrUWay1eXp5x/OVmyWrXrl2c5+7atYtTp06xa9cul+cMGTKEUqVKMWHCBCpVqhTnbcbGM76TIiIicldDhgyhSJEiFClS5LYPqg4PD6dFixYUK1aM+vXrc+nSJS5evMgrr7xC8eLFKVKkCDNmzADg+++/p1SpUvj7+/PWW29x48YNjhw5QsGCBWnXrh0BAQG0bNnytqNHffr0YfDgwXedf9OAAQMoUKAAVapU4cCBA7Huw93G1K5dmxIlSlC4cGHGjBlza3n37t35/fff8ff3p1u3bncdF5tz587x6KOP3rasUqVK/PLLLwD07NmTjh073jHvscce49y5c/dcd1zoSJaIiIgH27p1KxMnTmTjxo1Ya3nuueeoUKECmTJl4sCBA4wfP54yZcrw5ptvMnLkSPLmzcsTTzzBwoULATh//jz79u1jxowZ/Pbbb6RMmZJ27doxdepUypcvz4EDB5g4cSIjR45k+/btvPfee7eOHs2cOZPFixffdX7z5s3ZunUr06dPZ/v27YSHhxMQEECJEiXu2Ie7jZkwYQKZM2fm8uXLlCxZknr16pElSxY+++wzdu/eTUhICABnzpyJdVxsbty4cccRub59+9K7d29OnTrF9u3bmT9//h3zvLy8biuPD0tHskRERDzY2rVrqVOnDr6+vqRNm5a6deuyZs0aAHLmzEmZMmUAaNq0KWvXrqVo0aIsW7aMDz74gDVr1pAhQwZ+/fVXtm7dSsmSJfH39+fXX3/l8OHDAOTOnZvSpUsD8Oyzz3Lq1CmOHz/Ojh07yJQpE7ly5brn/DVr1lCnTh18fHxInz49NWvWvGMf7jVm+PDhFC9enNKlS3Ps2DH+97//xfp9cHUcQEhICH5+frctK1++PNZahgwZwvTp0/H29gagV69et8bkyJGDgwcPcuXKlXv/UFykI1kiIiIezNq7fxxw1C2SbnueP39+tm7dyqJFi/jwww+pWrUqmTJlokWLFgwcOPC28UeOHMHX1/e2ZfXr12fWrFn8/fffBAUF3coQ2/y75XB1zMqVK1m2bBnr16/Hx8eHihUrxlpwXB0H0LhxYxYsWMDKlStvW75r1y5OnDhB1qxZSZcuHQB///034eHht8Y89dRTFCpU6FaxLFq06H336150JEtERMSDlS9fnrlz59663mrOnDmUK1cOgKNHj7J+/XoAfvjhB8qWLcvx48fx8fGhadOmdO3alW3btlG5cmVmzZrFqVOngMhTb3/++Wes2wsKCmL69OnMmjWL+vXrA9xzfvny5ZkzZw6XL1/mv//+46effop1H2Ibc/78eTJlyoSPjw/79+9nw4YNt+akS5eO//77777jYpo2bRpffPHFbdeunThxgiZNmjBv3jx8fX1ZsmQJANu3b8ff3//WuB07dnD48GH++uuvhy5YoCNZIiIiHi0gIIDXX3+dUqUiP5WuVatWPPvss7cuWp88eTJvvfUW+fLl4+2332bNmjV069YNLy8vUqZMyahRoyhUqBD9+/enatWq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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# sampling\n",
"target_dist = dist.Laplace(true_m, true_b)\n",
"data = torch.tensor([target_dist() for i in range(100)])\n",
"true_y = [target_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(x_range, true_y, c='k', label=r'Laplace(m,b)')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, density=True, alpha=0.2, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"plt.title(r'm={0:.3f} b={1:.3f}'.format(true_m, true_b))\n",
"\n",
"plt.ylim(0,)\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"plt.savefig('obs-data')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"モデル`model`\n",
"- $p_\\theta(X)$\n",
"- $X = \\{x_1, \\ldots, x_N \\}$は観測されたデータ\n",
"- パラメータは$\\theta = \\{ m, b \\}$\n",
" - $x_i \\sim \\mathrm{Laplace}(m, b)$\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 124.724x110.079 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pgm = daft.PGM()\n",
"\n",
"pgm.add_node(\"xn\", r\"$x_n$\", 2, 1, observed=True)\n",
"pgm.add_node(\"m\", \"m\", 1.5, 2, fixed=True)\n",
"pgm.add_node(\"b\", r\"b\", 2.5, 2, fixed=True)\n",
"pgm.add_edge(\"m\", \"xn\")\n",
"pgm.add_edge(\"b\", \"xn\")\n",
"pgm.add_plate([1, 0.5, 2, 1], label=r\"$n = 1, \\ldots, N$\", shift=-0.2)\n",
"\n",
"pgm.show() # render and show"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [],
"source": [
"def model(data=None):\n",
" \n",
" m = pyro.param(\"m\", torch.tensor(0.0))\n",
"\n",
" b = pyro.param(\"b\", torch.tensor(1.0), constraint=constraints.positive)\n",
"\n",
" with pyro.plate('observe_data'):\n",
" pyro.sample('obs', dist.Laplace(m, b), obs=data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"guideは点推定のAutoDeltaを使用"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"guide = AutoDelta(\n",
" poutine.block(model, hide=['obs']),\n",
" init_loc_fn=init_to_feasible\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"準備"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"adam_params = {\"lr\": 0.005, \"betas\": (0.95, 0.999)}\n",
"optimizer = Adam(adam_params)\n",
"\n",
"\n",
"svi = SVI(model=model,\n",
" guide=guide,\n",
" optim=optimizer,\n",
" loss=Trace_ELBO()\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"パラメータの初期化とhookの設定.こうするとすべてのパラメータの途中の値を保存できる."
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tracing m <class 'torch.Tensor'> tensor(0., requires_grad=True)\n",
"tracing b <class 'torch.Tensor'> tensor(0., requires_grad=True)\n"
]
}
],
"source": [
"pyro.clear_param_store()\n",
"\n",
"svi.loss(model, guide, data)\n",
"\n",
"trace_dic = defaultdict(list)\n",
"for name, value in pyro.get_param_store().named_parameters():\n",
" print('tracing', name, type(value), value)\n",
" value.register_hook(lambda grad, name=name: trace_dic[name].append(pyro.param(name).item()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"収束するまで学習"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"scrolled": true,
"tags": []
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8439eb62b49c48e391d3d41feaa45a8a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=5000.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"num_steps = 5000\n",
"\n",
"with tqdm(range(num_steps)) as pbar:\n",
" for i,p in enumerate(pbar):\n",
"\n",
" loss = svi.step(data)\n",
"\n",
" trace_dic['loss'].append(loss)\n",
"\n",
" if i > 100 and np.isclose(trace_dic['loss'][-100], loss):\n",
" break\n",
" \n",
" if i % 10 == 0:\n",
" pbar.set_postfix(loss=loss)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"lossとパラメータの推移をプロット"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmQAAAFNCAYAAACuWnPfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deZxddX3/8dfn3tn3zD7JZJnsGyGBGJaACoJGpIK2KiqKYqX0oa1LWy21ffz096ttfz+XFmuromhdQQVRRBAiCChLQgIhIfsKWWaSmck2S2a78/n9cc8MN2EmmUnmzJnl/XxwH/fc7znnzme+jwTefL/fc465OyIiIiISnVjUBYiIiIiMdwpkIiIiIhFTIBMRERGJmAKZiIiISMQUyEREREQipkAmIiIiEjEFMhEREZGIKZCJyJhlZnvM7ISZNae8vm5mHzKzP/ZzzuNm1hYce8zMnjSz80455lozW21mLWbWaGY/NrPq4fmtRGQsUiATkbHuT9w9L+X18QGc83F3zwNKgMeBH/bsMLM/A34C3A6UAguAduCPZjZhyKsXkXFBgUxEpB/u3gXcDcwHMDMDvgL8s7v/2N1PuHsd8OdAM/CpyIoVkVFNgUxEpB9mlgG8H3g2aJoDTAF+nnqcu3cD9wJXD2uBIjJmpEVdgIhIyH5pZl0pn/8O6DzDOV8zsy8DOcAJ4J1Be2nwXtvHObUp+0VEBkUjZCIy1l3v7kUpr28P4Jy/dvciIAu4FrjHzBYBDcH+qj7OqUrZLyIyKApkIiL9cPdud/8DsAN4M7AV2Ae8K/U4M4sBfwo8OuxFisiYoClLERmvzMyyUhvcva2Pgy4huah/o7u7mf0t8G0z2wfcBxQC/wIUAP8eftkiMhaZu0ddg4hIKMxsD1ABJFKaVwK/Ar7XxynpwO+Ai4GedWd1wH+5e2/YMrPrgH8kGdTagYeBz7j73iH+FURknFAgExEREYmY1pCJiIiIREyBTERERCRiCmQiIiIiEVMgExEREYmYApmIiIhIxEb1fchKS0t92rRpUZchIiIickZr165tcPeyvvaN6kA2bdo01qxZE3UZIiIiImdkZi/3t09TliIiIiIRUyATERERiZgCmYiIiEjEFMhEREREIqZAJiIiIhIxBTIRERGRiCmQiYiIiERMgUxEREQkYgpkIiIiIhFTIDuNlvYufr5mL9sONkVdioiIiIxhCmSnkXDn7+5Zz8pNB6MuRURERMYwBbLTKMhKp3pCNlvqNEImIiIi4VEgO4O5lQVsrj0edRkiIiIyhimQncG8qnx21TfT1pmIuhQREREZoxTIzmBuZQHdDjsONUddioiIiIxRCmRnMK8qH0DTliIiIhIaBbIzmFqSS1Z6TAv7RUREJDQKZGcQjxlzKvLZUqcRMhEREQlH6IHMzOJm9oKZPRB8LjazlWa2PXifkHLsbWa2w8y2mtlbwq5toJJXWjbh7lGXIiIiImPQcIyQfQLYnPL574FH3X0W8GjwGTObD9wALABWAP9tZvFhqO+M5lblc7ilg/rm9qhLERERkTEo1EBmZtXA24DvpDRfB3w/2P4+cH1K+93u3u7uu4EdwLIw6xuouZUFAGyp1ToyERERGXphj5D9B/AZoDulrcLdawGC9/KgfRKwN+W4fUFb5OZWJq+01DoyERERCUNogczMrgUOufvagZ7SR9trFm2Z2S1mtsbM1tTX159TjQM1ITeDyoIsjZCJiIhIKMIcIVsOvN3M9gB3A1ea2Y+Ag2ZWBRC8HwqO3wdMTjm/Gjhw6pe6+x3uvtTdl5aVlYVY/snmVuWzWbe+EBERkRCEFsjc/TZ3r3b3aSQX6z/m7jcC9wM3BYfdBPwq2L4fuMHMMs2sBpgFrA6rvsGaV1XAjkNNdCa6z3ywiIiIyCBEcR+yfwOuNrPtwNXBZ9x9I/AzYBPwW+Bj7j5iHiA5tzKfzoSzs16PUBIREZGhlTYcP8TdHwceD7YbgTf1c9wXgS8OR02DNa/q1Sste666FBERERkKulP/ANWU5pIRj+mZliIiIjLkFMgGKD0eY1ZFHpsUyERERGSIKZANwoKJBWw6cFyPUBIREZEhpUA2CAsmFtLY0kHd8baoSxEREZExRIFsEBZOSi7m37hf05YiIiIydBTIBmFuZQFm8NKBY1GXIiIiImOIAtkg5GamUVOay8YDGiETERGRoaNANkgLJxaySYFMREREhpAC2SAtmFjA/qMnONLSEXUpIiIiMkYokA3SgomFAJq2FBERkSGjQDZICyYGV1pqYb+IiIgMEQWyQZqQm8Gkomxe0giZiIiIDBEFsrMwf2KBRshERERkyCiQnYUFEwvY3dBCS3tX1KWIiIjIGKBAdhYWTizEHTbrQeMiIiIyBBTIzsKCnkcoaR2ZiIiIDAEFsrNQWZBFcW6G1pGJiIjIkFAgOwtmxoKJBWzQQ8ZFRERkCCiQnaVF1YVsO9jEiY5E1KWIiIjIKKdAdpYWVReR6HY21WraUkRERM6NAtlZWjy5CIAX9yqQiYiIyLlRIDtLFQVZVBRksn7f0ahLERERkVFOgewcLKouYv0+jZCJiIjIuVEgOwfnVxeyq6GFYyc6oy5FRERERjEFsnOwqDq5jmyDRslERETkHCiQnYNF1YUAvKh1ZCIiInIO0sL6YjPLAp4EMoOfc4+7/y8z+ykwJzisCDjq7ovNbBqwGdga7HvW3W8Nq76hUJSTwbSSHC3sFxERkXMSWiAD2oEr3b3ZzNKBP5rZQ+7+np4DzOwrQOp83053XxxiTUNuUXURq3cfjroMERERGcVCm7L0pObgY3rw8p79ZmbAu4G7wqphOCyqLqTueBuHjrdFXYqIiIiMUqGuITOzuJmtAw4BK919Vcruy4GD7r49pa3GzF4wsyfM7PIwaxsq5/fcIFYL+0VEROQshRrI3D0RTEFWA8vMbGHK7vdy8uhYLTDF3ZcAnwZ+YmYFp36nmd1iZmvMbE19fX2Y5Q/IgokFxGPGi3u1jkxERETOzrBcZenuR4HHgRUAZpYGvBP4acox7e7eGGyvBXYCs/v4rjvcfam7Ly0rKxuG6k8vJyONORX5rFMgExERkbMUWiAzszIzKwq2s4GrgC3B7quALe6+75Tj48H2dGAWsCus+obSBVOLeOGVIyS6/cwHi4iIiJwizBGyKuD3ZrYeeI7kGrIHgn038NrF/K8H1pvZi8A9wK3uPiouX7xgygRaOhJsO9gUdSkiIiIyCoV22wt3Xw8s6Wffh/pouxe4N6x6wnTh1AkAPP/KEeZVvWbZm4iIiMhp6U79Q2BKcQ4luRmsfflI1KWIiIjIKKRANgTMjAumTuCFV7SwX0RERAZPgWyIXDBlArsbWjjc0hF1KSIiIjLKKJANkQumJG8Q+7ymLUVERGSQFMiGyKLqItJixvOvKJCJiIjI4CiQDZHsjDjzJxZoYb+IiIgMmgLZELpgygTW7ztGV6I76lJERERkFFEgG0IXTJ3Aic4EW+p0g1gREREZOAWyIdRzg9jn9oyKBwyIiIjICKFANoQmFWUzqShbgUxEREQGRYFsiF1UU8zq3Ydx14PGRUREZGAUyIbYsppiGpo72FnfEnUpIiIiMkookA2xi6aXALB6t6YtRUREZGAUyIbYtJIcyvIzWb27MepSREREZJRQIBtiZsaymmJWaR2ZiIiIDJACWQguqimm9lgb+46ciLoUERERGQUUyEJwUU1yHdkqrSMTERGRAVAgC8Gs8jyKctK1jkxEREQGRIEsBLGY8bppxbrSUkRERAZEgSwkF9UUs6exlbpjbVGXIiIiIiOcAllILg7uR/bMroaIKxEREZGRToEsJPOrCpiQk85TO7SOTERERE5PgSwksZhxyYwSntrRoPuRiYiIyGkpkIXo0hml1B5rY3eDnmspIiIi/VMgC9HymaUAPLVT05YiIiLSPwWyEE0ryWFiYRZP79DCfhEREemfAlmIzIxLZ5byzK5Guru1jkxERET6FlogM7MsM1ttZi+a2UYz+0LQ/nkz229m64LXNSnn3GZmO8xsq5m9JazahtPymSUcbe1kU+3xqEsRERGRESotxO9uB65092YzSwf+aGYPBfv+3d2/nHqwmc0HbgAWABOB35nZbHdPhFhj6C6dkVxH9scdDSycVBhxNSIiIjIShTZC5knNwcf04HW6ebvrgLvdvd3ddwM7gGVh1TdcKgqymFmex1NaRyYiIiL9CHUNmZnFzWwdcAhY6e6rgl0fN7P1ZvZdM5sQtE0C9qacvi9oO/U7bzGzNWa2pr6+Pszyh8xlM0t5bs9h2jpH9WCfiIiIhCTUQObuCXdfDFQDy8xsIfANYAawGKgFvhIcbn19RR/feYe7L3X3pWVlZSFVPrTeMLuMts5uPWxcRERE+jQsV1m6+1HgcWCFux8Mglo38G1enZbcB0xOOa0aODAc9YXt4uklZKTFeGLb6BjRExERkeEV5lWWZWZWFGxnA1cBW8ysKuWwdwAvBdv3AzeYWaaZ1QCzgNVh1TecsjPiXFRTzONbD0VdioiIiIxAYY6QVQG/N7P1wHMk15A9APw/M9sQtF8BfArA3TcCPwM2Ab8FPjbar7BM9YbZZeysb2Hv4daoSxEREZERJrTbXrj7emBJH+0fOM05XwS+GFZNUXrjnHL++TebeWJbPTdePDXqckRERGQE0Z36h8mMslyqJ2RrHZmIiIi8hgLZMDEz3jC7jKd3NNDR1R11OSIiIjKCKJANozfOKaelI8Gal3X7CxEREXmVAtkwumRGCelx07SliIiInESBbBjlZaaxrKaYxzbr9hciIiLyKgWyYXbVvAq2H2pmT0NL1KWIiIjICKFANsyumlcBwO82H4y4EhERERkpFMiG2eTiHOZW5rNykwKZiIiIJCmQReDq+RWsefkIR1o6oi5FRERERgAFsghcNa+CRLfzez3bUkRERFAgi8R5kwopz8/UOjIREREBFMgiEYsZV82v4Imt9bR3jZnnp4uIiMhZUiCLyNXzKmjpSPDMzsaoSxEREZGIKZBF5JIZJeRmxHl4Y13UpYiIiEjEFMgikpUe58p5FTy88SBdCT1sXEREZDxTIIvQ286r5HBLB6t262HjIiIi45kCWYTeOKecnIw4v9lQG3UpIiIiEiEFsghlpce5cm45D79Up2lLERGRcUyBLGJvO6+KxpYOVmvaUkREZNxSIIvYG+eUk52uaUsREZHxTIEsYtkZca6cV87DG+tIdHvU5YiIiEgEFMhGgLedV0VDcwfP7tJNYkVERMYjBbIR4Io55eRlpvGrdfujLkVEREQioEA2AmRnxFmxsJKHNtTR1qlnW4qIiIw3CmQjxDuWTKKpvYvfbT4YdSkiIiIyzBTIRoiLp5dQUZDJL1/QtKWIiMh4E1ogM7MsM1ttZi+a2UYz+0LQ/iUz22Jm683sPjMrCtqnmdkJM1sXvL4ZVm0jUTxmXLd4Eo9vredwS0fU5YiIiMgwCnOErB240t3PBxYDK8zsYmAlsNDdFwHbgNtSztnp7ouD160h1jYivWPJJLq6nd+sPxB1KSIiIjKMQgtkntQcfEwPXu7uj7h7V9D+LFAdVg2jzbyqAuZW5nOfpi1FRETGlQEFMjP7hJkVWNKdZva8mb15AOfFzWwdcAhY6e6rTjnkZuChlM81ZvaCmT1hZpf38523mNkaM1tTX18/kPJHleuXTOL5V46yq775zAeLiIjImDDQEbKb3f048GagDPgw8G9nOsndE+6+mOQo2DIzW9izz8w+B3QBPw6aaoEp7r4E+DTwEzMr6OM773D3pe6+tKysbIDljx7vXDKJeMz46Zq9UZciIiIiw2SggcyC92uA77n7iyltZ+TuR4HHgRUAZnYTcC3wfnf34Jh2d28MttcCO4HZA/0ZY0V5QRZXzi3n3rX76Ux0R12OiIiIDIOBBrK1ZvYIyUD2sJnlA6dNC2ZWlnIFZTZwFbDFzFYAnwXe7u6tpxwfD7anA7OAXYP9hcaCG143mYbmdh7bcijqUkRERGQYpA3wuI+QvFJyl7u3mlkxyWnL06kCvh+ErBjwM3d/wMx2AJnASjMDeDa4ovL1wP82sy4gAdzq7ocH/yuNfm+YXUZFQSY/fW4vb1lQGXU5IiIiErKBBrJLgHXu3mJmNwIXALef7gR3Xw8s6aN9Zj/H3wvcO8B6xrS0eIw/u7Cabzy+k9pjJ6gqzI66JBEREQnRQKcsvwG0mtn5wGeAl4EfhFaV8O6lk+l2uGfNvqhLERERkZANNJB1BYvvrwNud/fbgfzwypKpJblcOqOEu5/bS6Lboy5HREREQjTQQNZkZrcBHwB+E6wLSw+vLAG48eKp7D96Qov7RURExriBBrL3kHwU0s3uXgdMAr4UWlUCwJvnV1BVmMUPntkTdSkiIiISogEFsiCE/RgoNLNrgTZ31xqykKXFY7z/oin8YXsDOw7pzv0iIiJj1UAfnfRuYDXwLuDdwCoz+7MwC5OkG5ZNISMe44fP7Im6FBEREQnJQKcsPwe8zt1vcvcPAsuAfwqvLOlRmpfJtYuquGftPpraOqMuR0REREIw0EAWc/fUleWNgzhXztFNl06jpSPBL57fH3UpIiIiEoKBhqrfmtnDZvYhM/sQ8BvgwfDKklTnTy5iyZQivvvUbt0CQ0REZAwa6KL+vwPuABYB5wN3uPtnwyxMTvYXr5/Oy42tPLyxLupSREREZIgN9NFJerRRxK6eX0lNaS7femInb11YSfAcUBERERkDTjtCZmZNZna8j1eTmR0friIF4jHjo5dP58V9x3h217h85rqIiMiYddpA5u757l7Qxyvf3QuGq0hJeucFkyjNy+BbT+6MuhQREREZQrpSchTJSo/z4eU1PL61ns21GqAUEREZKxTIRpkbL5pKXmYaX39sR9SliIiIyBBRIBtlCnPS+dCl0/jNhlq21GmUTEREZCxQIBuF/vzyGvIz07j9d9ujLkVERESGgALZKFSUk8GHl0/joZfqtJZMRERkDFAgG6U+ctl08rM0SiYiIjIWKJCNUoU56dy8vIbfbqzjpf3Hoi5HREREzoEC2Sj2kctrKM7N4F8e3Iy7nnEpIiIyWimQjWIFWen89ZUzeXpnI49vrY+6HBERETlLCmSj3Psumsq0khz+9aHNdCW6oy5HREREzoIC2SiXkRbjsyvmsu1gM/es3Rd1OSIiInIWFMjGgBULK7lw6gS+snIbze1dUZcjIiIig6RANgaYGf907Xwamtu5/Xfboi5HREREBim0QGZmWWa22sxeNLONZvaFoL3YzFaa2fbgfULKObeZ2Q4z22pmbwmrtrFo8eQibnjdZL771B621jVFXY6IiIgMQpgjZO3Ale5+PrAYWGFmFwN/Dzzq7rOAR4PPmNl84AZgAbAC+G8zi4dY35jzmbfMJT8rjX/61Uu6DYaIiMgoElog86Tm4GN68HLgOuD7Qfv3geuD7euAu9293d13AzuAZWHVNxZNyM3gsyvmsnr3YX65bn/U5YiIiMgAhbqGzMziZrYOOASsdPdVQIW71wIE7+XB4ZOAvSmn7wvaTv3OW8xsjZmtqa/XvbdO9Z6lkzl/chFf/M0Wjp3ojLocERERGYBQA5m7J9x9MVANLDOzhac53Pr6ij6+8w53X+ruS8vKyoaq1DEjFjO+eP1CjrR28M8PbIq6HBERERmAYbnK0t2PAo+TXBt20MyqAIL3Q8Fh+4DJKadVAweGo76xZuGkQv7yDTP4+dp9/H7roTOfICIiIpEK8yrLMjMrCrazgauALcD9wE3BYTcBvwq27wduMLNMM6sBZgGrw6pvrPurN81kdkUet927geNtmroUEREZycIcIasCfm9m64HnSK4hewD4N+BqM9sOXB18xt03Aj8DNgG/BT7m7okQ6xvTMtPifPld51Pf3K6pSxERkREuLawvdvf1wJI+2huBN/VzzheBL4ZV03izqLqIW98wnf/6/U6umFPOW8+rirokERER6YPu1D/GffKq2ZxfXchn713P/qMnoi5HRERE+qBANsalx2N87b1L6Hb45N0v0JXojrokEREROYUC2TgwtSSXf75+Ic/tOcJ/PrYj6nJERETkFApk48T1Sybxzgsm8Z+PbecP23VDXRERkZFEgWwc+T/XLWRmeR5/ddcL7D3cGnU5IiIiElAgG0dyM9O44wNLSXQ7f/HDtZzo0F1FRERERgIFsnFmWmkut9+wmM11x/mH+zbg/pqnU4mIiMgwUyAbh66cW8GnrprNfS/s544nd0VdjoiIyLgX2o1hZWT7+BUz2XqwiX99aAvVE3J42yLdNFZERCQqCmTjVCxmfOVd51N3rI1P/WwdlYVZXDh1QtRliYiIjEuashzHstLjfPuDS5lYmMVHf7CGPQ0tUZckIiIyLimQjXPFuRl878PLcHduvHMVtcf0eCUREZHhpkAm1JTm8oObL+Joayc3fmcVDc3tUZckIiIyriiQCQDnVRfy3Q+9jv1HT/DBO1dz7ERn1CWJiIiMGwpk0mtZTTHf+sBSth9q4kPfW01Tm0KZiIjIcFAgk5O8YXYZ//neJWzYd4wb71zNsVaFMhERkbApkMlrrFhYxX+//wI2HzjO+77zLIdbOqIuSUREZExTIJM+vXlBJXd88EJ2HGrmvXc8y6GmtqhLEhERGbMUyKRfb5xTzvc+9DpeOdzKu775DLt1nzIREZFQKJDJaV06s5SffPQimtq6+NNvPM3zrxyJuiQREZExR4FMzmjJlAnc+5eXkp+Vxvu+/SyPbKyLuiQREZExRYFMBqSmNJd7//JS5lQWcOuP1vK9p3bj7lGXJSIiMiYokMmAleZlctdHL+JN8yr4wq838Zl71tPWmYi6LBERkVFPgUwGJScjjW/deCGfeNMsfr52H++541nqjukKTBERkXOhQCaDFosZn7p6Nt+88UJ2HGziT77+R57bczjqskREREYtBTI5aysWVnLfx5aTmxHnhjue5euPbSfRrXVlIiIigxVaIDOzyWb2ezPbbGYbzewTQftPzWxd8NpjZuuC9mlmdiJl3zfDqk2GzuyKfH79V5dxzXlVfPmRbXzwu6t0E1kREZFBSgvxu7uAv3H3580sH1hrZivd/T09B5jZV4BjKefsdPfFIdYkIcjPSudrNyxm+YwSPv/rjVxz+x/46rsX8/rZZVGXJiIiMiqENkLm7rXu/nyw3QRsBib17DczA94N3BVWDTJ8zIwblk3h/o9fRnFuBh/87mo+d98Gmtu7oi5NRERkxBuWNWRmNg1YAqxKab4cOOju21PaaszsBTN7wswuH47aZGjNrsjn/o9fxp9fVsNPVr/CW/79SZ7a0RB1WSIiIiNa6IHMzPKAe4FPuvvxlF3v5eTRsVpgirsvAT4N/MTMCvr4vlvMbI2Zramvrw+zdDlLWelx/vHa+dxz6yVkpsV4/3dW8emfrqO+qT3q0kREREYkC/Nu62aWDjwAPOzuX01pTwP2Axe6+75+zn0c+Ft3X9Pf9y9dutTXrOl3t4wAbZ0Jvv7YDu54cheZaTH+5s2zufHiqaTFdYGviIiML2a21t2X9rUvzKssDbgT2JwaxgJXAVtSw5iZlZlZPNieDswCdoVVnwyPrPQ4f/uWOfz2k5ezeEoRn//1Jt7+9adYvVv3LRMREekR5jDFcuADwJUpt7K4Jth3A69dzP96YL2ZvQjcA9zq7vqv9hgxvSyPH9y8jG+8/wKOtHbw7m89w0d/sIad9c1RlyYiIhK5UKcsw6Ypy9HpREeC7z61m288vpMTnQneu2wyn7xqNqV5mVGXJiIiEprTTVkqkElkGprb+dqj2/nxqlfISotx82U1/Pll0ynMSY+6NBERkSGnQCYj2s76Zr7yyFYe3FBHfmYaH14+jY8omImIyBijQCajwuba43zt0e089FId+Vlp3Ly8hpsvq6EwW8FMRERGPwUyGVU2HTjO7Y9u4+GNB8nPTON9F0/h5uU1VBRkRV2aiIjIWVMgk1Fp44FjfOPxnTy4oZZ4zHjHkknc8vrpzCzPj7o0ERGRQVMgk1HtlcZWvvPHXfz0ub20d3Vz9fwKPnr5dF43bQLJ292JiIiMfApkMiY0Nrfz/Wde5gfP7OFoaydzKvK58eIpXL9kEvlZWmcmIiIjmwKZjCmtHV3cv+4AP1r1Mi/tP05uRpy3nlfFO5dM4uLpJcRiGjUTEZGRR4FMxiR358V9x/jJqpd5cEMdze1dVBVmcd3iSbxjySTmVGqtmYiIjBwKZDLmtXUmWLnpIPe9sJ8nttWT6HZmludxzXlVXHNeJXMq8rXeTEREIqVAJuNKQ3M7D26o5cENtazefZhuh+lluVyzsIq3nlfJ/KoChTMRERl2CmQybtU3tfPIpjoe3FDLs7sOk+h2phTncOXccq6YW85FNcVkpcejLlNERMYBBTIRkldpPrLpIL/bdJCndjbQ1tlNdnqc5TNLuXJuOVfOLaeyUDefFRGRcCiQiZyirTPBMzsbeWzLIR7bcoj9R08AML+qgCvmlnHFnHIWTy4iLR6LuFIRERkrFMhETsPd2X6ouTecrX35CIluJz8zjUtmlHD57DJeP6uUqSW5UZcqIiKjmAKZyCAca+3k6Z0NPLm9gSe31feOnk0pzuHyWaVcPquMS2eWUKCb0YqIyCAokImcJXdnT2Mrf9hez5PbGnhmZwMtHQniMWPx5KLegHZ+daGmN0VE5LQUyESGSGeimxdeOZoMaNsbWL/vKO6Qn5XGpTNKuHRGKctnljCjLE+31hARkZMokImE5EhLB0/vbOTJbfX8cUdD7/RmWX4ml84oYfmMUi6ZUcLk4pyIKxURkagpkIkMk72HW3lqRwNP72zk6Z2NNDS3AzC5OJtLp5dy6cwSLplRQnm+bq8hIjLeKJCJRMDd2XGoOQhnDTyzs5HjbV0AzCrP4+LpJVw0vZhlNcUKaCIi44ACmcgIkOh2Nh04ztM7G3hqZyNr9xympSMBwPTSXJbVJMPZRdNLmFSUHXG1IiIy1BTIREagrkQ3Gw8cZ9XuRlbvPszq3Yd7R9AmFWVz0fRiLqopZllNCdNKcnSRgIjIKKdAJjIKJLqdrXVNJwW0xrsfg0sAABG+SURBVJYOAMrzM7lw6gQWTy7i/MlFnDepkNzMtIgrFhGRwVAgExmF3J2d9c2s2n2YVbsO88LeI+w9nLyKM2Ywqzyf8ycXcv7kIs6vLmJOZT7puheaiMiIpUAmMkY0Nrezft8x1u09yov7jvLi3qMcae0EICs9xsKJyYC2qLqQRdVFTC3OIRbTVKeIyEhwukAW2pyHmU0GfgBUAt3AHe5+u5l9HvgoUB8c+g/u/mBwzm3AR4AE8Nfu/nBY9YmMRiV5mVwxt5wr5pYDyVG0vYdPsC4IZy/uPcqPnn2Z9q5uAPIz05g/sYDzJhVyXnUhCycVUlOSq5AmIjLChDZCZmZVQJW7P29m+cBa4Hrg3UCzu3/5lOPnA3cBy4CJwO+A2e6e6O9naIRM5LU6E91sO9jES/uPsWH/MTbsP87m2uN0BCEtLzWkTQpCWmkucYU0EZFQRTJC5u61QG2w3WRmm4FJpznlOuBud28HdpvZDpLh7JmwahQZi9LjMRZMLGTBxELe87pkW2eimx2Hmtmw/1hvUEsdScvNiDN/YgELg5B23qRCppflKaSJiAyTYblMy8ymAUuAVcBy4ONm9kFgDfA37n6EZFh7NuW0fZw+wInIAKXHY8yrKmBeVQHvXjoZSN52Y0d9Mxv2vRrS7lr9Ct/rTIa0nIw486uSIa0nqM0oy9VD1EVEQhD6on4zywOeAL7o7r8wswqgAXDg/5Cc1rzZzP4LeMbdfxScdyfwoLvfe8r33QLcAjBlypQLX3755VDrFxlPEt3JKzs37DvWO5q28cBxTnQmVw5kpsWYXZHPvKp85lYWBCEvn6KcjIgrFxEZ+SK7ytLM0oEHgIfd/at97J8GPODuC4MF/bj7vwb7HgY+7+79TllqDZlI+BLdzq765HTn5trjbK5tYnPt8d57pAFUFWb1hrOeoKZ1aSIiJ4vqKksD7gQ2p4YxM6sK1pcBvAN4Kdi+H/iJmX2V5KL+WcDqsOoTkYGJx4xZFfnMqsg/qf1QUxuba5vYUpu8aGBLXRNPbqunqzv5P3mZaTHmVOYzr7KAuVX5ycBWWUBhTnoUv4aIyIgW5hqy5cAHgA1mti5o+wfgvWa2mOSU5R7gLwDcfaOZ/QzYBHQBHzvdFZYiEq3y/CzK87N4w+yy3rb2rgQ7DjWzJRhF21x3nJWbD/LTNXt7j5nYO5r2alCbVqLRNBEZ33RjWBEJlbtT39TOpmAUbXMworazvoVEMJqWlR5jTkUynM2tDN6rCijM1miaiIwdkUxZiogAmBnlBVmUF2Txxjnlve3tXQm2H2w+KaQ9vLGOu597dTStekI286sKmD+xgAUTC5k/sYCJhVl60LqIjDkKZCISicy0eO8tNXq4O4eC0bSeCwg2HjjGys0H6RnML8pJT4a0lKA2vSxXz/EUkVFNgUxERgwzo6Igi4qCLK5IGU1r7ehiS10TGw8cZ9OB42yqPc4PU25sm5GWnPJcMDEZ0uYHa9RyM/WvOBEZHfRvKxEZ8XIy0rhgygQumDKht60r0c3uhhY21R7vDWqpU55mMK0kt3ckbf7EAhZUFVCWn6kpTxEZcRTIRGRUSovHem/Hcd3i5EM93J26423JUbQDyaC2Yf8xfrOhtve80rwM5k8sTJny1FWeIhI9BTIRGTPMjKrCbKoKs3nTvIre9uNtnWwOpjp7gtqdO3fRmUguTMtOjzO3KpjyrEpePDC3Mp+s9HhUv4qIjDO67YWIjEsdXckHrm88cKw3qG2qPU5TWxcAMYMZZXm9o2g9Qa04V4+JEpGzo9teiIicIiMt1ru2rIe7s+/IiWBNWjKoPbf7ML9ad6D3mMqCLOZPLGBOZT5zKvKZXZHPjPJcMtM0miYiZ0+BTEQkYGZMLs5hcnEOKxZW9rYfbulgc+905zE21zbxh+31vVOe8ZgxrSSHOZXJgDY3eJ+qtWkiMkAKZCIiZ1Ccm8HymaUsn1na29bR1c2exha21jWx7WATW+ua2HTgOA+9VNd7z7TMtBgzy/OSI2mV+b2jalW6ua2InEKBTETkLGSkxZgdTFmmau3oYseh5leD2sFmnt7ZyC9e2N97TH5mGrODUbQ5FXnMrsxnbqXWp4mMZwpkIiJDKCcjjUXVRSyqLjqp/WhrB9sONrP1YBPb6prYerCJBzfUctfqzt5jSvMymVOZFwS1fGZV5DG1JJeS3AyNqImMcQpkIiLDoCgng2U1xSyrKe5t63lUVOq057aDTdy9ei8nOhO9x+VmxJlaksu00hymluQytTin93NFfhYxrVMTGfUUyEREIpL6qKjXzy7rbe/udvYeaWVnfTMvN7bycmMrexpb2FLbxMpNB3svJoDkOrUpxTlMLclhUlE2E4uyqSrKZmJhFhOLsinPzyRNz/kUGfEUyERERphYzJIjYSW5r9nXleim9lhbb0h7ubGlN7St2nWYpvauk7/LoKIgi6ogoE0syqaqMPm5JC+TktwMSvMzyc9M07SoSIQUyERERpG0eKz31hyXzSp9zf6mtk5qj7Vx4OgJDhxto/ZY8v3A0RO8tP8Yj2w6SEfwUPZUGfEYJXkZlORlUJqXSUluJiV5GRTlpFOUncGEnHSKcpKfJwTvepKByNBRIBMRGUPys9LJz0p/zdWfPdydwy0d1B1vo7G5g8aWdhqbO6hvTr43NrfT2NLBtromGlo6+gxvPbLSYxRlJ8NZQVY6+VlpwSudguy0oJZX3wuy0sjNTCMnPY3sjDg5GXGy0+NaAyeCApmIyLhiZsmpyrzMAR1/oiPB0RMdHGnp5GhrB0dPdHKktYOjrcHn1k6OtHbS1NbJgWNtNB3spKmti6a2TroH+GS+rPQYORlpZKcnQ1pORpzsIKzlZCTDW1Z6jIx4nIy0WPIVt+A9RkZaanuMjDQ75djke2ZajPRgu6c9PW6aqpURQYFMRET6lZ0RJzsj+cD2wXB3WjsSveHsePDe0p6gtaOLE50JWjuSrxMpn090vPpe39xOa0crJzoStHd109HzSvQ/anc2MtJiZMZjxONGWsyIx4y0WIy0eM+2EY/FUvYF7/Fke/opn089LmaGGcSC4NezbSnbGBhGzJJtPdtY0EbPd9AbIHu+t+d7IHkcKZ979JxjvZ9Tt08+x0g56JRz+voZ/e2nr59x6rFnUfepx5+6j37rO33wLsnL4IIpE057TJgUyEREZMiZGbmZySnKysKsIf1ud6cj0U1nwl8NaV3ddCReDW69+xIJOrq6Xw10iW46g/ee89qD7e5up7PbSSScrm4n0d0dvPsp7910JZy2zm66uhO9nxOvOTbZ3u2OA+7Q7Q7Jf5LtDo4nRxNTtj3lHBkeb5xTxv98eFlkP1+BTERERhUzIzMtTmYaMLCZ11HN/eSQ1hPkOGXbU44/+TMnHeAM/BzHTzm37/19fd+pYXIg5/RZd7/H9/Fd/fyMgcjLjDYSKZCJiIiMYGZG3CBlMlHGIN0tUERERCRiCmQiIiIiEVMgExEREYmYApmIiIhIxEILZGY22cx+b2abzWyjmX0iaP+SmW0xs/Vmdp+ZFQXt08zshJmtC17fDKs2ERERkZEkzBGyLuBv3H0ecDHwMTObD6wEFrr7ImAbcFvKOTvdfXHwujXE2kRERERGjNACmbvXuvvzwXYTsBmY5O6PuHtXcNizQHVYNYiIiIiMBsOyhszMpgFLgFWn7LoZeCjlc42ZvWBmT5jZ5cNRm4iIiEjUQr8xrJnlAfcCn3T34yntnyM5rfnjoKkWmOLujWZ2IfBLM1uQek5w3i3ALQBTpkwJu3wRERGR0IU6QmZm6STD2I/d/Rcp7TcB1wLv9+BZCe7e7u6NwfZaYCcw+9TvdPc73H2puy8tKysLs3wRERGRYWEe0pNLLflY9e8Dh939kyntK4CvAm9w9/qU9rLg2ISZTQf+AJzn7odP8zPqgZdD+QVOVgo0DMPPGYvUd+dG/Xf21HfnRv139tR352Ys999Ud+9zNCnMQHYZyVC1AegOmv8B+BrJx8E2Bm3PuvutZvanwP8mOY2ZAP6Xu/86lOIGyczWuPvSqOsYjdR350b9d/bUd+dG/Xf21HfnZrz2X2hryNz9j/T9JNQH+zn+XpLTmyIiIiLjiu7ULyIiIhIxBbKBuSPqAkYx9d25Uf+dPfXduVH/nT313bkZl/0X2hoyERERERkYjZCJiIiIREyB7DTMbIWZbTWzHWb291HXM9Kc5gHyxWa20sy2B+8TUs65LejPrWb2luiqHznMLB48oeKB4LP6bwDMrMjM7jGzLcGfwUvUdwNnZp8K/t6+ZGZ3mVmW+q9/ZvZdMztkZi+ltA26v8zsQjPbEOz7WnCLqDGtn777UvB3d72Z3WdmRSn7xmXfKZD1w8ziwH8BbwXmA+8NHo4ur+rvAfJ/Dzzq7rOAR4PPBPtuABYAK4D/Dvp5vPsEyWe99lD/DcztwG/dfS5wPsk+VN8NgJlNAv4aWOruC4E4yf5R//Xvf0j+7qnOpr++QfJpM7OC16nfORb9D6/9PVcCC919EbANuA3Gd98pkPVvGbDD3Xe5ewdwN3BdxDWNKP09QJ5kP30/OOz7wPXB9nXA3cFTGXYDO0j287hlZtXA24DvpDSr/87AzAqA1wN3Arh7h7sfRX03GGlAtpmlATnAAdR//XL3J4FTb1Q+qP4ysyqgwN2fCZ5S84OUc8asvvrO3R9x967g47NAdbA9bvtOgax/k4C9KZ/3BW3SBzv5AfIV7l4LydAGlAeHqU9f6z+Az/DqzZNB/TcQ04F64HvBdO93zCwX9d2AuPt+4MvAKySfI3zM3R9B/TdYg+2vScH2qe3j3c3AQ8H2uO07BbL+9TU3rUtS+2D9PEC+r0P7aBu3fWpm1wKHgme3DuiUPtrGa/+lARcA33D3JUALwXRRP9R3KYK1TtcBNcBEINfMbjzdKX20jdv+G4D++kv9eAoz+xzJ5S8/7mnq47Bx0XcKZP3bB0xO+VxNckhfUljfD5A/GAwvE7wfCtrVpydbDrzdzPaQnBK/0sx+hPpvIPYB+9x9VfD5HpIBTX03MFcBu9293t07gV8Al6L+G6zB9tc+Xp2aS20fl8zsJuBa4P3+6j24xm3fKZD17zlglpnVmFkGyUWG90dc04gSXOFyJ7DZ3b+asut+4KZg+ybgVyntN5hZppnVkFyUuXq46h1p3P02d69292kk/3w95u43ov47I3evA/aa2Zyg6U3AJtR3A/UKcLGZ5QR/j99Ecg2o+m9wBtVfwbRmk5ldHPT7B1POGVfMbAXwWeDt7t6asmv89p2769XPC7iG5NUfO4HPRV3PSHsBl5EcMl4PrAte1wAlJK842h68F6ec87mgP7cCb436dxgpL+CNwAPBtvpvYH22GFgT/Pn7JTBBfTeo/vsCsAV4CfghkKn+O21/3UVyvV0nydGaj5xNfwFLgz7fCXyd4AbtY/nVT9/tILlWrOe/Hd8c732nO/WLiIiIRExTliIiIiIRUyATERERiZgCmYiIiEjEFMhEREREIqZAJiIiIhIxBTIRGdfM7JNmlhN1HSIyvum2FyIyrgVPSljq7g1R1yIi41da1AWIiAyX4AHkPyP52JU48HOSz3L8vZk1uPsVZvZmkjdNzSR5A8oPu3tzENx+ClwRfN373H3HcP8OIjI2acpSRMaTFcABdz/f3RcC/0HyeXhXBGGsFPhH4Cp3v4DkkwA+nXL+cXdfRvIu4f8xzLWLyBimQCYi48kG4Coz+79mdrm7Hztl/8XAfOApM1tH8vmEU1P235Xyfkno1YrIuKEpSxEZN9x9m5ldSPKZq/9qZo+ccogBK939vf19RT/bIiLnRCNkIjJumNlEoNXdfwR8GbgAaALyg0OeBZab2czg+Bwzm53yFe9JeX9meKoWkfFAI2QiMp6cB3zJzLqBTuAvSU49PmRmtcE6sg8Bd5lZZnDOPwLbgu1MM1tF8n9m+xtFExEZNN32QkRkAHR7DBEJk6YsRURERCKmETIRERGRiGmETERERCRiCmQiIiIiEVMgExEREYmYApmIiIhIxBTIRERERCKmQCYiIiISsf8PZCSYEDcXZfgAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(trace_dic['loss'])\n",
"plt.title(\"ELBO\")\n",
"plt.xlabel(\"step\")\n",
"plt.ylabel(\"loss\");\n",
"savefig(\"loss\")\n",
"plt.show()\n",
"\n",
"\n",
"fig = plt.figure(figsize=(15,5))\n",
"\n",
"for i,param in enumerate(['m', 'b']):\n",
" plt.subplot(1,2,i+1)\n",
" plt.plot(trace_dic[param])\n",
" plt.ylabel(param)\n",
"\n",
"plt.tight_layout()\n",
"savefig(\"params\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最尤推定結果と真値の比較"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"m 2.8775715827941895 true m 3.069662196722378\n",
"b 1.8785737752914429 true b 1.7872261593667946\n"
]
}
],
"source": [
"trace = poutine.trace(model).get_trace()\n",
"\n",
"print('m', trace.nodes['m']['value'].item(), 'true m', true_m)\n",
"print('b', trace.nodes['b']['value'].item(), 'true b', true_b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"推定したパラメータでサンプリング"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAE9CAYAAAA4dXeWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3RVxdfG8e8kBAihFxUISNSI9FCFVwVRRBSUKr333lFQQMQCIk2aoUjvIFIVGyAgIEVpSvkJgvRgINRASDLvHxeTADdwgSQ35fmsxSJ3Zs85+0CMmznnzBhrLSIiIiIStzzcnYCIiIhIcqQiS0RERCQeqMgSERERiQcqskRERETigYosERERkXigIktEREQkHqRydwLOZM+e3ebLl8/daYiIiIjc044dO/611ua4vT1RFln58uVj+/bt7k5DRERE5J6MMUedtet2oYiIiEg8UJElIiIiEg9UZImIiIjEg0T5TJaIiEhicOPGDY4fP861a9fcnYokAmnTpsXX1xcvLy+X4lVkiYiIxOL48eNkyJCBfPnyYYxxdzriRtZagoODOX78OH5+fi6N0e1CERGRWFy7do1s2bKpwBKMMWTLlu2+ZjVVZImIiNyFCiz5z/1+L6jIEhERScSMMTRp0iTqc3h4ODly5KBatWoATJ8+nc6dO8fZ+datW8emTZuiPgcGBjJz5sw4OfYnn3xy32Me9vqaN2/O4sWLAdiwYQOFChUiICCA0NDQBz6mq1RkiYiIJGI+Pj7s3bs3qij44YcfyJ07d7yd7/Yiq3379jRt2jROjv0gRVZcmjNnDr1792bnzp14e3vH+/lUZImIiCRyr732GqtWrQJg3rx5NGjQ4L7G79ixgwoVKlCyZEleffVVTp06BcCYMWMoWLAgRYsWpX79+hw5coTAwEBGjRpFQEAAGzZsYNCgQQwfPhyAF198kR49elC+fHkKFCjAtm3bqFWrFv7+/vTv3z/qfDVq1KBkyZIUKlSISZMmAdC3b19CQ0MJCAigUaNGAMyePZsyZcoQEBBAu3btiIiIAGDatGk8/fTTVKhQgV9++cXpNQ0aNIgmTZrw0ksv4e/vz+TJkwHHA+qdO3emYMGCVK1alaCgIACmTJnCwoULGTx4cNT54521NtH9KlmypBUREXG3P//8090pWB8fH7tr1y5bu3ZtGxoaaosVK2bXrl1rq1ataq21dtq0abZTp06xjg8LC7PlypWzQUFB1lpr58+fb1u0aGGttTZnzpz22rVr1lprz58/b6219v3337efffZZ1PiYnytUqGDffvtta621o0ePtjlz5rQnT560165ds7lz57b//vuvtdba4OBga621V69etYUKFYpq9/HxiTrun3/+aatVq2bDwsKstdZ26NDBzpgxw548edLmyZPHBgUF2evXr9v/+7//c3p977//vi1atKi9evWqPXv2rPX19bUnTpywX331la1UqZINDw+3J06csJkyZbKLFi2y1lrbrFmzqK8flLPvCWC7dVLPaAkHEXG7PccvuBRXxDdTPGcSO2c5ujOfh5GcriUhde/enZ07d8bpMQMCAhg9evQ944oWLcqRI0eYN28er7/++n2d48CBA+zdu5dXXnkFgIiICHLmzBl13EaNGlGjRg1q1Kjh0vHefPNNAIoUKUKhQoWijvXEE09w7NgxsmXLxpgxY/j6668BOHbsGP/73//Ili3bLcf56aef2LFjB6VLlwYgNDSURx55hF9//ZUXX3yRHDkc+y3Xq1ePgwcPOs2levXqeHt74+3tTcWKFdm6dSvr16+nQYMGeHp6kitXLl566aX7+eOKUyqyREREkoA333yT3r17s27dOoKDg10eZ62lUKFCbN68+Y6+VatWsX79epYvX86HH37IH3/8cc/jpUmTBgAPD4+or//7HB4ezrp16/jxxx/ZvHkz6dKl48UXX3S67IG1lmbNmjFkyJBb2pcuXeryW3y3x/33ObG8EaoiS0RExAWuzDjFp5YtW5IpUyaKFCnCunXrXB6XP39+zp49y+bNmylXrhw3btzg4MGDFChQgGPHjlGxYkWef/555s6dy+XLl8mQIQMXL1584DwvXLhAlixZSJcuHfv372fLli1RfV5eXty4cQMvLy9efvllqlevTo8ePXjkkUc4d+4cly5d4tlnn6Vbt24EBweTMWNGFi1aRLFixZyea9myZfTr148rV66wbt06hg4dSkREBBMnTqRp06YEBQWxdu1aGjZs+MDX8zBUZImIiCQBvr6+dOvWzWnf9OnTWbp0adTnLVu24OvrC0Dq1KlZvHgxXbt25cKFC4SHh9O9e3eefvppGjduzIULF7DW0qNHDzJnzswbb7xBnTp1WLZsGWPHjr3v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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"\n",
"# traceでパラメータを取得\n",
"trace = poutine.trace(model).get_trace()\n",
"m = trace.nodes['m']['value'].item()\n",
"b = trace.nodes['b']['value'].item()\n",
"\n",
"# generate a pdf\n",
"estimated_dist = dist.Laplace(m, b)\n",
"y = [estimated_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"# plot\n",
"plt.plot(x_range, y, c='k', label='ML estimated pdf')\n",
"plt.plot(x_range, true_y, c='r', label=r'true pdf')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"savefig(\"sampled-pdf\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"観測データobsのサンプリング."
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAE9CAYAAAA4dXeWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3de5QV5Z3v//cXguGASoygUS5CIirKTUA0Bwdloo6OLlFjlpgw0ajByzieJD8d9eTm5JgVXTH+HNeIDJMQnV+8HhMSTIjX0YhGM4Ai4AUlSEIHDWqi0YCJxO/vj950mmY3VENX793d79davXrXU89T9d0F3Xx4qnZVZCaSJElqXz1qXYAkSVJXZMiSJEkqgSFLkiSpBIYsSZKkEhiyJEmSSmDIkiRJKsH7al1ANf3798+hQ4fWugxJkqRtWrx48WuZOaBle12GrKFDh7Jo0aJalyFJkrRNEfGrau2eLpQkSSqBIUuSJKkEhixJkqQS1OU1WZIk1YN3332XhoYG3nnnnVqXojrQu3dvBg0aRK9evQr1N2RJktSKhoYGdtllF4YOHUpE1Loc1VBm8vrrr9PQ0MCwYcMKjfF0oSRJrXjnnXfYfffdDVgiIth9993bNKtpyJIkaSsMWNqkrX8XDFmSJEklMGRJkiSVwJAlSVIntHr1akaOHFnrMrZwxRVXcM011+xwnzfeeIOZM2duVw3vvfceJ5xwAqNGjWLNmjWFxnzhC19gxIgRPPTQQ9u1z2r8dKEkSQUta3izXbc3alC/dt3ejshMMpMePepj/mVTyLrgggvaPHbZsmWsW7eOZcuWFR5z7bXXMnHiRObMmcOUKVPavM9q6uNISurWljW8Weir3mrsrLrSe+kurr32WkaOHMnIkSO57rrrmto3btzIGWecwejRozn11FNZv349f/zjHzn++OMZM2YMI0eO5I477gDge9/7HhMnTmTs2LGce+65/OUvf2H16tWMGDGCCy64gHHjxnH22WdvNnt0xRVX8K1vfavV8Zt8/etfZ//99+eoo45ixYoVVd9Da31OOukkxo8fz0EHHcTs2bOb2i+77DJ++ctfMnbsWC655JJW+1XzxhtvsMcee2zWNmXKFO6//34AvvSlL3HRRRdtMe5DH/oQb7zxxla33RbOZEmSVMcWL17Md7/7XX7xi1+QmRx66KEcccQR7LbbbqxYsYLvfOc7TJo0ibPOOouZM2cybNgw9t57b37yk58A8Oabb/Lcc89xxx138Nhjj9GrVy8uuOACbrnlFiZPnsyKFSv47ne/y8yZM3nqqaf43Oc+1zR7dOedd3LPPfe0Ov7Tn/40ixcv5vbbb+epp55i48aNjBs3jvHjx2/xHlrrM2fOHD74wQ+yYcMGDjnkED7+8Y+z++67c9VVV7F8+XKWLFkCwO9+97uq/ar5y1/+ssWM3L/8y7/wla98hXXr1vHUU08xb968Lcb16NFjs/C4o5zJkiSpjj366KOcfPLJ9O3bl5133plTTjmFBQsWADB48GAmTZoEwPTp03n00UcZNWoUDzzwAJdeeikLFiygX79+PPjggyxevJhDDjmEsWPH8uCDD7Jq1SoA9tlnHw477DAADj74YNatW8fatWt5+umn2W233RgyZMhWxy9YsICTTz6ZPn36sOuuu3LiiSdu8R621uf6669nzJgxHHbYYaxZs4YXX3yx6nEo2g9gyZIlDBo0aLO2yZMnk5lce+213H777fTs2ROAL3/5y019Bg4cyAsvvNBud/h3JkuSpDqWma2ua3nfpohgv/32Y/HixcyfP5/LL7+cY445ht12240zzjiDb3zjG5v1X716NX379t2s7dRTT+Wuu+7ilVdeYdq0aU01VBvfWh1F+zz88MM88MADPP744/Tp04cjjzyyasAp2g/gk5/8JD/+8Y95+OGHN2tftmwZL7/8Mv3792eXXXYB4JVXXmHjxo1NfT7ykY9w4IEHNgXLUaNGbfN9bU2hmayIODYiVkTEyoi4rMr6qRGxNCKWRMSiiDi82brVEbFs07odqlaSpG5m8uTJ/PCHP2y63mru3Ln8zd/8DQC//vWvefzxxwG47bbbOPzww1m7di19+vRh+vTpXHzxxTz55JN87GMf46677mLdunVA46m3X/3qV1X3N23aNG6//XbuuusuTj31VICtjp88eTJz585lw4YNvPXWW9x9991V30O1Pm+++Sa77bYbffr04fnnn+eJJ55oGrPLLrvw1ltvbbNfS7feeivf/OY3N7t27eWXX+ZTn/oUP/rRj+jbty/33nsvAE899RRjx45t6vf000+zatUqfvOb3+xwwIICM1kR0RO4ATgaaAAWRsS8zHy2WbcHgXmZmRExGrgTOKDZ+imZ+doOVytJUjczbtw4zjzzTCZOnAjAOeecw8EHH9x00frNN9/Mueeey/Dhwzn//PNZsGABl1xyCT169KBXr17ceOONHHjggVx55ZUcc8wxvPfee/Tq1YsbbriBD33oQ1vs76CDDuKtt95i4MCB7LXXXgCtjt9nn30YN24cp512GmPHjmWfffZpCoAt30O1PsceeyyzZs1i9OjR7L///k2nLQF23313Jk2axMiRIzn66KPZuHFj1X7V7L///k1Bbv369Zxyyil861vfYsSIEXz5y1/m0ksv5e/+7u9YsmQJp5xyStO43//+9wwdOrTwA6C3JbY2DQkQER8FrsjMv6ssXw6QmVXnDCv952TmiMryamBCW0LWhAkTctEiJ72k7qLop9tq+XH3ajXW08fv26IrvZeyPffcc4wYMaLWZaiN/vu//5t/+qd/4oknntjqqcyzzz6b//iP/2i6SP7OO+/k+9//ftMnMqup9nciIhZn5oSWfYucLhwINL+TV0OlreUOTo6I54GfAGc1W5XAfRGxOCJmFNifJEnSdhs7diyDBw9m7NixW70Z6Xe+852mgPWFL3yBq6++mnPOOafd6ihy4Xu1CLjF9FdmzgXmRsRk4P8AR1VWTcrMtRGxB3B/RDyfmY9ssZPGADYDYMiQIUXrlyRJ2sxOO+3EXXfd1aYx1157bbvXUWQmqwEY3Gx5ELC2tc6VAPWRiOhfWV5b+b4OmAtMbGXc7MyckJkTBgwYULB8SZKk+lQkZC0EhkfEsIjYCZgGbHYHr4jYNyonPSNiHLAT8HpE9I2IXSrtfYFjgOXt+QYkSZLq0TZPF2bmxoi4ELgX6EnjRe3PRMR5lfWzgI8Dn46Id4ENwGmVTxruSeMpxE37ujUz7ynpvUiSJNWNQjcjzcz5wPwWbbOavb4auLrKuFXAmB2sUZIkqdPxsTqSJEklMGRJkiSVwJAlSZIAOPLII2nLzcAffvhhTjjhhHbZ7nXXXcf69esL7/uKK64o3LdWfEC0JElFLV7cvtsbP759t9eJXXfddUyfPp0+ffpstd+jjz7K5z//edasWcP8+fO56qqr+Nu//dsOqrJtnMmSJKlO/fGPf+T4449nzJgxjBw5sulxL1/72tc45JBDGDlyJDNmzGDTI/KOPPJIPv/5zzN58mRGjBjBwoULOeWUUxg+fDhf+tKXAFi9ejUHHHAAZ5xxBqNHj+bUU0+tOoN033338dGPfpRx48bxiU98grfffhuAe+65hwMOOIDDDz+cH/zgB1Xr3rBhA9OmTWP06NGcdtppbNiwoWnd+eefz4QJEzjooIP46le/CsD111/P2rVrmTJlClOmTGm1HzTemf0b3/gG5513Hvfffz/77rvvjh7m0hiyJEmqU/fccw977703Tz/9NMuXL+fYY48F4MILL2ThwoUsX76cDRs28OMf/7hpzE477cQjjzzCeeedx9SpU7nhhhtYvnw5N910E6+//joAK1asYMaMGSxdupRdd92VmTNnbrbf1157jSuvvJIHHniAJ598kgkTJnDttdfyzjvv8NnPfpa7776bBQsW8Morr1St+8Ybb6RPnz4sXbqUL37xiyxuNgP49a9/nUWLFrF06VJ+9rOfsXTpUi666CL23ntvHnroIR566KFW+216f5v2269fv7p+SowhS5KkOjVq1CgeeOABLr30UhYsWEC/fo0P8n7ooYc49NBDGTVqFP/1X//FM8880zTmxBNPbBp70EEHsddee/H+97+fD3/4w03P8Rs8eDCTJk0CYPr06Tz66KOb7feJJ57g2WefZdKkSYwdO5abb76ZX/3qVzz//PMMGzaM4cOHExFMnz69at2PPPJI07rRo0czevTopnV33nkn48aN4+CDD+aZZ57h2WefrbqN1vrNnj2bO+64g+uvv57TTz+d1atXt/WwdhivyZIkqU7tt99+LF68mPnz53P55ZdzzDHH8M///M9ccMEFLFq0iMGDB3PFFVfwzjvvNI15//vfD0CPHj2aXm9a3rhxIwCVm4Q3abmcmRx99NHcdtttm7UvWbJki76tqdbvpZde4pprrmHhwoXstttunHnmmZvVXqTfgQceyN13380Xv/hFBg4cyNlnn82DDz5YqKaO5kyWJEl1au3atfTp04fp06dz8cUX8+STTzaFjf79+/P222+3+UHIAL/+9a95/PHHAbjttts4/PDDN1t/2GGH8dhjj7Fy5UoA1q9fzwsvvMABBxzASy+9xC9/+cumsdVMnjyZW265BYDly5c3ner7wx/+QN++fenXrx+//e1v+elPf9o0ZpddduGtt97aZr/lyxufzterVy/GjRvXNKYeOZMlSVKdWrZsGZdccgk9evSgV69e3HjjjXzgAx/gs5/9LKNGjWLo0KEccsgh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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"obs = []\n",
"for _ in range(5000):\n",
" trace = poutine.trace(model).get_trace()\n",
" obs.append(trace.nodes['obs']['value'].item())\n",
"\n",
"plt.xlabel('posterior samples')\n",
"\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"plt.hist(obs, range=(x_min, x_max), bins=100, alpha=0.2, density=True, color='r', label=r'sampled data$')\n",
"\n",
"plt.legend()\n",
"savefig(\"pdf-obs\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# コーシー分布の最尤推定"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"保存先設定"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [],
"source": [
"experiment_name = \"cauchy\"\n",
"\n",
"file_format = \"png\" # \"pdf\"\n",
"savedir = \"./20200627_pyro_5th_trial/\"\n",
"os.makedirs(savedir, exist_ok=True)\n",
"\n",
"def savefig(desc):\n",
" fig.savefig(os.path.join(savedir, '{0}_{1}.{2}'.format(\n",
" experiment_name, desc, file_format)), bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真のmとbをランダムに作成"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"m = 7.215438617683047 b = 0.37987790840959357\n",
"x_range: from 5.696 to 8.726\n"
]
}
],
"source": [
"true_m = np.random.rand() * 10\n",
"true_b = np.abs(np.random.rand() * 2)\n",
"print('m =', true_m, 'b =', true_b)\n",
"\n",
"x_range = np.arange(true_m - 4*true_b, true_m + 4*true_b, 0.01)\n",
"x_max = x_range.max()\n",
"x_min = x_range.min()\n",
"print('x_range: from {0:.3f} to {1:.3f}'.format(x_min, x_max))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真の分布からデータをサンプリング.最尤推定の解析解を計算."
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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8BXQzFp74nbjrLXjrLXB1tpgf39/T+xaRERExFFulyljTAFgDvCUtXan+5FEREREko8Ev+YzxkwDagE5jTFhwNuAD4C1dgwwCPADRhtjACKttcGJFVhEREQkKXHlbL72CazvAfTwWCKRFGhz2JlblpUN8E30194v8WV0ar/ufDbJ4bMW8RT9efccXQFdRERExA0qUyIiIiJuUJkSERERcYPKlIiIiIgbVKZERERE3KAyJSIiIuIGlSkRERERN6hMiYiIiLhBZUpERETEDSpTIiIiIm5QmRIRERFxg8qUiIiIiBtUpkRERETcoDIlIiIi4gaVKRERERE3qEyJiIiIuEFlSkRERMQNKlMiIiIiblCZEhEREXGDypSIiIiIG1SmRERERNygMiUiIiLiBpUpERERETeoTImIiIi4IcEyZYwZb4wJN8Zsuc16Y4z53Biz2xizyRhTyfMxRURERJImV2amvgEa3GF9Q6BYzKMn8IX7sURERESShwTLlLX2V+DkHYY0AybaaGuBbMaYvJ4KKCIiIpKUeeKYqfzAoRueh8UsExEREUnxPFGmTDzLbLwDjelpjAkxxoRERER4YNciIiIizvJEmQoDAm94HgAciW+gtXactTbYWhvs7+/vgV2LiIiIOMsTZWo+0DnmrL4HgTPW2qMe2K6IiIhIkued0ABjzDSgFpDTGBMGvA34AFhrxwCLgUbAbuAC0C2xwoqIiIgkNQmWKWtt+wTWW+A5jyUSERERSUZ0BXQRERERN6hMiYiIiLhBZUpERETEDSpTIiIiIm5QmRIRERFxg8qUiIiIiBtUpkRERETcoDIlIiIi4gaVKRERERE3qEyJiIiIuEFlSkRERMQNKlMiIiIiblCZEhEREXGDypSIiIiIG1SmRERERNygMiUiIiLiBpUpERERETeoTImIiIi4QWVKRERExA0qUyIiIiJuUJkSERERcYO30wFERO7VhQv/sm71L6z77Rd2hW7l0IH9XPz3HADZsmWjaNGiVKhQgWIVq1O52sOkS5/e4cQikhKpTIlIsrNr+zamjB/DkvlzuPDvedJnyEiJ0kFUebgGhfPlwlrLyZMn2bFjByNHjuTy5U/J4utL01bt6NitN4GFCjv9FkQkBVGZEpFk4/ChAwx/fzBLF84lfYaMNGjagkYtnqRSlQdJmy4dAGUDfG96zYULF5gwayGL5s5i1uQJzPj2K55o3Z5R//uIvHnzOvE2RCSFcemYKWNMA2PMDmPMbmPMa/Gs9zXGLDDG/G2M2WqM6eb5qCKSWkVGRvLVyGE0r12NX1Ys5Zl+r/Djui3899NRPFjj0dgiFZ+MGTNSs+7jfDjyK5b8vol2XZ9h4dyZlCxZktGjR2OtvY/vRERSogTLlDHGCxgFNARKA+2NMaXjDHsO2GatLQ/UAj41xqT1cFYRSYX27dtHzZo1+fzD//JI3frM/2U9/f7zJtmy57jrbfnnzsOAwUOZs3wN1apV47nnnqNRo0YcO3YsEZKLSGrhysxUVWC3tXavtfYKMB1oFmeMBbIYYwyQGTgJRHo0qYikOkuXLqVy5cps27aNoSO+YtjYieTJm9/t7RYsXISlS5cyatQoVq5cSeXKlVm7dq0HEotIauRKmcoPHLrheVjMshuNBEoBR4DNwAvW2iiPJBSRVGncuHE0atSIwMBANmzYQKPmrT26fWMMffr0Ye3ataRLl45HH32UHxd979F9iEjq4EqZMvEsi3uQwePARiAfUAEYaYzJesuGjOlpjAkxxoRERETcdVgRSfmstQwZMoRevXrRoEEDfv/9d4oUKZJo+ytfvjwhISFUqVKFV5/tyuyp3ybavkQkZXKlTIUBgTc8DyB6BupG3YA5NtpuYB9QMu6GrLXjrLXB1tpgf3//e80sIilUVFQUL774Im+++SadOnVi3rx5ZMqUKdH3myNHDn788Ueq13qM/w54ga9H/U8HpouIy1y5NMJ6oJgxpjBwGGgHdIgz5iBQF1hljMkNlAD2ejKoOGdz2BmXxsU9JT01iO+zSeqfQ1LNbK2lT58+jB07lo7de/PKoPfZfvzCXW/H1T+v8Y377OupvPVSHz4b+g6XLl7guVfeuOv9u7Ifpz5vd/6/fLvXJoU/O56g33PijgTLlLU20hjTF1gKeAHjrbVbjTG9Y9aPAd4FvjHGbCb6a8EB1tp/EjG3iKQg1lpee+01xo4dy4ABA+jw3GtEn89yf/n4+PD+Z2NJlz49Yz/7mCxZffn4v+4XKhFJ2Vy6aKe1djGwOM6yMTf8fASo79loIpJaDB06lI8++ohnn32WDz74gC2HzzqWJU2aNAwaOpx/z5/jk3ffpFShvDz99NOO5RGRpE9XQBcRR33xxRcMHDiQjh07MnLkSEdmpOLy8vLig8/Gcf7cOZ555hmyZs1K69aePZtQRFIOl66ALiKSGBYvXkzfvn1p0qQJEyZMIE2apPMrySdtWoaNm8iDDz5Ip06dWLNmjdORRCSJSjq/uUQkVdm8eTPt2rWjfPnyTJ8+HR8fH6cj3SJjxkzMnz+fgIAAmjdvzoEDB5yOJCJJkMqUiNx34eHhNG3alMyZM7NgwYL7cvmDe+Xn58fChQu5fPkyTZs25dy5c05HEpEkRmVKRO6ry5cv07x5c8LDw5k/fz7587t/e5jEVrJkSWbNmsW2bdvo0KED165dczqSiCQhKlMicl/179+fNWvWMHHiRIKDg52O47J69erx2WefsXDhQgYPHux0HBFJQlSmROS+mTRpEmPGjOE///lPsjw7rk+fPnTr1o333nuPhQsXOh1HRJIIlSkRuS92hm6lV69ePProowwZMsTpOPfEGMOoUaOoWLEinTp1Ys+ePU5HEpEkQGVKRBLd+XNneblXZ3x9fZk+fTre3sn3EncZMmTgu+++I02aNLRq1YoLF+7+ljcikrKoTIlIorLW8tbLzxF2cD8zZswgT548TkdyW+HChZkyZQqbNm2ib9++TscREYepTIlIopr05ShW/LCAF14bTM2aNZ2O4zENGzbkjTfeYMKECUyZMsXpOCLiIJUpEUk0f2/4g/+9/zZ1GzShS6+UN4Pz9ttvU716dXr37s3u3budjiMiDlGZEpFEce7sGQb060HufPn576ejksQ99zzN29ubqVOn4uPjQ9u2bbl8+bLTkUTEASpTIuJx1lqGvPEKx48c5sMRX5Elq6/TkRJNgQIFmDBhAn/++Sevvfaa03FExAEqUyLicQvnzGDxvFn07j+A8pWrOh0n0TVr1ox+/foxfPhwFixY4HQcEbnPVKZExKMO7d/HkDdeoVLVh+jR72Wn49w3H330ERUqVKBr166EhYU5HUdE7iOVKRHxmKtXrzKgXw+8vL344PNxeHl5OR3pvkmfPj0zZszg8uXLdOzYUffvE0lFVKZExGNGf/oBWzZu4O0PPydv/kCn49x3xYsXZ+TIkfz6668MHTrU6Tgicp+oTImIR/zx+6+MH/0/WrR7ivqNmzkdxzFdunShXbt2vP3226xZs8bpOCJyH6hMiYjbTp86ycAXelOgcBEGvJO6Z2SMMYwZM4bAwEA6dOjAubNnnI4kIolMZUpE3GKt5Z3/PM/JExF8OPIrMmbM5HQkx/n6+jJ16lQOHTrEewNfxlrrdCQRSUQqUyLilnHjxrFiyUJeGDCI0mUrOB0nyXjooYcYPHgwP3w/mwXfTXc6jogkIpUpEblnoaGhvPjiizxcsw5PPfOc03GSnNdff53K1R7m/Tdf5eC+vU7HEZFEojIlIvfk0qVLtG/fnkyZMvHusNGkSaNfJ3F5eUVfIsLb25sBfbtz9coVpyOJSCJw6befMaaBMWaHMWa3MSbe+yUYY2oZYzYaY7YaY37xbEwRSWpef/11/v77b7755hv8c+dxOk6SlSdfAIM//pytm0/dsTYAACAASURBVP5i5CdDnI4jIokgwTJljPECRgENgdJAe2NM6ThjsgGjgSestWWANomQVUSSiCVLljB8+HD69etH48aNnY6T5D3W8Alad+zKhC8+Y+2qlU7HEREPc2Vmqiqw21q711p7BZgOxL2ITAdgjrX2IIC1NtyzMUUkqTh+/DhdunQhKCiIjz76yOk4ycarb79P4aLFeaN/byIiIpyOIyIe5EqZyg8cuuF5WMyyGxUHshtjVhpjNhhjOnsqoIgkHdZaunXrxpkzZ5g2bRrp06d3OlKykSFDRj4a9TWnT5+ke/fuulyCSAriSpky8SyL+1vAG6gMNAYeB94yxhS/ZUPG9DTGhBhjQvQvM5HkZ8SIEfzwww98+umnBAUFOR0n2SlRuiwvDnyHBQsWMGrUKKfjiIiHuFKmwoAbb7IVAByJZ8wSa+2/1tp/gF+B8nE3ZK0dZ60NttYG+/v732tmEXHApk2b+M9//kOTJk3o06eP03GSrY5P96ZRo0a88sorbN682ek4IuIBrpSp9UAxY0xhY0xaoB0wP86Y74FHjDHexpiMQDUg1LNRRcQpFy9epH379mTPnp3x48djTHwT1uIKYwwTJkwgW7ZstG/fnosXLzodSUTclGCZstZGAn2BpUQXpJnW2q3GmN7GmN4xY0KBJcAm4A/gK2vtlsSLLSL30yuvvMK2bduYOHEimlV2X65cuZg4cSJbt27l5ZdfdjqOiLjJ25VB1trFwOI4y8bEef4x8LHnoolIUjB//nxGjx7Nyy+/TL169ZyOk2LUr1+fl19+mU8//ZT69evTvHlzpyOJyD3SJYtF5LaOHDnC008/TcWKFRkyRBec9LT333+fSpUq0b17dw4fPux0HBG5RypTIhKva9eu0aVLFy5evMi0adNIly6d05FSnLRp0zJt2jQuX77MU089xbVr15yOJCL3QGVKROL1wQcfsHz5cj777DNKlCjhdJwUq3jx4owYMYKff/5ZF0EVSaZUpkTkFitXruTtt9+mY8eOdO/e3ek4KV7Xrl1p27Ytb731FuvWrXM6jojcJZUpEbnJ8ePHad++PcWKFWPMmDG6DMJ9YIxhzJgxBAQE0KFDB86ePet0JBG5CypTIhLr2rVrdOrUidOnTzNz5kwyZ87sdKRUI1u2bEyZMoX9+/fz3HPPOR1HRO6CypSIxLp+nNSIESMoV66c03FSnerVq/P2228zefJkvvnmG6fjiIiLVKZEBNBxUknFG2+8QZ06dXj22WfZuHGj03FExAUqUyLC0aNHdZxUEuHl5cW0adPw8/OjVatWnDp1yulIIpIAlSmRVO7qlSu0adOGs2fPMmvWLB0nlQTkypWLWbNmcejQITp37kxUVJTTkUTkDlSmRFK5j//7Br/99hvjx4+nbNmyTseRGA899BDDhg1j4cKFvP/++07HEZE7UJkSScW+nzWV6d9+ycsvv0zbtm2djiNxPPfcc3To0IFBgwbx448/Oh1HRG5DZUokldq2eSPvvf4SVR5+hKFDhzodR+JhjGHcuHGUKVOGDh06cODAAacjiUg8VKZEUqFTJ0/wUs+nyO6Xk49HT8Db29vpSHIbmTJl4rvvvuPq1as0a9aM8+fPOx1JROJQmRJJZSIjIxnQtzsR4ccZNnYiOfxyOh1JElC8eHFmzJjB5s2b6dKliw5IF0liVKZEUpmPBr/O2lUreXPIpwRVqOR0HHFRgwYN+OSTT5gzZw6DBw92Oo6I3EBz+yKpyMiRI5n+7Zd06dWPFu2ecjqO3KX+/fuzefNm3n33XcqUKaOTBkSSCM1MiaQSS5Ys4YUXXqBWvYb0f32w03HkHhhj+OKLL6hevTpdu3Zlw4YNTkcSEVSmRFKFLVu28OSTT1KuXDmGjvgSLy8vpyPJPUqXLh1z5swhV65cNGvWjCNHjjgdSSTVU5kSSeHCw8Np2rQpmTNnZsGCBWTMpCucJ3e5cuVi/vz5nD59msaNG3P27FmnI4mkaipTIinYhQsXaN68OcePH2f+/PkEBAQ4HUk8pHz58syaNYvNmzfTqlUrrly54nQkkVRLZUokhYqMjKRt27asXbuWSZMmERwc7HQk8bCGDRvy5Zdfsnz5cnr06IG11ulIIqmSzuYTSYGstfTs2ZOFCxcyevRoWrVq5XQkSSTdunUjLCyMQYMGERAQoPv4iThAZUokBRo4cCATJkxg0KBBPPvss07HkUT25ptvEhYWxgcffEBAQAB9+vRxOpJIquLS13zGmAbGmB3GmN3GmNfuMK6KMeaaMaa15yKKyN0YPnw4Q4cOpVevXrq4YyphjGHUqFE0bdqUvn37Mnv2bKcjiaQqCZYpY4wXMApoCJQG2htjSt9m3IfAUk+HFBHXTJkyhRdffJFWrVoxatQojDFOR5L7xNvbm+nTp/PQQw/RoUMHFi1a5HQkkVTDlZmpqsBua+1ea+0VYDrQLJ5x/YDvgHAP5hMRF82dO5euXbtSq1YtJk+erGtJpUIZM2Zk8eLFlCtXjlatWrFixQqnI4mkCq6UqfzAoRueh8Usi2WMyQ+0AMZ4LpqIuGr+/Pk8+eSTBAcH8/3335M+fXqnI4lDfH19Wbp0KcWLF+eJJ55g9erVTkcSSfFcKVPxfU8Q9/zb4cAAa+21O27ImJ7GmBBjTEhERISrGUXkDhYtWkTr1q2pWLEiS5YsIWvWrE5HEof5+fmxbNkyAgMDadSoEevXr3c6kkiK5srZfGFA4A3PA4C49y8IBqbHHJ+RE2hkjIm01s67cZC1dhwwDiA4OFgXRHHT5rAztywrG+DrQJK74+ncrm4vvnF3s+/bvT6xx93ptb+tXMHz3dtTrGQZ/jdhFgfPAefufrt389m4kzs5Soz3686fWdfH5WbFihXUrFmTxx9/nBUrVuDt/8A9Jr5/XP283fmzeb9+Tya1PK64X5mT699ft+PKzNR6oJgxprAxJi3QDph/4wBrbWFrbSFrbSFgNtAnbpESEc9au2olL/ToQJFiJRg7ZS5ZfbM5HUmSmPz587NixQqyZMlCnTp1+PtPzVCJJIYEy5S1NhLoS/RZeqHATGvtVmNMb2NM78QOKCK3+nXFUvp1a0ehB4oybtr3+GbP7nQkSaIKFSrEr7/+ip+fH706tCBkjY6hEvE0l64zZa1dbK0tbq0tYq0dErNsjLX2lgPOrbVdrbW6yIlIIlk8bzb9e3SkSPGSjJv2Pdmy53A6kiRxBQsWZNWqVeTNH8CzT7Vm9c/LnY4kkqLo3nwiyciMiV/z+vPPUCG4Gl/NmE8Ov5xOR5JkIm/evHw9cyGFixbj+e7t+WnJQqcjiaQYKlMiyYC1lnGff8KQN16mZt3HGT1xNpmz6Kw9uTs5/HLy1YwFlC5bgZd7d2H+7GlORxJJEVSmRJK4qKgoPn3vLUZ+/B6NWzzJsHGTSJ8hg9OxJJnK6puNsVPmEPxQDd588VnGffYx1urkahF3qEyJJGGXLl7kP889zcRxI2nX5RmGDB+Dj4+P07EkmcuUOQujv51F09btGPnJEAb/53muXr3qdCyRZMuV60yJiANORITzfPcObNm4gZfeeJcuvfrqXnviMT5p0/LesC/Ilz+QsZ99zPGjR/h0zDdkypzF6WgiyY5mpkSSoN07Qun4RF12hW5l2NiJdO3dT0VKPM4Yw3OvvMHgjz9n3eqVdGvdiONH416TWUQSojIlksT8/stPdG7xOFeuXGHC7MXUbdjU6UiSwrVs15mR38zk4P59tG9Sm99++83pSCLJisqUSBJhrWXCmM95rksb8gUEMnXBCsqUr+h0LEklqteqy+Tvl5ExYyZq167N2LFjnY4kkmyoTIkkAefPneWlXp3535BB1GnQhG/nLCFPvgCnY0kqU7REKaYu+InHHnuM3r1707NnTy5fvux0LJEkT2VKxGG7d4TSvkkdVv64mFfeeo9PvtBBwOKcrNmysWDBAgYOHMiXX35JrVq1OHz4sNOxRJI0lSkRB/3w/Xd0aFqX8+fO8uX0+XTuqTP2xHleXl4MGTKE2bNns3nzZsqXL88vy5c4HUskyVKZEnHAhX/P8/YrfRnQtzulgsoxY/EvBD9Y3elYIjdp1aoVGzZsIDAwkH7d2jH07QFc0dd+IrdQmRK5zzb/tYEnG9Rk3swp9Oj7Ml/NWECuPHmdjiUSrxIlSrB27Vo6du/N1PFj6dTsMfbt2eV0LJEkRWVK5D65du0a4z77mM4t6nP16hW+nrmQ5we8pSuaS5KXLl06BgweyogJ0zl25DBtGz7K7Cnf6DY0IjFUpkTug/17d/N0m8aM/GQI9Zu0YNbS1fpaT5KdRx9rwKylqylfuQr/fa0/vTq24MCBA07HEnGcypRIIoqMjGT86OG0rl+d3Tu28f5nY/lw5Fdk9c3mdDSRe5I7bz7GTZ3Hm+8PY9OfIQQFBTF27FjNUkmqpjIlkkhCt/xNh6Z1GP7BYB6pXY+5K9bRpGVbp2OJuM0Yw5NPPc13y36jWrVq9O7dm3r16rFv3z6no4k4QmVKxMMuXrzAZ0P/S4cmdYg4foxPx37L/76crIPMJcXJH1iQZcuWMWbMGNatW0fp0qV59913daFPSXVUpkQ8xFrLj4u+p3ntqnw9ahhNWrZl3op11GvUzOloIonGGEOvXr0IDQ2lSZMmDBo0iKCgIJYuXep0NJH7RmVKxAN27wjlmfbNeKV3F7L6ZmPC7MW8O2w0vtmzOx1N5L4ICAhg1qxZLF26FGMMDRo0oHXr1hw8eNDpaCKJTmVKxA2nT53kw8Gv0ebxGmzfsomB733CtEUrqVztYaejiTiifv36bN68mXfffZdFixZRokQJXn/9dc6cOeN0NJFEozIlcg8uXrzAVyOH0bhGBaaOH0vL9l1Y8OsG2nXpgbe3t9PxRByVLl063nzzTbZv307r1q0ZOnQoRYsWZeTIkVy9etXpeCIepzIlcheuXr3KrMkTaFKjEp9/+F8qV6vOd8t+560PhpE9h5/T8USSlIIFCzJp0iRCQkIoW7Ys/fr1o0yZMsycOZOoqCin44l4jMqUiAsiIyNZOGcGLR97iHdff5GAgoX45rsf+Hz8NIqWKOV0PJEkrXLlyqxYsYKFCxfi4+ND27ZtKV++PLNnz1apkhTBpTJljGlgjNlhjNltjHktnvUdjTGbYh6/G2PKez6qyP139epVxo8fT8mSJRn4Qi/Spk3LZ19P5ZvvfqBS1YecjieSbBhjaNy4MZs2bWLq1KlcvXqVNm3aULFiRebMmaNSJclagmXKGOMFjAIaAqWB9saY0nGG7QMetdaWA94Fxnk6qMj9dOnSJcaOHUvx4sXp3r07vr6+DP9yMrOWrqZ2/UYYY5yOKJIseXl50b59e7Zu3crkyZO5dOkSrVq1onz58nz77bdcvXLF6Ygid82VmamqwG5r7V5r7RVgOnDThXOstb9ba0/FPF0LBHg2psj9ERERwTvvvEOBAgXo3bs3uXPnZuHChYSEhFCnQRPSpNE34yKe4OXlRceOHdm6dSuTJk0CoGvXrjSsXoFvxozg/LmzDicUcZ0rfzPkBw7d8DwsZtntdAd+cCeUyP0WGhpKz549CQwMZPDgwVStWpUVK1awZs0aGjdurJkokUTi7e1Np06d2LRpEz/88AMFHyjCsCFvUb9aEJ/89w0O7dctaiTpc+Uc7vj+Fon3jpbGmNpEl6kat1nfE+gJUKBAARcjiiSOq1ev8vOPi+k/81t++ukn0qdPT5cuXejfvz+lSumgcpH76fqFPvMHPcTWv//i27EjmDJ+DJO+Gk2N2vVo1/UZqj9aV7PDkiS5UqbCgMAbngcAR+IOMsaUA74CGlprT8S3IWvtOGKOpwoODtYtxsURx46E8d3Ub5kzbRIR4ccoUKAA7733Hj179sTf39/peCKpXpnyFflo9HjCjx1l9tRvmD3lG57r3IbAgoVp1bErTVu2hQBfp2OKxHKl4q8HihljChtj0gLtgPk3DjDGFADmAE9Za3d6PqaIey5cuMCiubPo3akVDR4qx7jPP6FkUDlGTJjO3r17eeONN1SkRJKYXHny0uel11m6ZjMfjRqPf+48DH//bepXK0OTJk347rvvdFNlSRISnJmy1kYaY/oCSwEvYLy1dqsxpnfM+jHAIMAPGB1zbEmktTY48WKLJCwqKopVq1YxceJEZs2axblz58gXEEiPvi/Rot1T5A8sCEQfCCsiSZdP2rQ0eKIlDZ5oyf69u/l+5lSWzJtB69at8fPzo0OHDnTr1g2vnIV1fKM4wqX7XlhrFwOL4ywbc8PPPYAeno0mcvestezavpWZY5cwefJk9u/fT+bMmWnTpg2PNGxFpWoP65gLkWSs0ANFeeG1QYz97COWLVvGhAkTGDt2LCNGjOCBYiWo36Q5jzdpQZHiJZ2OKqmIbiImyZ61ltAtf7Ns0XyWL/6eA/v2kCZNGh577DGGDBlC8+bNyZgxI5vDdKNVkZTCy8uLBg0a0KBBA06ePMmMGTOYMGkqY4d/xJj/fUiR4qV4vGl0sSpctLjTcSWFU5mSZOnatWusW7eOefPmMXXGTA4fPICXlxdVH65Jl97P07dbex0DJZJK5MiRg2effZYaTTvwT/hxli+ez9KFc/li2FBGf/oBRUuUpla9hjxarwFlK1R2Oq6kQCpTkmycPHmSpUuXsmjRIpYsWcKJEyfw8fGhWo1a9Oz3CrUfb0y27DkA8PfXmT4iqVHOXLlp1/UZ2nV9hvBjR1n+w3yWL57PhC+G89XIT8mR059mTZvQtGlT6tWrR+bMmZ2OLCmAypQkWdeuXWPjxo0sW7aMRYsW8fvvvxMVFUXOnDlp1KgRjRs35vHHH+fQeR1wKiK3ypUnLx269aJDt16cOXWK1SuX88vyJcyZM4cJEyaQLl06Hn30UerVq0fBstUoXipIx1TKPVGZkiTDWsuuXbtYsWIFK1as4KeffuLUqei7FFWsWJGBAwfSuHFjqlSpctMZeIfO61goEbkz3+zZadyiDY1btKFk7oysXr2aBQsWsHTpUl599VUAsvvl5MEatXjokVo8+Egt8uTTndHENSpT4hhrLft27+SvkHV8siWEn376ibCwMAACAwNp3rw5devWpU6dOuTNm9fhtCKSUvj4+FC7dm1q164NwOHDh5kwcz5rV61k7eqV/PD9bAACChSiUtWHqFTtISpXq06BQg84GVuSMJUpuW8uX77Mhg0bmLVoORvXr2VjyDpOnzoJQM6cOalVqxZ169albt26FC1aVNeLEZH7In/+/DRr04FmbTrEXl5l7aqVbFj3O7+uWMr82dMA8PPPRe1Ha/LII4/wyCOPUK5cOV2nTgCVKUkk1lr27NlDSEgIISEhrFu3jvXr18derbjgA0WpVa8hFas8SMWqD9HkkUoqTyLiOGMMxUsFUbxUEJ179iUqKip6Bn39Wv7843fWr1/H7NnRM1eZM2emUqVKVK1alSpVqlC1alUKFiyo32WpkMqUuM1ay9HDh9i5bmdseQoJCeH06dMApEuXjooVK9K3b19q1KhBtkJB+OW8+bIF+uUjIklRmjRpKFK8JEWKl6R1x66UDfDl0KFDrFq1irVr17J+/XpGjBgR+w/FnDlzxhYr/8KlKVG6LLny5NXvuBROZUruyoV/z7N753Z2bd/GrtAt7Nq+jZ2hWzlzOvpAcR8fH8qVK0fbtm0JDg4mODiYMmXK4OPjE7sNXTxTRJKzwMBAOnToQIcOHQC4cuUKmzdvZv369fzxxx+sX7+eJUuWYK0FIFv2HBQvHUSJUkEULx1EyTJleaBoCXzSpnXybYgHqUxJvK5evcqePXvYsmULy39bz67Qrezavo2wg/tjf0FkzJSZoiVKUa9xM4qXCqJ5/ZqULVuW9OnTO5xeROT+SZs2LZUrV6Zy5cr07t0bgPPnzzN76Sp2hm5hx7Yt7Ny2hZmTxnP58iUAvH18eKBocYoUL8XDweUpVaoUpUqVomjRoqRVyUp2VKZSMWst//zzDzt27GD79u3s2LEj9ue9e/dy7do1IHqau0DhIpQqW54nWreneKkyFCtZhnyBBW66JkvZAF0oU0QEoo+nqlztYSpXezh2WWRkJAf37YkuVzEl6+8N62LPHoTo2+QULVo0tlxdfxQvXpysWbM68VbEBSpTKZy1lmPHjrF3797Yx759+9i5cyfbt2+PvY4TRB/bVKxYMcqVK0ebNm0oWbIkpUqVwvoGkD5DBgffhYhI8uft7c0DxUrwQLESNGzWKnb5A9m92bFjB6GhoWzbto3Q0FBCQ0NZuHAhkZGRseP8/f0pWrRo7KNIkSKxP+fIkUPHZTlIZSoFOH/uLEfCDnH44H6Wnz3Ovn37bipOly5dih1rjCFfvnwUK1aMtm3bUqJEidhHwYIF4z3NV8c4iYgknkyZMlGpUiUqVap00/IrV66wZ88eQkND2bVrF7t372bPnj2sXLmSSZMm3TTW19eXokWLUrhwYQoWLEiBAgUoWLBg7CNbtmwqW4lIZSqJ+/fffzl06BBhYWEcOnTopsfufQc4duQw/54/d9NrsmbNygMPPECpUqVo1KgRDzzwQOyjYMGCpEuXzqF3IyIirkqbNm3s13xxXbp0iX379rF79+7YkrVr1y42bdrEwoULb/pHNER/7XhjuSpQoAAmsz+58uQld5585MydmwwZMt6vt5biqEw55Pz58xw7doyjR4/e8t/rj0OHDt30Ndx1uXPnJjAwkEIPFKVajUfJnTc/efMFEFiwMPUeLKvpXhGRFC59+vS3LVrWWiIiIjhw4AAHDhzg4MGDsT8fOHCANWvWxPt3SxZfX3Llzot/7jz4585Drtz5yJUnT8zzvOTKnYec/rl1FmI8VKY8JCoqitOnTxMREUFERAT//PNP7M/Hjx+/pTCdP3/+lm14e3uTJ08e8uTJQ8GCBalevTqBgYE3PfLnzx87sxTf129+fjoIXEQkNTPGkCtXLnLlykWVKlXiHXPu3DmW/7GViOPHCD9+NPq/x44Scfwo4cePsX/Pav4JP3bTMVvXZc/hR948uWP34e/vH/tz3Ievr2+q+Me9ylQ8oqKiOHPmDCdPnuTUqVOcOnWKEydO3FKSbvz5xIkTsWe/xZU5c2by5s1L3rx5qVSpEnny5CFv3ryx/73+s5+fn+5YLiIiiS5LliwULVGKoiVundm6LioqilMn/vn/snX8GOHHjnAiIoJrF04THh7Oxo0bCQ8Pj71Ic1w+Pj43laucOXOSI0cOIn0y4ZstO77ZspM1W3ayZctBhksFyJEjB76+vsnuNj0ptkzFV4hcfZw5cyb2WkpxGWPIkSMH/v7+5MyZk+LFi1O9enVy5syJv79/7PIbf86gM+FERCSZSZMmDX7+ufDzz0WpoPI3rYt7KZwrV67wzz//EB4eHu8jIiKC8PBwdu7cycmTJzlz5vYnNhljyJYtG35+fuTIkSP2cf159uzZyZYtG9myZcPX15ds2bKRL18+cuXKlSifgytSbJn6888/bzu9CdEH9mXPnj32kTdvXkqXLn3Tshsf1wtUjhw58PZOsR+biIjIXUubNi358uUjX758Lo3/a/8Jzp09w5nTpzhz6iRnTp8ia5rLnDx5kpMnT3LixImbft61axcnTpy47QxYr169GDNmjCff0l1Jsa2gcOHC/O9//7ttOcqQIUOq+B5XREQkqfH29iZ7Dj+y5/CLXebKhZ+vXbvG2bNnOX36NKdOneL06dOcPn2awMDAxIyboBRbpvz8/Ojfv7/TMURERMRDvLy8YidFChcu7HScWDraWURERMQNKlMiIiIibnCpTBljGhhjdhhjdhtjXotnvTHGfB6zfpMxplJ82xERERFJaRIsU8YYL2AU0BAoDbQ3xpSOM6whUCzm0RP4wsM5RURERJIkV2amqgK7rbV7rbVXgOlAszhjmgETbbS1QDZjTF4PZxURERFJclwpU/mBQzc8D4tZdrdjRERERFIcVy6NEN/FmOJeHtyVMRhjehL9NSDAeWPMDhf2L9FyAv84HSIF0efpWfo8PUufp+fos/Ss1Px5FrzdClfKVBhw49WwAoAj9zAGa+04YJwL+5Q4jDEh1tpgp3OkFPo8PUufp2fp8/QcfZaepc8zfq58zbceKGaMKWyMSQu0A+bHGTMf6BxzVt+DwBlr7VEPZxURERFJchKcmbLWRhpj+gJLAS9gvLV2qzGmd8z6McBioBGwG7gAdEu8yCIiIiJJh0u3k7HWLia6MN24bMwNP1vgOc9Gkzj09ahn6fP0LH2enqXP03P0WXqWPs94mOgeJCIiIiL3QreTEREREXGDylQSY4zJZoyZbYzZbowJNcY8FGe9bt1zF1z4PGuZ/2vv7kHkKqMwjv8fXCHZqKBY+FFIbAIq+AEaTWHhaiGIVYoIIliJoKKdlZVgYyMpBFG00YgGFQsVCxtBCEISxSgWKsYElSBoUCIaORYzhMllh3lnr87MTv4/WJi99x04HJ6Fs/fO3Df5Lcnh4c9T86p10SXZMdKnw0lOJnm8s8Z8NmjspdmcQpInkhxJ8kWSfUm2dM6bzSk09NN8jmj6zJRm6jngg6raPfz25Grn/OjWPTsZbN2zc7YlbiqT+gnwcVXdM+O6Np2q+hq4Ac5sM3UceLuzzHw2aOwlmM0mSa4EHgOuqapTSd5g8M3zV0aWmc1Gjf0E83mGV6YWSJKLgNuBlwCq6q+q+rWzzK17GjX2UxuzBnxTVd93jpvP6Y3rpaazAmxNssLgn6busw7N5nQm9VMjHKYWy9XACeDlJIeSvJhkW2eNW/e0a+knwG1JPkvyfpJrZ1zjZrUH2LfOcfM5vXG9BLPZpKqOA88CR4EfGTzr8MPOMrPZqLGfYD7PcJhaLCvATcDzVXUj8AfwZGdN09Y9Atr6eRC4qqquB/YC78y2xM1neLv0XuDN9U6vc8x8jjGhl2azYN07ggAAAfZJREFUUZKLGVx52g5cAWxLcn932TpvNZvraOyn+RzhMLVYjgHHqurA8Pf9DIaB7pqJW/cIaOhnVZ2sqt+Hr98Dzk9y6WzL3HTuBg5W1c/rnDOf0xnbS7M5lTuB76rqRFX9DbwF7OqsMZvtJvbTfJ7NYWqBVNVPwA9JdgwPrQFfdpa5dU+jln4muSxJhq9vYfA38ctMC9187mP8bSnzOZ2xvTSbUzkK3JpkddizNeCrzhqz2W5iP83n2fw23+J5FHh1ePn/W+DBuHVPH5P6uRt4OMlp4BSwp3yS7VhJVoG7gIdGjpnPDWjopdlsVFUHkuxncOvpNHAIeMFsbkxjP83nCJ+ALkmS1IO3+SRJknpwmJIkSerBYUqSJKkHhylJkqQeHKYkSZJ6cJiSJEnqwWFKkiSpB4cpSUshyc1JPk+yJcm2JEeSXDfvuiQtPx/aKWlpJHka2AJsZbAv4zNzLknSOcBhStLSGG4b9CnwJ7Crqv6Zc0mSzgHe5pO0TC4BLgAuZHCFSpL+d16ZkrQ0krwLvA5sBy6vqkfmXJKkc8DKvAuQpP9CkgeA01X1WpLzgE+S3FFVH827NknLzStTkiRJPfiZKUmSpB4cpiRJknpwmJIkSerBYUqSJKkHhylJkqQeHKYkSZJ6cJiSJEnqwWFKkiSph38B7xxtJMpoK0cAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# sampling\n",
"target_dist = dist.Cauchy(true_m, true_b)\n",
"data = torch.tensor([target_dist() for i in range(100)])\n",
"true_y = [target_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(x_range, true_y, c='k', label=r'Cauchy(m,b)')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, density=True, alpha=0.2, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"plt.title(r'm={0:.3f} b={1:.3f}'.format(true_m, true_b))\n",
"\n",
"plt.ylim(0,)\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"plt.savefig('obs-data')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"モデル`model`\n",
"- $p_\\theta(X)$\n",
"- $X = \\{x_1, \\ldots, x_N \\}$は観測されたデータ\n",
"- パラメータは$\\theta = \\{ m, b \\}$\n",
" - $x_i \\sim \\mathrm{Cauchy}(m, b)$\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 124.724x110.079 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pgm = daft.PGM()\n",
"\n",
"pgm.add_node(\"xn\", r\"$x_n$\", 2, 1, observed=True)\n",
"pgm.add_node(\"m\", \"m\", 1.5, 2, fixed=True)\n",
"pgm.add_node(\"b\", r\"b\", 2.5, 2, fixed=True)\n",
"pgm.add_edge(\"m\", \"xn\")\n",
"pgm.add_edge(\"b\", \"xn\")\n",
"pgm.add_plate([1, 0.5, 2, 1], label=r\"$n = 1, \\ldots, N$\", shift=-0.2)\n",
"\n",
"pgm.show() # render and show"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [],
"source": [
"def model(data=None):\n",
" \n",
" m = pyro.param(\"m\", torch.tensor(0.0))\n",
"\n",
" b = pyro.param(\"b\", torch.tensor(1.0), constraint=constraints.positive)\n",
"\n",
" with pyro.plate('observe_data'):\n",
" pyro.sample('obs', dist.Cauchy(m, b), obs=data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"guideは点推定のAutoDeltaを使用"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [],
"source": [
"guide = AutoDelta(\n",
" poutine.block(model, hide=['obs']),\n",
" init_loc_fn=init_to_feasible\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"準備"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [],
"source": [
"adam_params = {\"lr\": 0.005, \"betas\": (0.95, 0.999)}\n",
"optimizer = Adam(adam_params)\n",
"\n",
"\n",
"svi = SVI(model=model,\n",
" guide=guide,\n",
" optim=optimizer,\n",
" loss=Trace_ELBO()\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"パラメータの初期化とhookの設定.こうするとすべてのパラメータの途中の値を保存できる."
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tracing m <class 'torch.Tensor'> tensor(0., requires_grad=True)\n",
"tracing b <class 'torch.Tensor'> tensor(0., requires_grad=True)\n"
]
}
],
"source": [
"pyro.clear_param_store()\n",
"\n",
"svi.loss(model, guide, data)\n",
"\n",
"trace_dic = defaultdict(list)\n",
"for name, value in pyro.get_param_store().named_parameters():\n",
" print('tracing', name, type(value), value)\n",
" value.register_hook(lambda grad, name=name: trace_dic[name].append(pyro.param(name).item()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"収束するまで学習"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"scrolled": true,
"tags": []
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "3e1233ac164643c4a3464147647fe1e7",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=5000.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"num_steps = 5000\n",
"\n",
"with tqdm(range(num_steps)) as pbar:\n",
" for i,p in enumerate(pbar):\n",
"\n",
" loss = svi.step(data)\n",
"\n",
" trace_dic['loss'].append(loss)\n",
"\n",
" if i > 100 and np.isclose(trace_dic['loss'][-100], loss):\n",
" break\n",
" \n",
" if i % 10 == 0:\n",
" pbar.set_postfix(loss=loss)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"lossとパラメータの推移をプロット"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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iESMu8/vC8CtL06nWlddioiISC0UyOKkMLcxPzuzF+MXreOZCUvDLkdEREQaMAWyOBpxeAeO6daKO8fMZdk6DV2KiIhIzRTI4sgsOnSZHjH+94VpGroUERGRGimQxVn7nEb835m9mLh4vSaMFRERkRopkNWDC4oLGdYjn7vemMuStdvCLkdEREQaGAWyemBm3HVeXzLSIvzv89N0r0sRERHZiwJZPWnbIps7zupNydINPPHR4rDLERERkQZEgawenTewgJN6tub3b85jUfnWsMsRERGRBkKBrB6ZGXee24fsjDR+rKFLERERCSiQ1bPWzbP55dm9+XTZRh778LOwyxEREZEGQIEsBMP7t+eUXm34w1vzWVC2JexyREREJGQKZCEwM357bh+aZqXzw9FT2VVZHXZJIiIiEiIFspDkN8viznP7MHPFZv40dkHY5YiIiEiIFMhCdNphbblgUCEPvb+QyUvXh12OiIiIhESBLGQ/P6sX7XMa8cPnprGtojLsckRERCQECmQha5adwb0X9Wf5hu38+vXZYZcjIiIiIVAgawAO75zH947rwqhJy3l7dlnY5YiIiEg9i3sgM7M0M5tiZq8Hr+8wsxVmNjV4nBGz7e1mttDM5pnZqfGurSH54Und6dmuObe9OJ21WyvCLkdERETqUX0cIbsRmLNP273u3j94jAEws17ACKA3cBrwkJml1UN9DUJmeoT7LurPlopKbntxBu6axV9ERCRVxDWQmVkh8A3grwew+XBglLtXuPtiYCEwOJ71NTQ92jbjllN78M6cMkaXLA+7HBEREakn8T5Cdh9wC7DvzKfXm9l0M3vczHKDtgIgNoWUBm0p5cqhRRzVpSW/fG02S9dtC7scERERqQdxC2Rmdiawxt0n77PqYaAL0B9YBdyzZ5ca3uYL43Zmdo2ZlZhZSXl5eV2W3CBEIsYfLuhHWsS46bmp7K7SLP4iIiLJLp5HyIYCZ5vZEmAUcIKZ/d3dy9y9yt2rgUf577BkKdAhZv9CYOW+b+ruI9292N2L8/Pz41h+eNrnNOLOc/swZdlG7ntnftjliIiISJzFLZC5++3uXujunYmerP+uu19iZu1iNjsXmBksvwqMMLMsMysCugET41VfQ3dWv/ZcVNyBh95fxPiFa8MuR0REROIojHnIfmdmM8xsOnA88EMAd58FjAZmA28A17l7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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(trace_dic['loss'])\n",
"plt.title(\"ELBO\")\n",
"plt.xlabel(\"step\")\n",
"plt.ylabel(\"loss\");\n",
"savefig(\"loss\")\n",
"plt.show()\n",
"\n",
"\n",
"fig = plt.figure(figsize=(15,5))\n",
"\n",
"for i,param in enumerate(['m', 'b']):\n",
" plt.subplot(1,2,i+1)\n",
" plt.plot(trace_dic[param])\n",
" plt.ylabel(param)\n",
"\n",
"plt.tight_layout()\n",
"savefig(\"params\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最尤推定結果と真値の比較"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"m 7.193362712860107 true m 7.215438617683047\n",
"b 0.4534412622451782 true b 0.37987790840959357\n"
]
}
],
"source": [
"trace = poutine.trace(model).get_trace()\n",
"\n",
"print('m', trace.nodes['m']['value'].item(), 'true m', true_m)\n",
"print('b', trace.nodes['b']['value'].item(), 'true b', true_b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"推定したパラメータでサンプリング"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"\n",
"# traceでパラメータを取得\n",
"trace = poutine.trace(model).get_trace()\n",
"m = trace.nodes['m']['value'].item()\n",
"b = trace.nodes['b']['value'].item()\n",
"\n",
"# generate a pdf\n",
"estimated_dist = dist.Cauchy(m, b)\n",
"y = [estimated_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"# plot\n",
"plt.plot(x_range, y, c='k', label='ML estimated pdf')\n",
"plt.plot(x_range, true_y, c='r', label=r'true pdf')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"savefig(\"sampled-pdf\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"観測データobsのサンプリング."
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAE9CAYAAAAvV+dfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3df5RXdb3v8ecbxAhUJCFTfggmKr9HGFGPhJhpmF5Njy2xOKlpCB7zZisPdftlHVva0rjmTeSQEXYz0ENqaoSlBxNNChDkh4iRooxoICaJwCn0c/+Yr3OH4TvMHvZ35vsdeD7WYq357v3Ze7/n4xZffj77+9mRUkKSJEl7pl25C5AkSWrLDFOSJEk5GKYkSZJyMExJkiTlYJiSJEnKwTAlSZKUw37lunC3bt1Snz59ynV5SZKkzBYvXvx6Sql7sX1lC1N9+vRh0aJF5bq8JElSZhHxUmP7nOaTJEnKwTAlSZKUQ5NhKiKmR8SGiFixmzajI2JpRKyMiN+VtkRJkqTKleWZqRnAD4GfFtsZEQcDU4AxKaWXI+KDpStPkqSW9Y9//IOamhq2b99e7lJUATp27EjPnj3p0KFD5mOaDFMppccjos9umnwauDel9HKh/YbMV5ckqcxqamo48MAD6dOnDxFR7nJURiklNm3aRE1NDX379s18XCmemToa6BoRj0XE4oj4bAnOKUlSq9i+fTuHHHKIQUpEBIccckizRylLsTTCfsBw4DTg/cBTEbEgpfR8kSLHA+MBevfuXYJLS5KUn0FK79mTe6EUI1M1wNyU0tsppdeBx4GhxRqmlKallKpTStXduxdd90qSJKlNKUWY+iXwkYjYLyI6AScAq0pwXkmSpIqXZWmEmcBTwDERURMRl0XEhIiYAJBSWgXMBZYBfwTuSCk1uoyCJEnKZu3atQwaNKjcZeziuuuu4+abb87d5s0332TKlCl7VMO7777L2WefzeDBg1m3bl2mY770pS/Rv39/5s2bt0fXbEyWb/NdlKHNTcBNJalIkqQyWl6zuaTnG9yzS0nPl0dKiZQS7dpVxprd74WpK6+8stnHLl++nA0bNrB8+fLMx0yePJkRI0Ywffp0Tj311GZfszGV0ZuS9jrLazbv8qdc5yt1LVJLmDx5MoMGDWLQoEHccsstddt37NjBxRdfzJAhQ7jgggvYunUrb7/9NmeddRZDhw5l0KBB3H333QD87Gc/Y8SIEVRVVXHFFVfwzjvvsHbtWvr378+VV17JsGHDuOyyy3YaDbruuuv4/ve/3+jx7/nud7/LMcccw8c+9jFWr15d9HdorM0nP/lJhg8fzsCBA5k2bVrd9q985Sv8+c9/pqqqimuvvbbRdsW8+eabfPCDOy9teeqpp/Lb3/4WgK9//etcffXVuxz3oQ99iDfffHO3526usr3oWJIk1Vq8eDE/+clP+MMf/kBKiRNOOIFTTjmFrl27snr1an784x9z8skn87nPfY4pU6bQt29fDj/8cH71q18BsHnzZlatWsXdd9/Nk08+SYcOHbjyyiu56667GDVqFKtXr+YnP/kJU6ZMYcmSJXzxi1+sGw265557mDt3bqPHf/azn2Xx4sXMmjWLJUuWsGPHDoYNG8bw4cN3+R0aazN9+nQ+8IEPsG3bNo4//nj++Z//mUMOOYQbb7yRFStWsHTpUgDeeOONou2Keeedd3YZYfv2t7/NN7/5TTZs2MCSJUt44IEHdjmuXbt2O4XEUnBkSpKkMnviiSc477zz6Ny5MwcccADnn38+8+fPB6BXr16cfPLJAIwbN44nnniCwYMH88gjjzBp0iTmz59Ply5dePTRR1m8eDHHH388VVVVPProo7zwwgsAHHHEEZx44okAHHfccWzYsIH169fzzDPP0LVrV3r37r3b4+fPn895551Hp06dOOiggzjnnHN2+R121+bWW29l6NChnHjiiaxbt44//elPRfshazuApUuX0rNnz522jRo1ipQSkydPZtasWbRv3x6Ab3zjG3VtevTowfPPP1/SFe8dmZIkqcxSSo3ua7juUURw9NFHs3jxYubMmcNXv/pVzjjjDLp27crFF1/MDTfcsFP7tWvX0rlz5522XXDBBcyePZvXXnuNsWPH1tVQ7PjG6sja5rHHHuORRx7hqaeeolOnTowePbpokMnaDuDTn/40Dz30EI899thO25cvX86rr75Kt27dOPDAAwF47bXX2LFjR12bD3/4wwwYMKAuQA4ePLjJ36spjkxJklRmo0aN4v777697Huq+++7jIx/5CAAvv/wyTz31FAAzZ85k5MiRrF+/nk6dOjFu3Di+/OUv8/TTT3Paaacxe/ZsNmyofavbG2+8wUsvvVT0emPHjmXWrFnMnj2bCy64AGC3x48aNYr77ruPbdu28dZbb/Hggw8W/R2Ktdm8eTNdu3alU6dOPPfccyxYsKDumAMPPJC33nqryXYN/fznP+emm27a6dmyV199lc985jP88pe/pHPnzjz88MMALFmyhKqqqrp2zzzzDC+88AKvvPJKSYIUODIlSVLZDRs2jEsuuYQRI0YAcPnll3PcccfVPTx+5513csUVV9CvXz8mTpzI/Pnzufbaa2nXrh0dOnTg9ttvZ8CAAVx//fWcccYZvPvuu3To0IHbbruND33oQ7tcb+DAgbz11lv06NGDww47DKDR44844giGDRvGhRdeSFVVFUcccURd0Gv4OxRrM2bMGKZOncqQIUM45phj6qYbAQ455BBOPvlkBg0axOmnn86OHTuKtivmmGOOqQtsW7du5fzzz+f73/8+/fv35xvf+AaTJk3i4x//OEuXLuX888+vO+6vf/0rffr0adaLjJsSuxtabEnV1dVp0aJFZbm2pJZX7Btzeb4inud8pa5Fe5dVq1bRv3//cpehZvrjH//IF77wBRYsWLDbKcjLLruMH/3oR3UPq99zzz384he/qPsGZDHF7omIWJxSqi7W3mk+SZLU5lRVVdGrVy+qqqp2u2jnj3/847og9aUvfYnvfe97XH755SWtxWk+SZLU5uy///7Mnj27WcdMnjy5RWpxZEqSJCkHw5QkSVIOhilJkqQcDFOSJEk5GKYkSZJyMExJkiTlYJiSJGkfMnr0aJqzaPZjjz3G2WefXZLz3nLLLWzdujXzta+77rrMbcvJdaYkSapv8eLSnm/48NKerw275ZZbGDduHJ06ddptuyeeeIJrrrmGdevWMWfOHG688UY++tGPtlKVzefIlCRJZfT2229z1llnMXToUAYNGlT3mpPvfOc7HH/88QwaNIjx48fz3uvfRo8ezTXXXMOoUaPo378/Cxcu5Pzzz6dfv358/etfB2Dt2rUce+yxXHzxxQwZMoQLLrig6IjQb37zG0466SSGDRvGpz71KbZs2QLA3LlzOfbYYxk5ciT33ntv0bq3bdvG2LFjGTJkCBdeeCHbtm2r2zdx4kSqq6sZOHAg3/rWtwC49dZbWb9+Paeeeiqnnnpqo+2gdqXyG264gQkTJvDb3/6Wo446Km83tyjDlCRJZTR37lwOP/xwnnnmGVasWMGYMWMAuOqqq1i4cCErVqxg27ZtPPTQQ3XH7L///jz++ONMmDCBc889l9tuu40VK1YwY8YMNm3aBMDq1asZP348y5Yt46CDDmLKlCk7Xff111/n+uuv55FHHuHpp5+murqayZMns337dj7/+c/z4IMPMn/+fF577bWidd9+++106tSJZcuW8bWvfY3F9Ub0vvvd77Jo0SKWLVvG7373O5YtW8bVV1/N4Ycfzrx585g3b16j7d77/d67bpcuXejdu3eJertlGKYkSSqjwYMH88gjjzBp0iTmz59Ply61L+GeN28eJ5xwAoMHD+a//uu/WLlyZd0x55xzTt2xAwcO5LDDDuN973sfRx55ZN176nr16sXJJ58MwLhx43jiiSd2uu6CBQt49tlnOfnkk6mqquLOO+/kpZde4rnnnqNv377069ePiGDcuHFF63788cfr9g0ZMoQhQ4bU7bvnnnsYNmwYxx13HCtXruTZZ58teo7G2k2bNo27776bW2+9lYsuuoi1a9c2t1tblc9MSZJURkcffTSLFy9mzpw5fPWrX+WMM87g3/7t37jyyitZtGgRvXr14rrrrmP79u11x7zvfe8DoF27dnU/v/d5x44dAETETtdp+DmlxOmnn87MmTN32r506dJd2jamWLsXX3yRm2++mYULF9K1a1cuueSSnWrP0m7AgAE8+OCDfO1rX6NHjx5cdtllPProo5lqKgdHpiRJKqP169fTqVMnxo0bx5e//GWefvrpulDRrVs3tmzZ0uwX+gK8/PLLPPXUUwDMnDmTkSNH7rT/xBNP5Mknn2TNmjUAbN26leeff55jjz2WF198kT//+c91xxYzatQo7rrrLgBWrFhRN0X3t7/9jc6dO9OlSxf+8pe/8Otf/7rumAMPPJC33nqryXYrVqwAoEOHDgwbNqzumErlyJQkSWW0fPlyrr32Wtq1a0eHDh24/fbbOfjgg/n85z/P4MGD6dOnD8cff3yzz9u/f3/uvPNOrrjiCvr168fEiRN32t+9e3dmzJjBRRddxH//938DcP3113P00Uczbdo0zjrrLLp168bIkSPrwk19EydO5NJLL2XIkCFUVVUxYsQIAIYOHcpxxx3HwIEDOfLII+umGgHGjx/PmWeeyWGHHca8efMabTdlyhSWLl3KunXruP/++7nlllua/fu3pnjv2wGtrbq6OjVnnQtJbcvyms27bBvcs0tZ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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"obs = []\n",
"for _ in range(5000):\n",
" trace = poutine.trace(model).get_trace()\n",
" obs.append(trace.nodes['obs']['value'].item())\n",
"\n",
"plt.xlabel('posterior samples')\n",
"\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"plt.hist(obs, range=(x_min, x_max), bins=100, alpha=0.2, density=True, color='r', label=r'sampled data$')\n",
"\n",
"plt.legend()\n",
"savefig(\"pdf-obs\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 指数分布の最尤推定"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"保存先設定"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [],
"source": [
"experiment_name = \"Exponential\"\n",
"\n",
"file_format = \"png\" # \"pdf\"\n",
"savedir = \"./20200627_pyro_5th_trial/\"\n",
"os.makedirs(savedir, exist_ok=True)\n",
"\n",
"def savefig(desc):\n",
" fig.savefig(os.path.join(savedir, '{0}_{1}.{2}'.format(\n",
" experiment_name, desc, file_format)), bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真のlmdをランダムに作成"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"r = 0.8313413866871807\n",
"x_range: from 0.001 to 4.340\n"
]
}
],
"source": [
"true_r = np.abs(np.random.rand() *1.5)\n",
"print('r =', true_r)\n",
"\n",
"x_range = np.arange(0.001, 3 * 1/true_r**2, 0.001) # 1/r**2が分散\n",
"x_max = x_range.max()\n",
"x_min = x_range.min()\n",
"print('x_range: from {0:.3f} to {1:.3f}'.format(x_min, x_max))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真の分布からデータをサンプリング.最尤推定の解析解を計算."
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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ExQURFpaGjNnzqRPnz5MnTqVdu3aUaZMGcLDw1m0aBFXXXUV7777bmYvVU6uvfZa3njjDf70pz8RFBTE1q1bqVat2nm3KVWqFEeOHKF8+fJnLE9KSiI8PJzQ0FA2b97MkiVLztk2PDyc1NRUkpOTcwxLiYmJVKhQ4YJGIPe3XMOUmb0PdATKm1k88A8gCMA5l+t9UiIiInJ+p++ZOq1r164MGTKESZMmsWzZMkqVKkX79u155plneOqppwgLC2PDhg20aNGCMmXKMH36dADeeecdhg0bxvHjx6lVqxZvvfXWeY97xx13sGPHDpo3b45zjgoVKvDxx+fvDxk6dCjXXXcdVapUOeO+qa5duzJ+/HiaNGlCvXr1aNOmTbbbX3PNNXz//fd06dIl2/ULFiygW7du560hvzHn/HPrUmxsrIuLi/PLsfMT3TMlIuJfmzZtokGDBv4u44KULFmSo0eP+ruMi7Jq1Spefvll3n333WzX9+rVi+eee4569epd4sr+v+x+J8xshXMuNrv2GgFdRERELpnLL7+cTp065Tho5w033ODXIHUx9KBjERGRAqag9kqdNmTIkGyXBwcHM3DgwEtcjffUMyUiIiLiBYUpERERES8oTImIiIh4QWFKRERExAsKUyIiIiJeUJgSERER8YLClIiISD61Y8cOGjdu7O8yzvHkk0/y4osvet3m0KFDvP766xdVQ1paGn/+85+JiYlh165dHm3z4IMP0qBBgzNGbvcFjTMlIiKSRU5PkrhY+ekJFM45nHMEBOSPvpTTYeruu+++4G3XrVtHQkIC69at83ibl19+mVatWjF58mQ6dep0wcfMSf54N0VERIq4l19+mcaNG9O4ceMzHrickpLCoEGDaNKkCb179+b48eMcO3aM7t2707RpUxo3bpz5bL733nuPVq1a0axZM+666y5SU1PZsWMHDRo04O6776Z58+bcfvvtZ/QGPfnkk7z00ks5bn/as88+S7169ejSpQtbtmzJ9hxyanPDDTfQokULGjVqxIQJEzKXP/LII/z88880a9aMkSNH5tguO4cOHaJixYpnLOvUqRNff/01AI8//jjDhw8/Z7vKlStz6NCh8+77QqlnSkRExM9WrFjBW2+9xdKlS3HO0bp1azp06EB4eDhbtmzhzTff5Morr2TIkCG8/vrrREdHU7VqVT7//HMAkpKS2LRpE9OnT+eHH34gKCiIu+++mylTptC+fXu2bNnCW2+9xeuvv86qVat44IEHMnuDZsyYwZdffpnj9gMHDmTFihVMmzaNVatWkZKSQvPmzWnRosU555BTm8mTJ1OuXDlOnDhBy5Ytuemmm4iIiOD5559n/fr1rF69GoADBw5k2y47qamp5/SwPfXUU/z9738nISGBVatWMXv27HO2CwgIyPZRNt5Qz5SIiIifff/999x4442EhYVRsmRJevXqxaJFiwCoXr06V155JQADBgzg+++/JyYmhnnz5jFq1CgWLVpEmTJlmD9/PitWrKBly5Y0a9aM+fPns337dgBq1qxJmzZtgPRn4yUkJLB7927WrFlDeHg4NWrUOO/2ixYt4sYbbyQ0NJTSpUtz/fXXn3MO52szduxYmjZtSps2bdi1axc//fRTtu+Dp+0AVq9eTWRk5BnL2rdvj3OOl19+mWnTphEYGAjAE088kdmmWrVqbN26leTk5PN/KBdAPVMiIiJ+5pzLcZ2ZnTNft25dVqxYwZw5c3j00Ue55pprCA8PZ9CgQTz33HNntN+xYwdhYWFnLOvduzczZ85k79699OnTJ7OG7LbPqQ5P2yxcuJB58+axePFiQkND6dixY7ZBxtN2AP369eOzzz5j4cKFZyxft24de/bsoXz58pQqVQqAvXv3kpKSktmmdu3aNGzYMDNAxsTE5HpeuVHPlIiIiJ+1b9+ejz/+OPN+qI8++oirrroKgJ07d7J48WIA3n//fdq1a8fu3bsJDQ1lwIABjBgxgpUrV9K5c2dmzpxJQkICkH7J7Ndff832eH369GHatGnMnDmT3r17A5x3+/bt2/PRRx9x4sQJjhw5wqeffprtOWTXJikpifDwcEJDQ9m8eTNLlizJ3KZUqVIcOXIk13Znmzp1KqNHjz7j3rI9e/bQv39/PvnkE8LCwpg7dy4Aq1atolmzZpnt1qxZw/bt2/ntt998EqRAPVMiIiJ+17x5cwYPHkyrVq0AuOOOO7j88sszbx5/5513uOuuu6hTpw5//etfWbRoESNHjiQgIICgoCDeeOMNGjZsyDPPPMM111xDWloaQUFBvPbaa1SuXPmc4zVq1IgjR45QrVo1qlSpApDj9jVr1qR58+bccsstNGvWjJo1a2YGvbPPIbs2Xbt2Zfz48TRp0oR69eplXm4EiIiI4Morr6Rx48ZcffXVpKSkZNsuO/Xq1csMbMePH6dXr1689NJLNGjQgCeeeIJRo0Zx7bXXsnr1anr16pW53cGDB4mKiiIoKOgCP6Wc2fm6FvNSbGysi4uL88ux85PsvoLrzddoc/pKb376aq6ISH6yadMmGjRo4O8y5AItW7aM++67jyVLlpz3EuTtt9/OxIkTM29WnzFjBh9++GHmNyCzk93vhJmtcM7FZtdel/lERESkwGnWrBnVq1enWbNm5x20880338wMUg8++CAvvPACd9xxh09r0WU+ERERKXCCg4OZOXPmBW3z8ssv50kt6pkSERER8YLClIiIiIgXFKZEREREvKAwJSIiRZ6/vtku+c/F/C4oTImISJEWEhJCYmKiApXgnCMxMZGQkJAL2k7f5hMRkSItMjKS+Ph49u3b5+9SJB8ICQk555l/uVGYEhGRIi0oKIjo6Gh/lyEFmC7ziYiIiHhBYUpERETEC7mGKTObbGYJZrY+h/X9zWxtxvSjmTX1fZkiIiIi+ZMnPVNvA13Ps/4XoINzrgnwNDDBB3WJiIiIFAi53oDunPvOzKLOs/7HLLNLgAu7BV5ERESkAPP1PVO3A1/ktNLMhppZnJnF6SuoIiIiUhj4LEyZWSfSw9SonNo45yY452Kdc7EVKlTw1aFFRERE/MYn40yZWRNgEnCdcy7RF/sUERERKQi87pkysxrALOBW59xW70sSERERKThy7Zkys/eBjkB5M4sH/gEEATjnxgN/ByKA180MIMU5F5tXBYuIiIjkJ558m69vLuvvAO7wWUUiIiIiBYhGQBcRERHxgh50LHlqXXzSOctiIsv4oRIREZG8oZ4pERERES8oTImIiIh4QWFKRERExAsKUyIiIiJeUJgSERER8YLClIiIiIgXFKZEREREvKAwJSIiIuIFhSkRERERLyhMiYiIiHhBYUpERETECwpTIiIiIl5QmBIRERHxgsKUiIiIiBcUpkRERES8oDAlIiIi4gWFKREREREvKEyJiIiIeEFhSkRERMQLClMiIiIiXlCYEhEREfGCwpSIiIiIFxSmRERERLygMCUiIiLiBYUpERERES8oTImIiIh4IdcwZWaTzSzBzNbnsN7MbKyZbTOztWbW3PdlioiIiORPnvRMvQ10Pc/664A6GdNQ4A3vyxIREREpGHINU86574AD52nSE/ifS7cE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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# sampling\n",
"target_dist = dist.Exponential(true_r)\n",
"data = torch.tensor([target_dist() for i in range(100)])\n",
"true_y = [target_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(x_range, true_y, c='k', label=r'Exponential(r)')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, density=True, alpha=0.2, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"plt.title(r'm={0:.3f} b={1:.3f}'.format(true_m, true_b))\n",
"\n",
"plt.ylim(0,)\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"plt.savefig('obs-data')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"モデル`model`\n",
"- $p_\\theta(X)$\n",
"- $X = \\{x_1, \\ldots, x_N \\}$は観測されたデータ\n",
"- パラメータは$\\theta = \\{ r \\}$\n",
" - $x_i \\sim \\mathrm{Exponential}(r)$\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 124.724x110.079 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pgm = daft.PGM()\n",
"\n",
"pgm.add_node(\"xn\", r\"$x_n$\", 2, 1, observed=True)\n",
"pgm.add_node(\"r\", \"r\", 1.5, 2, fixed=True)\n",
"pgm.add_edge(\"r\", \"xn\")\n",
"pgm.add_plate([1, 0.5, 2, 1], label=r\"$n = 1, \\ldots, N$\", shift=-0.2)\n",
"\n",
"pgm.show() # render and show"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [],
"source": [
"def model(data=None):\n",
" \n",
" r = pyro.param(\"r\", torch.tensor(1.0), constraint=constraints.positive)\n",
"\n",
" with pyro.plate('observe_data'):\n",
" pyro.sample('obs', dist.Exponential(r), obs=data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"guideは点推定のAutoDeltaを使用"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [],
"source": [
"guide = AutoDelta(\n",
" poutine.block(model, hide=['obs']),\n",
" init_loc_fn=init_to_feasible\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"準備"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [],
"source": [
"adam_params = {\"lr\": 0.005, \"betas\": (0.95, 0.999)}\n",
"optimizer = Adam(adam_params)\n",
"\n",
"svi = SVI(model=model,\n",
" guide=guide,\n",
" optim=optimizer,\n",
" loss=Trace_ELBO()\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"パラメータの初期化とhookの設定.こうするとすべてのパラメータの途中の値を保存できる."
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tracing r <class 'torch.Tensor'> tensor(0., requires_grad=True)\n"
]
}
],
"source": [
"pyro.clear_param_store()\n",
"\n",
"svi.loss(model, guide, data)\n",
"\n",
"trace_dic = defaultdict(list)\n",
"for name, value in pyro.get_param_store().named_parameters():\n",
" print('tracing', name, type(value), value)\n",
" value.register_hook(lambda grad, name=name: trace_dic[name].append(pyro.param(name).item()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"収束するまで学習"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {
"scrolled": true,
"tags": []
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "f0ac18639c48455d9470c84635e9a796",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=5000.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"num_steps = 5000\n",
"\n",
"with tqdm(range(num_steps)) as pbar:\n",
" for i,p in enumerate(pbar):\n",
"\n",
" loss = svi.step(data)\n",
"\n",
" trace_dic['loss'].append(loss)\n",
"\n",
" if i > 100 and np.isclose(trace_dic['loss'][-100], loss):\n",
" break\n",
" \n",
" if i % 10 == 0:\n",
" pbar.set_postfix(loss=loss)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"lossとパラメータの推移をプロット"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(trace_dic['loss'])\n",
"plt.title(\"ELBO\")\n",
"plt.xlabel(\"step\")\n",
"plt.ylabel(\"loss\");\n",
"savefig(\"loss\")\n",
"plt.show()\n",
"\n",
"\n",
"fig = plt.figure(figsize=(15,5))\n",
"\n",
"for i,param in enumerate(['r']):\n",
" plt.subplot(1,2,i+1)\n",
" plt.plot(trace_dic[param])\n",
" plt.ylabel(param)\n",
"\n",
"plt.tight_layout()\n",
"savefig(\"params\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最尤推定結果と真値の比較"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"r 0.8402442336082458 true r 0.8313413866871807\n"
]
}
],
"source": [
"trace = poutine.trace(model).get_trace()\n",
"\n",
"print('r', trace.nodes['r']['value'].item(), 'true r', true_r)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"推定したパラメータでサンプリング"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAE9CAYAAAAvV+dfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3xV9eH/8dcnyc0ehIRAIIEAMrIgQFgOlgtFARF/grtqcWFFi1VaB2od/arU2mqpu60KIhZRQK0iYckWkBlmICFAQhbZ8/P7A0wRAgRu4Ga8n4/HfZh7zuec8z73Bnh77rnnGGstIiIiInJ23FwdQERERKQhU5kSERERcYLKlIiIiIgTVKZEREREnKAyJSIiIuIElSkRERERJ3i4asOhoaE2KirKVZsXERERqbU1a9Ycsta2qGmey8pUVFQUq1evdtXmRURERGrNGLPnZPP0MZ+IiIiIE1SmRERERJygMiUiIiLiBJedMyUiIlIflJeXk5aWRklJiaujSD3g7e1NREQEDoej1suoTImISJOWlpZGQEAAUVFRGGNcHUdcyFpLVlYWaWlptG/fvtbL6WM+ERFp0kpKSggJCVGREowxhISEnPFRSpUpERFp8lSk5Gdn87tw2jJljHnPGJNhjNl4mnG9jTGVxpjRZ5xCRESkCTPGcOutt1Y/r6iooEWLFlxzzTUAfPDBB4wfP77OtpeUlMQPP/xQ/Xzq1Kn861//qpN1v/DCC2e8jLP7d8cddzBz5kwAFi9eTGxsLAkJCRQXF5/1Os9EbY5MfQAMPdUAY4w78CfgmzrIJCIi0qT4+fmxcePG6n/8v/32W9q0aXPOtnd8mbr33nu57bbb6mTdZ1Om6tJHH33ExIkTWbduHT4+Pudlm6ctU9baRUD2aYY9CHwGZNRFKBERkabmqquuYu7cuQBMmzaNsWPHntHya9asYeDAgfTq1Ysrr7yS/fv3A/D6668TExNDt27dGDNmDCkpKUydOpU///nPJCQksHjxYiZPnswrr7wCwKBBg3j44YcZMGAA0dHRrFq1ilGjRtGpUyeeeOKJ6u2NHDmSXr16ERsby1tvvQXA448/TnFxMQkJCdx8880AfPjhh/Tp04eEhATuueceKisrAXj//ffp3LkzAwcOZOnSpTXu0+TJk7n11lsZMmQInTp14u233waOnCg+fvx4YmJiGDZsGBkZR+rHO++8w4wZM3j22Wert39eWGtP+wCigI0nmdcGWAi4c+Qo1uhTrGccsBpY3bZtWysiIuJqmzdvdnUE6+fnZ9evX2+vv/56W1xcbLt3724XLFhghw0bZq219v3337cPPPDASZcvKyuz/fv3txkZGdZaa6dPn25/9atfWWutDQ8PtyUlJdZaa3Nycqy11j799NP25Zdfrl7+2OcDBw60v/vd76y11r722ms2PDzcpqen25KSEtumTRt76NAha621WVlZ1lpri4qKbGxsbPV0Pz+/6vVu3rzZXnPNNbasrMxaa+19991n//nPf9r09HQbGRlpMzIybGlpqb3wwgtr3L+nn37aduvWzRYVFdnMzEwbERFh9+3bZz/77DN72WWX2YqKCrtv3z4bFBRkP/30U2uttbfffnv1z2erpt8JYLU9Sb+pi0sjvAY8Zq2tPN1JW9bat4C3ABITE20dbLvB25CWd8K0+IigOl2fs+sUEWkqJkyYwLp16+p0nQkJCbz22munHdetWzdSUlKYNm0aV1999RltIzk5mY0bN3L55ZcDUFlZSXh4ePV6b775ZkaOHMnIkSNrtb7hw4cDEB8fT2xsbPW6OnToQGpqKiEhIbz++uvMmjULgNTUVLZv305ISMgv1jN//nzWrFlD7969ASguLiYsLIwVK1YwaNAgWrQ4ct/gG2+8kW3bttWYZcSIEfj4+ODj48PgwYNZuXIlixYtYuzYsbi7u9O6dWuGDBlyJi9XnauLMpUITD9apEKBq40xFdbaz+tg3SIiIk3G8OHDmThxIklJSWRlZdV6OWstsbGxLFu27IR5c+fOZdGiRXzxxRc899xzbNq06bTr8/LyAsDNza3655+fV1RUkJSUxHfffceyZcvw9fVl0KBBNV5OwFrL7bffzosvvviL6Z9//nmtvzV3/Lifn9enb2A6XaastdVXtTLGfADMUZESEZGGqDZHkM6lO++8k6CgIOLj40lKSqr1cl26dCEzM5Nly5bRv39/ysvL2bZtG9HR0aSmpjJ48GAuvvhiPv74YwoKCggICODw4cNnnTMvL4/g4GB8fX3ZunUry5cvr57ncDgoLy/H4XBw6aWXMmLECB5++GHCwsLIzs4mPz+fvn378tBDD5GVlUVgYCCffvop3bt3r3Fbs2fPZtKkSRQWFpKUlMRLL71EZWUl//jHP7jtttvIyMhgwYIF3HTTTWe9P846bZkyxkwDBgGhxpg04GnAAWCtnXpO04mIiDQhERERPPTQQzXO++CDD/j88/8dq1i+fDkREREAeHp6MnPmTH7zm9+Ql5dHRUUFEyZMoHPnztxyyy3k5eVhreXhhx+mWbNmXHvttYwePZrZs2fz17/+9YxzDh06lKlTp9KtWze6dOlCv379queNGzeObt260bNnTz766CP++Mc/csUVV1BVVYXD4eCNN96gX79+TJ48mf79+xMeHk7Pnj2rT0w/Xp8+fRg2bBh79+7lySefpHXr1lx33XV8//33xMfHV5/E7krmyDlV519iYqJdvXq1S7Zdn+icKRER19qyZQvR0dGujiE1mDx5Mv7+/kycOPG8brem3wljzBprbWJN43UFdBEREREn6EbHIiIiUi9NnjzZ1RFqRUemRERERJygMiUiIiLiBJUpERERESeoTImIiIg4QWVKRETEhXJzc3nzzTddHYM77riDmTNnArB48WJiY2NJSEiguLjYxcnqP5UpERERFzpVmTrZhSzPtY8++oiJEyeybt06fHx8XJKhIVGZEhERcaHHH3+cnTt3kpCQwKOPPkpSUhKDBw/mpptuIj4+npSUFOLi4qrHv/LKK9WXDNi5cydDhw6lV69eXHLJJWzduvWE9U+ePJlbb72VIUOG0KlTJ95++23gyH3zxo8fT0xMDMOGDSMjIwOAd955hxkzZvDss89y8803n/sXoBHQdaZERERc6KWXXmLjxo2sW7cOgKSkJFauXMnGjRtp3749KSkpJ1123LhxTJ06lU6dOrFixQruv/9+vv/++xPG/fTTTyxfvpzCwkJ69OjBsGHDWL58OcnJyWzYsIGDBw8SExPDnXfeyd13382SJUu45pprGD169Lna7UZFZUpERORnEybA0VJTZxIS4AxvoNynTx/at29/yjEFBQX88MMP3HDDDdXTSktLaxw7YsQIfHx88PHxYfDgwaxcuZJFixYxduxY3N3dad26NUOGDDmjjPI/KlMiIiL1jJ+fX/XPHh4eVFVVVT8vKSkBoKqqimbNmlUf0ToVY0yNz4+fLmdHZUpERORnZ3gEqS4EBASQn59/0vktW7YkIyODrKws/P39mTNnDkOHDiUwMJD27dvz6aefcsMNN2Ct5aeffqJ79+4nrGP27NlMmjSJwsJCkpKSeOmll6isrOQf//gHt912GxkZGSxYsICbbrrpXO5qo6UT0EVERFwoJCSEiy66iLi4OB599NET5jscDp566in69u3LNddcQ9euXavnffTRR7z77rt0796d2NhYZs+eXeM2+vTpw7Bhw+jXrx9PPvkkrVu35rrrrqNTp07Ex8dz3333MXDgwHO2j42dsda6ZMOJiYl29erVLtl2fbIhLe+EafERQXW6PmfXKSLSmG3ZsoXo6GhXxzhnJk+ejL+/PxMnTnR1lAajpt8JY8waa21iTeN1ZEpERETECTpnSkREpBH7+ZpUcu7oyJSIiIiIE1SmRERERJygMiUiIiLiBJUpERERESeoTImIiIg4QWVKRERExAkqUyIiIvVUSkoKcXFxro5xgsmTJ/PKK684PSY3N5c333zzrDJUVVVxzTXXEB8fT2pqaq2WeeSRR4iOjmbBggVntc2T0XWmREREjnGyO0mcrfp0BwprLdZa3Nzqx7GUn8vU/ffff8bLbtiwgYyMDDZs2FDrZaZMmUKfPn147733GDx48Blv82Tqx6spIiLSxE2ZMoW4uDji4uJ47ZgbLldUVHD77bfTrVs3Ro8eTVFREYWFhQwbNozu3bsTFxfHJ598AsCHH35Inz59SEhI4J577qGyspKUlBSio6O5//776dmzJ3fdddcvjgZNnjyZV1999aTL/+z555+nS5cuXHbZZSQnJ9e4DycbM3LkSHr16kVsbCxvvfVW9fTHH3+cnTt3kpCQwKOPPnrScTXJzc0lLCzsF9MGDx7Mt99+C8ATTzzBb37zmxOWa9WqFbm5uadc95nSkSkREREXW7NmDe+//z4rVqzAWkvfvn0ZOHAgwcHBJCcn8+6773LRRRdx55138uabb9K+fXtat27N3LlzAcjLy2PLli188sknLF26FIfDwf33389HH33EgAEDSE5O5v333+fNN99k7dq1TJgwofpo0IwZM/j6669Puvxtt93GmjVrmD59OmvXrqWiooKePXvSq1evE/bhZGPee+89mjdvTnFxMb179+b6668nJCSEl156iY0bN7Ju3ToAsrOzaxxXk8rKyhOOsD3zzDM89dRTZGRksHbtWr744osTlnNzc/tFSawLOjIlIiLiYkuWLOG6667Dz88Pf39/Ro0axeLFiwGIjIzkoosuAuCWW25hyZIlxMfH89133/HYY4+xePFigoKCmD9/PmvWrKF3794kJCQwf/58du3aBUC7du3o168fAD169CAjI4P09HTWr19PcHAwbdu2PeXyixcv5rrrrsPX15fAwECGDx9+wj6caszrr79O9+7d6devH6mpqWzfvr3G16G24wDWrVtHRETEL6YNGDAAay1Tpkxh+vTpuLu7A/Dkk09Wj2nTpg3btm2jpKTk1G/KGTjtkSljzHvANUCGtfaEs+CMMTcDjx19WgDcZ61dX2cJRUREGjlr7UnnGWNOeN65c2fWrFnDvHnzmDRpEldccQXBwcHcfvvtvPjii78Yn5KSgp+f3y+mjR49mpkzZ3LgwAHGjBlTnaGm5U+Wo7ZjkpKS+O6771i2bBm+vr4MGjSoxiJT23EAN910E3PmzCEpKekX0zds2MD+/fsJDQ0lICAAgAMHDlBRUVE9pmPHjsTExFQXyPj4+NPu1+nU5sjUB8DQU8zfDQy01nYDngNO/SGniIiI/MKAAQP4/PPPq8+HmjVrFpdccgkAe/fuZdmyZQBMmzaNiy++mPT0dHx9fbnllluYOHEiP/74I5deeikzZ84kIyMDOPKR2Z49e2rc3pgxY5g+fTozZ85k9OjRAKdcfsCAAcyaNYvi4mLy8/P58ssva9yHmsbk5eURHByMr68vW7duZfny5dXLBAQEkJ+ff9pxx/v44495+eWXf3Fu2f79+7n55puZPXs2fn5+fPPNNwCsXbuWhISE6nHr169n165d7Nu3r06KFNTiyJS1dpExJuoU83845ulyIOJkY0VEROREPXv25I477qBPnz4A3H333fTo0aP65PF//vOf3HPPPXTq1In77ruPxYsX8+ijj+Lm5obD4eDvf/87MTEx/PGPf+SKK66gqqoKh8PBG2+8QatWrU7YXmxsLPn5+bRp04bw8HCAky7frl07evbsyY033khCQgLt2rWrLnrH70NNY4YOHcrUqVPp1q0bXbp0qf64ESAkJISLLrqIuLg4Lr/8cioqKmocV5MuXbpUF7aioiJGjRrFq6++SnR0NE8++SSPPfYYV155JevWrWPUqFHVy+Xk5BAVFYXD4TjDd+nkzKkOLVYPOlKm5tT0Md9x4yYCXa21d59k/jhgHEDbtm17nawxNyU1fQXXma/RnuwrvfXpq7kiIvXJli1biI6OdnUMOUMrV67kwQcf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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"\n",
"# traceでパラメータを取得\n",
"trace = poutine.trace(model).get_trace()\n",
"r = trace.nodes['r']['value'].item()\n",
"\n",
"# generate a pdf\n",
"estimated_dist = dist.Exponential(r)\n",
"y = [estimated_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"# plot\n",
"plt.plot(x_range, y, c='k', label='ML estimated pdf')\n",
"plt.plot(x_range, true_y, c='r', label=r'true pdf')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"savefig(\"sampled-pdf\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"観測データobsのサンプリング."
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAE9CAYAAAAvV+dfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3df5RVdb3/8edbwriooQmZMiCUqCg/RhjRLoZYaZguTa8ttSg1DX9k3uqbad9+WddWtjKWuRK5VKR9K9FrZmqkqWGiaQGKgD8wUpIJDdMkFanQ9/ePOc4dhjPMgX1mzpnh+Vhrlmfv/dl7v+ecyV5+9ud8PpGZSJIkaetsV+sCJEmSejLDlCRJUgGGKUmSpAIMU5IkSQUYpiRJkgowTEmSJBXwhlrdeODAgTls2LBa3V6SJKliixYt+mtmDip3rGZhatiwYSxcuLBWt5ckSapYRPypo2M+5pMkSSrAMCVJklSAYUqSJKmAmo2ZkiSpHvzrX/+iubmZ9evX17oU1YF+/frR0NBA3759Kz7HMCVJ2qY1Nzez0047MWzYMCKi1uWohjKT5557jubmZoYPH17xeT7mkyRt09avX8+uu+5qkBIRwa677rrFvZSGKUnSNs8gpddtzd9Cp2EqImZHxJqIWNZJuwMj4tWIOGGLq5AkSeqhKumZugqYsrkGEdEH+AZwWxVqkiRJ6jE6DVOZeTfwfCfNPgH8FFhTjaIkSRKsXLmSUaNG1bqMTVx00UVceumlhdu88MILzJgxY6tqeO211zj66KMZPXo0q1atquicT3/604wcOZJ58+Zt1T07UvjbfBExGDgOeBdwYCdtpwHTAIYOHVr01pIkVd3S5rVVvd7ohgFVvV4RmUlmst129TFk+vUwdc4552zxuUuXLmXNmjUsXbq04nOmT5/OhAkTmD17NocddtgW37Mj1Xg3LwMuyMxXO2uYmbMysykzmwYNKrtW4DZnafPaTX6qfb1q/4tBklR906dPZ9SoUYwaNYrLLrusdf+GDRs45ZRTGDNmDCeccALr1q3j5Zdf5qijjmLs2LGMGjWKa6+9FoAf/ehHTJgwgcbGRs4880xeffVVVq5cyciRIznnnHMYN24cp59++ka9QRdddBHf+ta3Ojz/dV/72tfYZ599eM973sPy5cvL/g4dtXn/+9/P+PHj2X///Zk1a1br/gsvvJA//vGPNDY2cv7553fYrpwXXniBt7zlLRvtO+yww7j99tsB+MIXvsB55523yXlvfetbeeGFFzZ77S1VjXmmmoA5pdHvA4H3RcSGzLyxCteWJKnXW7RoET/4wQ/43e9+R2Zy0EEHceihh7LLLruwfPlyvv/97zNx4kQ++tGPMmPGDIYPH84ee+zBL37xCwDWrl3Lo48+yrXXXsu9995L3759Oeecc/jxj3/MpEmTWL58OT/4wQ+YMWMGDz74IJ/85Cdbe4Ouu+46br311g7P/8hHPsKiRYuYM2cODz74IBs2bGDcuHGMHz9+k9+hozazZ8/mzW9+M6+88goHHngg//Ef/8Guu+7KJZdcwrJly1i8eDEAzz//fNl25bz66qub9LB95Stf4Utf+hJr1qzhwQcf5KabbtrkvO22226jkFgNhXumMnN4Zg7LzGHA9cA5BilJkip3zz33cNxxx7HDDjuw4447cvzxxzN//nwAhgwZwsSJEwGYOnUq99xzD6NHj+aOO+7gggsuYP78+QwYMIA777yTRYsWceCBB9LY2Midd97JE088AcCee+7JwQcfDMABBxzAmjVrWL16NQ899BC77LILQ4cO3ez58+fP57jjjqN///686U1v4phjjtnkd9hcm8svv5yxY8dy8MEHs2rVKv7whz+UfR8qbQewePFiGhoaNto3adIkMpPp06czZ84c+vTpA8AXv/jF1jaDBw/m8ccfr+qM9532TEXENcBkYGBENANfBvoCZObMqlUiSdI2KjM7PNZ+3qOIYO+992bRokXMnTuXz33ucxxxxBHssssunHLKKXz961/fqP3KlSvZYYcdNtp3wgkncP311/PMM89w0kkntdZQ7vyO6qi0zV133cUdd9zBfffdR//+/Zk8eXLZIFNpO4APfvCD3HLLLdx1110b7V+6dClPP/00AwcOZKeddgLgmWeeYcOGDa1t3v72t7Pffvu1BsjRo0d3+nt1ppJv852cmbtnZt/MbMjM72fmzHJBKjNPzczrC1clSdI2ZNKkSdx4442t46F+9rOf8c53vhOAp556ivvuuw+Aa665hkMOOYTVq1fTv39/pk6dymc+8xkeeOAB3v3ud3P99dezZk3LF+uff/55/vSnP5W930knncScOXO4/vrrOeGElukhN3f+pEmT+NnPfsYrr7zCiy++yM0331z2dyjXZu3ateyyyy7079+fxx57jPvvv7/1nJ122okXX3yx03bt/eQnP+Gb3/zmRmPLnn76aT70oQ/x85//nB122IHbbmuZrenBBx+ksbGxtd1DDz3EE088wZ///OeqBClwbT5Jkmpu3LhxnHrqqUyYMAGAM844gwMOOKB18PjVV1/NmWeeyYgRIzj77LOZP38+559/Pttttx19+/blyiuvZL/99uPiiy/miCOO4LXXXqNv375cccUVvPWtb93kfvvvvz8vvvgigwcPZvfddwfo8Pw999yTcePGceKJJ9LY2Miee+7ZGvTa/w7l2kyZMoWZM2cyZswY9tlnn9bHjQC77rorEydOZNSoURx++OFs2LChbLty9tlnn9bAtm7dOo4//ni+9a1vMXLkSL74xS9ywQUX8N73vpfFixdz/PHHt573t7/9jWHDhm3RQsadic11LXalpqamXLhwYU3uXU/KfdOuyNdoO/rmXj19NVeS6smjjz7KyJEja12GttDvf/97PvGJT3D//fdv9hHk6aefzne/+93WwerXXXcdP/3pT1u/AVlOub+JiFiUmU3l2tfHRBOSJElboLGxkSFDhtDY2LjZSTu///3vtwapT3/603zjG9/gjDPOqGotPuaTJEk9zvbbb8/112/ZMO3p06d3SS32TEmSJBVgmJIkSSrAMCVJklSAYUqSJKkAw5QkSVIBhilJkqQCDFOSJG1DJk+ezJZMmn3XXXdx9NFHV+W6l112GevWrav43hdddFHFbWvJeaYkSWpr0aLqXm/8+Operwe77LLLmDp1Kv37999su3vuuYdPfepTrFq1irlz53LJJZfwrne9q5uq3HL2TEmSVEMvv/wyRx11FGPHjmXUqFGty5x89atf5cADD2TUqFFMmzaN15d/mzx5Mp/61KeYNGkSI0eOZMGCBRx//PGMGDGCL3zhCwCsXLmSfffdl1NOOYUxY8ZwwgknlO0R+tWvfsU73vEOxo0bxwc+8AFeeuklAG699Vb23XdfDjnkEG644Yaydb/yyiucdNJJjBkzhhNPPJFXXnml9djZZ59NU1MT+++/P1/+8pcBuPzyy1m9ejWHHXYYhx12WIftoGWm8q9//eucddZZ3H777ey1115F3+YuZZiSJKmGbr31VvbYYw8eeughli1bxpQpUwA499xzWbBgAcuWLeOVV17hlltuaT1n++235+677+ass87i2GOP5YorrmDZsmVcddVVPPfccwAsX76cadOmsWTJEt70pjcxY8aMje7717/+lYsvvpg77riDBx54gKamJqZPn8769ev52Mc+xs0338z8+fN55plnytZ95ZVX0r9/f5YsWcLnP/95FrXp0fva177GwoULWbJkCb/5zW9YsmQJ5513HnvssQfz5s1j3rx5HbZ7/fd7/b4DBgxg6NChVXq3u4ZhSpKkGho9ejR33HEHF1xwAfPnz2fAgJaF6efNm8dBBx3E6NGj+fWvf83DDz/ces4xxxzTeu7+++/P7rvvzhvf+Ebe9ra3ta5TN2TIECZOnAjA1KlTueeeeza67/33388jjzzCxIkTaWxs5Oqrr+ZPf/oTjz32GMOHD2fEiBFEBFOnTi1b99133916bMyYMYwZM6b12HXXXce4ceM44IADePjhh3nkkUfKXqOjdrNmzeLaa6/l8ssv5+STT2blypVb+rZ2K8dMSZJUQ3vvvTeLFi1i7ty5fO5zn+OII47gs5/9LOeccw4LFy5kyJAhXHTRRaxfv771nDe+8Y0AbLfddq2vX9/esGEDABGx0X3ab2cmhx9+ONdcc81G+xcvXrxJ246Ua/fkk09y6aWXsmDBAnbZZRdOPfXUjWqvpN1+++3HzTffzOc//3kGDx7M6aefzp133llRTbVgz5QkSTW0evVq+vfvz9SpU/nMZz7DAw880BoqBg4cyEsvvbTFC/oCPPXUU9x3330AXHPNNRxyyCEbHT/44IO59957WbFiBQDr1q3j8ccfZ9999+XJJ5/kj3/8Y+u55UyaNIkf//jHACxbtqz1Ed3f//53dthhBwYMGMBf/vIXfvnLX7aes9NOO/Hiiy922m7ZsmUA9O3bl3HjxrWeU6/smZIkqYaWLl3K+eefz3bbbUffvn258sor2XnnnfnYxz7G6NGjGTZsGAceeOAWX3fkyJFcffXVnHnmmYwYMYKzzz57o+ODBg3iqquu4uSTT+Yf//gHABdffDF77703s2bN4qijjmLgwIEccsghreGmrbPPPpvTTjuNMWPG0NjYyIQJEwAYO3YsBxxwAPvvvz9ve9vbWh81AkybNo0jjzyS3XffnXnz5nXYbsaMGSxevJhVq1Zx4403ctlll23x79+d4vVvB3S3pqam3JJ5Lnqrpc1rN9k3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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"obs = []\n",
"for _ in range(5000):\n",
" trace = poutine.trace(model).get_trace()\n",
" obs.append(trace.nodes['obs']['value'].item())\n",
"\n",
"plt.xlabel('posterior samples')\n",
"\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"plt.hist(obs, range=(x_min, x_max), bins=100, alpha=0.2, density=True, color='r', label=r'sampled data$')\n",
"\n",
"plt.legend()\n",
"savefig(\"pdf-obs\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ガンマ分布の最尤推定"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"保存先設定"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [],
"source": [
"experiment_name = \"gamma\"\n",
"\n",
"file_format = \"png\" # \"pdf\"\n",
"savedir = \"./20200627_pyro_5th_trial/\"\n",
"os.makedirs(savedir, exist_ok=True)\n",
"\n",
"def savefig(desc):\n",
" fig.savefig(os.path.join(savedir, '{0}_{1}.{2}'.format(\n",
" experiment_name, desc, file_format)), bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真のmとbをランダムに作成"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"m = 3.5213195402661412 b = 0.36378480532015733\n",
"x_range: from 0.010 to 19.350\n"
]
}
],
"source": [
"true_m = np.abs(np.random.rand() * 10)\n",
"true_b = np.abs(np.random.rand() * 2)\n",
"print('m =', true_m, 'b =', true_b)\n",
"\n",
"x_range = np.arange(0.01, 2 * true_m / true_b, 0.01) # m/bが分散\n",
"x_max = x_range.max()\n",
"x_min = x_range.min()\n",
"print('x_range: from {0:.3f} to {1:.3f}'.format(x_min, x_max))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真の分布からデータをサンプリング.最尤推定の解析解を計算."
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlwAAAFNCAYAAADVfrETAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3wVVf7/8dcnIRCagHQIkNBLQgIkSIfQmxSXXQUV1EUWXKyrK/sVC6vurqJYQVTEdRUBRVBAEJAiRbo06cUooQVQkBpIcn5/3JBfgCRcyuUm4f18PO4j986cM/czk+HmzZm5M+acQ0RERER8J8DfBYiIiIjkdgpcIiIiIj6mwCUiIiLiYwpcIiIiIj6mwCUiIiLiYwpcIiIiIj6mwCUiNzQzc2ZW1d91iEjupsAlIj5nZiXMbImZHTazI2a21MyaZtH+v2Z2xsyOp3sEps6rbmZfmdlBM/vVzGaZWY10fcNTpx0ys+t2oUEz62NmP5vZCTP70sxuzqLt/NT6fzezdWbW/YL5Jc3s09Rt9ZuZjctgGTenLmOxL9ZHRK4tBS4RuR6OA/cBJYFiwEvANDPLk0Wfl51zhdI9klOnFwWmAjWA0sAK4Kt0/c4CnwF/vsbrkCkzqwO8C9ydWtNJYFQWXR4GyjrnbgIGAJ+YWdl08ycD+4FKQCnglQyW8RKw+eqrF5HrQYFLRM5jZnFm9oSZrU8drfnAzEqb2UwzO2Zm35pZsctZpnPutHNuq3MuBTAgGU/wynQUKItlrXDOfeCc+9U5dxZ4DahhZsVT5291zn0AbLyMxXY2s12po2LDzexyPxvvBKY55xY6544DTwO3mVnhTNZhvXMu6dxLIAioAGBm7VOfP+GcO+qcO+ucW5O+v5k1BsKBDy+zThHxEwUuEcnIH4B2QHXgVmAm8H9ACTyfGw+da5h62Cuzx5D0CzWz9cBpPCNUY5xzCVnU8EDqIcPVZvaHLNq1APY75w5fyYqm6glEA/WB7nhG4zCzZpdYv2ap/esA684tzDm3EziDZ/tlyMymm9lpYDmwAFiVOqsRsBX4KPUQ7Eoza5muXyAwEhiMJ6yJSA6Q1XC+iNy43nLOHQAws0VAwrlRFjObArQ519A5V9TbhTrn6ppZMJ6AkzeLpm8CfwOOAu2BiWa23zm3JH0jMwvBEz4e87aGTLzknPsV+NXMXgd64wmEi/EcwryUQqm1pncUyHCEC8A519XMgoC2QM3U0T+AEDzr3B+4F0/4/crMqjrnDuEJu8udc6vNLML7VRQRf9IIl4hk5EC656cyeF3oShecenhxPDDEzCIzafODc+6wcy7JOTcDGAfclr6NmZUEZgOjUpd3NXane/4zUO4y+x8Hbrpg2k3Asaw6pR4unAl0MLNuqZNPAXGph03POucmpNbX1MzK4QlcT11mfSLiZwpcInJVLvgm4YWP/8uiaxBQ2cu3cXjO/Tr3nsXwhK2pzrkXr7z6NBXSPa8I7E19n+aXWL/mqX02Amnh0cwqA/mAbV6+fx6gSurz9WR+qLAhUBbYZGb7gTeAhma2/9y3OEUke9IhRRG5Ks65S452mVkjPJ83K4BAPKM0pfGcv5RR+17AN3i+7dcWuAvPuWSY2U3ALGCJc25IBn0NT9jJm/o62FOmS8yixCfMbDmekbuHgRGp67YI70bzxgFLUwPYD8A/gcnOuYtGuMysJhCG57ytJOB2POeh/T21yRTgFTPrB3yC5/BreWAJnhGz0HSLux3oA3RP9y1OEcmGNMIlItdDPjznWh0G9gCdgS7OuXMjSXeaWfpvFT6c2u4IMBy43zm3IHVeTyAGuPeC0aaKqfMr4Tksd255p/CchJ6Vr4DVwFrga+CDy1k559xGYCCe4JWA59ytB87NN7PRZjb63EvgudR2B1PX9Xbn3A+py/oV6AY8juc8sCF4AtUh51yic27/uUfq/LOpz0UkGzPn9CUXEREREV/SCJeIiIiIjylwiYiIiPiYApeIiIiIjylwiYiIiPiYApeIiIiIj2XL63CVKFHChYaG+rsMERERkUtavXr1IedcyazaZMvAFRoayqpVqy7dUERERMTPzOznS7XRIUURERERH1PgEhEREfExBS4RERERH8uW53CJiIhkB2fPniU+Pp7Tp0/7uxTJBoKDgwkJCSEoKOiy+ypwiYiIZCI+Pp7ChQsTGhqKmfm7HPEj5xyHDx8mPj6esLCwy+6vQ4oiIiKZOH36NMWLF1fYEsyM4sWLX/FopwKXiIhIFhS25Jyr2RcUuERERER8TIFLREQkGztw4AB9+vShcuXKNGjQgMaNGzNlyhR/lwVAr1692LVr1xX1XbBgAV27ds1wXtu2bfntt9+uprRsR4FLREQkm3LO0aNHD1q0aMGuXbtYvXo1EyZMID4+3t+lsXHjRpKTk6lcufI1X/bdd9/NqFGjrvly/UmBS0REJJuaN28eefPmZeDAgWnTKlWqxIMPPkhcXBzNmzenfv361K9fn++//x7wjBy1bNmSP/3pT1SvXp0hQ4Ywbtw4GjZsSEREBDt37gTgnnvuYdCgQcTGxlK5cmW+++477rvvPmrVqsU999yT9n6DBg0iOjqaOnXq8Oyzz6ZNHzduHN27d097XahQIZ588kkaNGhA27ZtWbFiBa1ataJy5cpMnTo1w/X7/fff6dmzJ7Vr12bgwIGkpKQA0K1bN8aPH3/NtmN2oMtCiIj42Ib4oxdNiwgp4odK5Go88sgjrF279pouMyoqitdffz3T+Rs3bqR+/foZzitVqhRz5swhODiY7du307t377T7EK9bt47Nmzdz8803U7lyZfr378+KFSt44403eOutt9Le87fffmPevHlMnTqVW2+9lSVLljBmzBhiYmJYu3YtUVFRvPjii9x8880kJyfTpk0b1q9fT926dVmyZAm9e/dOq+fEiRO0atWKl156iZ49ezJ06FDmzJnDpk2b6NevH926dbtoHVasWMGmTZuoVKkSHTt2ZPLkyfTq1YtixYqRmJjI4cOHKV68+NVs4mxDI1wiIiI5xF//+lciIyOJiYnh7Nmz3H///URERPDHP/6RTZs2pbWLiYmhbNmy5MuXjypVqtC+fXsAIiIiiIuLS2t36623YmZERERQunRpIiIiCAgIoE6dOmntPvvsM+rXr0+9evXYuHFj2vvs27ePkiVLpi0rb968dOzYMe19WrZsSVBQ0EXvmV7Dhg2pXLkygYGB9O7dm8WLF6fNK1WqFHv37r0Wmy1b0AiXiIiIF7IaifKVOnXq8MUXX6S9HjlyJIcOHSI6OprXXnuN0qVLs27dOlJSUggODk5rly9fvrTnAQEBaa8DAgJISkq6qF36Nunb/fTTT7zyyiusXLmSYsWKcc8996Rdhyp//vznXZMqKCgo7bIJWb1nehdeZiH969OnT5M/f35vNlOOoBEuERGRbKp169acPn2ad955J23ayZMnATh69Chly5YlICCAjz/+mOTk5Gv+/r///jsFCxakSJEiHDhwgJkzZ6bNq1WrFjt27Lis5e3Zs4c2bdqkvV6xYgU//fQTKSkpTJw4kWbNmgGeLwvs37+f0NDQa7Ie2YECl4iISDZlZnz55Zd89913hIWF0bBhQ/r168dLL73EAw88wEcffUSjRo3Ytm0bBQsWvObvHxkZSb169ahTpw733XcfTZs2TZvXpUsXFixYcFnL27dvH3ny/P+Da40bN2bIkCGEh4cTFhZGz549AVi9ejWNGjU6r21OZ845f9dwkejoaHfuxD8RkZxOJ83nXJs3b6ZWrVr+LiNbOnXqFLGxsSxZsoTAwECv+rz99ttUrFgxwxPo03v44Yfp1q3beaNh2UVG+4SZrXbORWfVL/dERxEREblu8ufPz7Bhw9izZw8VK1b0qs/gwYO9ahceHp4tw9bVUOASERGRK9KhQwefLPf+++/3yXL9SedwiYiIiPiYApeIiIiIjylwiYiIiPiYApeIiIiIj3kVuMyso5ltNbMdZjYkg/l3mtn61Mf3ZhaZbl6cmW0ws7Vmpms9iIiIyA3nkoHLzAKBkUAnoDbQ28xqX9DsJ6Clc64u8Dzw3gXzY51zUZe6RoWIiIh4Jy4ujvDwcH+XcZHnnnuOV1555arbHDlyhFGjRl1RDSkpKXTt2pWIiAh2797tVZ/HHnuMWrVqMX/+/Ct6z0vx5rIQDYEdzrldAGY2AegOpN0l0zn3fbr2y4CQa1mkiIhIdpDRRWyvRna6AK5zDuccAQHZ42yjc4HrgQceuOy+GzZsICEhgQ0bNnjdZ8SIETRs2JCxY8cSGxt72e95Kd5s1fJA+ngYnzotM38GZqZ77YDZZrbazAZcfokiIiI3thEjRhAeHk54ePh5N9FOSkqiX79+1K1bl169enHy5ElOnDhBly5diIyMJDw8nIkTJwLwySef0LBhQ6KiovjLX/5CcnIycXFx1KpViwceeID69evz5z//+bxRpeeee45XX3010/7nvPjii9SoUYO2bduydevWDNchszY9evSgQYMG1KlTh/fe+/8HyIYMGcLOnTuJioriiSeeyLRdRo4cOUKpUqXOmxYbG8ucOXMAGDp0KA899NBF/cqUKcORI0eyXPaV8maEyzKYluH9gMwsFk/gapZuclPn3F4zKwXMMbMtzrmFGfQdAAwAvL5irYiISG63evVqPvzwQ5YvX45zjltuuYWWLVtSrFgxtm7dygcffEDTpk257777GDVqFGFhYZQrV46vv/4a8NzkevPmzUycOJElS5YQFBTEAw88wLhx42jRogVbt27lww8/ZNSoUaxZs4ZHHnkkbVTps88+45tvvsm0f9++fVm9ejUTJkxgzZo1JCUlUb9+fRo0aHDROmTWZuzYsdx8882cOnWKmJgY/vCHP1C8eHH+85//8OOPP7J27VoAfv311wzbZSQ5Ofmikbphw4bxzDPPkJCQwJo1a5g6depF/QICAnxyE3DwboQrHqiQ7nUIsPfCRmZWFxgDdHfOHT433Tm3N/VnAjAFzyHKizjn3nPORTvnokuWLOn9GoiIiORiixcvpmfPnhQsWJBChQpx2223sWjRIgAqVKiQdkPpu+66i8WLFxMREcG3337Lk08+yaJFiyhSpAhz585l9erVxMTEEBUVxdy5c9m1axcAlSpVolGjRgDUq1ePhIQE9u7dy7p16yhWrBgVK1bMsv+iRYvo2bMnBQoU4KabbsrwPolZtXnzzTeJjIykUaNG7N69m+3bt2e4HbxtB7B27VpCQs4/u6lFixY45xgxYgQTJkxIu//j008/ndamfPnybNu2jdOnT2f9S7kC3oxwrQSqmVkYsAe4A+iTvoGZVQQmA3c757alm14QCHDOHUt93h7457UqXkREJLdzLsODSgCY2UWvq1evzurVq5kxYwb/+Mc/aN++PcWKFaNfv378+9//Pq99XFwcBQsWPG9ar169mDRpEvv37+eOO+5IqyGj/pnV4W2bBQsW8O2337J06VIKFChAq1atMgw73rYD6NOnD9OnT2fBggXnTd+wYQP79u2jRIkSFC5cGID9+/eTlJSU1qZKlSrUrl07LWRGRERccr28dckRLudcEjAYmAVsBj5zzm00s4FmNjC12TNAcWDUBZd/KA0sNrN1wArga+fcN9esehERkVyuRYsWfPnll2nnZ02ZMoXmzZsD8Msvv7B06VIAxo8fT7Nmzdi7dy8FChTgrrvu4vHHH+eHH36gTZs2TJo0iYSEBMBzeO7nn3/O8P3uuOMOJkyYwKRJk+jVqxdAlv1btGjBlClTOHXqFMeOHWPatGkZrkNGbY4ePUqxYsUoUKAAW7ZsYdmyZWl9ChcuzLFjxy7Z7kKffvopw4cPP+9ct3379nHnnXfy1VdfUbBgQWbNmgXAmjVriIqKSmu3bt06du3axZ49e65p2AIvb17tnJsBzLhg2uh0z/sD/TPotwuIvHC6iIiIeKd+/frcc889NGzoOSOnf//+1KtXL+2E948++oi//OUvVKtWjUGDBrFo0SKeeOIJAgICCAoK4p133qF27dq88MILtG/fnpSUFIKCghg5ciRlypS56P3q1KnDsWPHKF++PGXLlgXItH+lSpWoX78+t99+O1FRUVSqVCktDF64Dhm16dixI6NHj6Zu3brUqFEj7dAmQPHixWnatCnh4eG0a9eOpKSkDNtlpEaNGmmh7uTJk9x22228+uqr1KpVi6effponn3ySDh06sHbtWm677ba0fr/99huhoaEEBQVd5m/p0iyroUp/iY6OdqtW6RqpIpI7ZHQpgex0OQDJ3ObNm6lVq5a/y5DLtGLFCh588EGWLVuW5eHOP//5z7z//vtpJ9h/9tlnfPHFF2nf7MxIRvuEma2+1LVGs8fFNkRERESukaioKCpUqEBUVFSWFz794IMP0sLWY489xksvvUT//hcdsLsmvDqkKCIiIpJT5M2bl0mTJl1WnxEjRvioGg+NcImIiIj4mAKXiIiIiI8pcImIiIj4mAKXiIhIFrLjt/nFP65mX1DgEhERyURwcDCHDx9W6BKccxw+fJjg4OAr6q9vKYqIiGQiJCSE+Ph4Dh486O9SJBsIDg6+6B6N3lLgEhERyURQUBBhYWH+LkNyAR1SFBEREfExBS4RERERH1PgEhEREfExBS4RERERH1PgEhEREfExBS4RERERH1PgEhEREfExBS4RERERH1PgEhEREfExBS4RERERH1PgEhEREfExBS4RERERH1PgEhEREfExBS4RERERH1PgEhEREfExBS4RERERH1PgEhEREfExBS4RERERH1PgEhEREfExBS4RERERH1PgEhEREfGxPP4uQORKbIg/etG0iJAifqhEztHvREQkcxrhEhEREfExBS4RERERH1PgEhEREfExBS4RERERH1PgEhEREfExBS4RERERH1PgEhEREfExBS4RERERH/MqcJlZRzPbamY7zGxIBvPvNLP1qY/vzSzS274iIiIiud0lA5eZBQIjgU5AbaC3mdW+oNlPQEvnXF3geeC9y+grIiIikqt5M8LVENjhnNvlnDsDTAC6p2/gnPveOfdb6stlQIi3fUVERERyO28CV3lgd7rX8anTMvNnYOYV9hURERHJdby5ebVlMM1l2NAsFk/ganYFfQcAAwAqVqzoRVkiIiIiOYM3I1zxQIV0r0OAvRc2MrO6wBigu3Pu8OX0BXDOveeci3bORZcsWdKb2kVERERyBG8C10qgmpmFmVle4A5gavoGZlYRmAzc7Zzbdjl9RURERHK7Sx5SdM4lmdlgYBYQCIx1zm00s4Gp80cDzwDFgVFmBpCUOlqVYV8frYuIiIhItuTNOVw452YAMy6YNjrd8/5Af2/7ioiIiNxIdKV5ERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER9T4BIRERHxMQUuERERER/L4+8CJHfZEH/0omkRIUX8UEnul9G2zszV/A6u5nfqr77XS06oMSM5tW6RnEwjXCIiIiI+psAlIiIi4mMKXCIiIiI+psAlIiIi4mMKXCIiIiI+5lXgMrOOZrbVzHaY2ZAM5tc0s6Vmlmhmj18wL87MNpjZWjNbda0KFxEREckpLnlZCDMLBEYC7YB4YKWZTXXObUrX7FfgIaBHJouJdc4dutpiRURERHIib0a4GgI7nHO7nHNngAlA9/QNnHMJzrmVwFkf1CgiIiKSo3kTuMoDu9O9jk+d5i0HzDaz1WY24HKKExEREckNvLnSvGUwzV3GezR1zu01s1LAHDPb4pxbeNGbeMLYAICKFStexuJFREREsjdvRrjigQrpXocAe719A+fc3tSfCcAUPIcoM2r3nnMu2jkXXbJkSW8XLyIiIpLteRO4VgLVzCzMzPICdwBTvVm4mRU0s8LnngPtgR+vtFgRERGRnOiShxSdc0lmNhiYBQQCY51zG81sYOr80WZWBlgF3ASkmNkjQG2gBDDFzM6916fOuW98syoiIiIi2ZM353DhnJsBzLhg2uh0z/fjOdR4od+ByKspUERERCSn05XmRURERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHxMgUtERETExxS4RERERHwsj78LkBvThvijF02LCCnih0ouj7d1Z9TOWzl1O2S39/XX7+V6bJuc+u8nJ8gt29af65FbtuG1phEuERERER9T4BIRERHxMa8Cl5l1NLOtZrbDzIZkML+mmS01s0Qze/xy+oqIiIjkdpcMXGYWCIwEOgG1gd5mVvuCZr8CDwGvXEFfERERkVzNmxGuhsAO59wu59wZYALQPX0D51yCc24lcPZy+4qIiIjkdt4ErvLA7nSv41OneeNq+oqIiIjkCt4ELstgmvNy+V73NbMBZrbKzFYdPHjQy8WLiIiIZH/eBK54oEK61yHAXi+X73Vf59x7zrlo51x0yZIlvVy8iIiISPbnTeBaCVQzszAzywvcAUz1cvlX01dEREQkV7jkleadc0lmNhiYBQQCY51zG81sYOr80WZWBlgF3ASkmNkjQG3n3O8Z9fXVyoiIiIhkR17d2sc5NwOYccG00eme78dzuNCrviIiIiI3El1pXkRERMTHFLhEREREfEyBS0RERMTHFLhEREREfEyBS0RERMTHvPqWooj4nnOO348cYfOxvSQkJHDgwAESEhJISEjg6NGjHD9+PO1x7Ngxfj16nBSXQkpyMikpKaSkOJxLwSyAvPnyki9fMEF585I3bz5KFi1EwYIFKVasWNqjaNGiFCtWjBIlSlCuXDnKli1L/vz5/b0ZRERyJQUukesoJSWFvbt/YfvWTeyO28We3T+zZ/cvaT9Pnzp5UR8z46abbqJQoUIULlyYQoUKUahQIYoVL0FAYAABFkBgYCAWEEBAQADJycmcPXOGM2cSSTydyKkTJ/j98AGOHz/Ob7/9xtGjR3Eu47tzFS1alLJly1KuXDnKlStHaGgoeYuWIaRSGCEVQylZugwBARoYFxG5XApcIj5y8uQJNm9Yx49r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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# sampling\n",
"target_dist = dist.Gamma(true_m, true_b)\n",
"data = torch.tensor([target_dist() for i in range(100)])\n",
"true_y = [target_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(x_range, true_y, c='k', label=r'Gamma(m,b)')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, density=True, alpha=0.2, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"plt.title(r'm={0:.3f} b={1:.3f}'.format(true_m, true_b))\n",
"\n",
"plt.ylim(0,)\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"plt.savefig('obs-data')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"モデル`model`\n",
"- $p_\\theta(X)$\n",
"- $X = \\{x_1, \\ldots, x_N \\}$は観測されたデータ\n",
"- パラメータは$\\theta = \\{ m, b \\}$\n",
" - $x_i \\sim \\mathrm{Gamma}(m, b)$\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 124.724x110.079 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pgm = daft.PGM()\n",
"\n",
"pgm.add_node(\"xn\", r\"$x_n$\", 2, 1, observed=True)\n",
"pgm.add_node(\"m\", \"m\", 1.5, 2, fixed=True)\n",
"pgm.add_node(\"b\", r\"b\", 2.5, 2, fixed=True)\n",
"pgm.add_edge(\"m\", \"xn\")\n",
"pgm.add_edge(\"b\", \"xn\")\n",
"pgm.add_plate([1, 0.5, 2, 1], label=r\"$n = 1, \\ldots, N$\", shift=-0.2)\n",
"\n",
"pgm.show() # render and show"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [],
"source": [
"def model(data=None):\n",
" \n",
" m = pyro.param(\"m\", torch.tensor(1.0), constraint=constraints.positive)\n",
"\n",
" b = pyro.param(\"b\", torch.tensor(1.0), constraint=constraints.positive)\n",
"\n",
" with pyro.plate('observe_data'):\n",
" pyro.sample('obs', dist.Gamma(m, b), obs=data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"guideは点推定のAutoDeltaを使用"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [],
"source": [
"guide = AutoDelta(\n",
" poutine.block(model, hide=['obs']),\n",
" init_loc_fn=init_to_feasible\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"準備"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [],
"source": [
"adam_params = {\"lr\": 0.005, \"betas\": (0.95, 0.999)}\n",
"optimizer = Adam(adam_params)\n",
"\n",
"\n",
"svi = SVI(model=model,\n",
" guide=guide,\n",
" optim=optimizer,\n",
" loss=Trace_ELBO()\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"パラメータの初期化とhookの設定.こうするとすべてのパラメータの途中の値を保存できる."
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tracing m <class 'torch.Tensor'> tensor(0., requires_grad=True)\n",
"tracing b <class 'torch.Tensor'> tensor(0., requires_grad=True)\n"
]
}
],
"source": [
"pyro.clear_param_store()\n",
"\n",
"svi.loss(model, guide, data)\n",
"\n",
"trace_dic = defaultdict(list)\n",
"for name, value in pyro.get_param_store().named_parameters():\n",
" print('tracing', name, type(value), value)\n",
" value.register_hook(lambda grad, name=name: trace_dic[name].append(pyro.param(name).item()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"収束するまで学習"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {
"scrolled": true,
"tags": []
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "0dbed1715e384b9c8ed5b71c6256ca7b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=5000.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"num_steps = 5000\n",
"\n",
"with tqdm(range(num_steps)) as pbar:\n",
" for i,p in enumerate(pbar):\n",
"\n",
" loss = svi.step(data)\n",
"\n",
" trace_dic['loss'].append(loss)\n",
"\n",
" if i > 100 and np.isclose(trace_dic['loss'][-100], loss):\n",
" break\n",
" \n",
" if i % 10 == 0:\n",
" pbar.set_postfix(loss=loss)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"lossとパラメータの推移をプロット"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(trace_dic['loss'])\n",
"plt.title(\"ELBO\")\n",
"plt.xlabel(\"step\")\n",
"plt.ylabel(\"loss\");\n",
"savefig(\"loss\")\n",
"plt.show()\n",
"\n",
"\n",
"fig = plt.figure(figsize=(15,5))\n",
"\n",
"for i,param in enumerate(['m', 'b']):\n",
" plt.subplot(1,2,i+1)\n",
" plt.plot(trace_dic[param])\n",
" plt.ylabel(param)\n",
"\n",
"plt.tight_layout()\n",
"savefig(\"params\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最尤推定結果と真値の比較"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"m 4.161917209625244 true m 3.5213195402661412\n",
"b 0.4409032166004181 true b 0.36378480532015733\n"
]
}
],
"source": [
"trace = poutine.trace(model).get_trace()\n",
"\n",
"print('m', trace.nodes['m']['value'].item(), 'true m', true_m)\n",
"print('b', trace.nodes['b']['value'].item(), 'true b', true_b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"推定したパラメータでサンプリング"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"\n",
"# traceでパラメータを取得\n",
"trace = poutine.trace(model).get_trace()\n",
"m = trace.nodes['m']['value'].item()\n",
"b = trace.nodes['b']['value'].item()\n",
"\n",
"# generate a pdf\n",
"estimated_dist = dist.Gamma(m, b)\n",
"y = [estimated_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"# plot\n",
"plt.plot(x_range, y, c='k', label='ML estimated pdf')\n",
"plt.plot(x_range, true_y, c='r', label=r'true pdf')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"savefig(\"sampled-pdf\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"観測データobsのサンプリング."
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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MLe0QEQMAn4O/HNK6cWS5T0jolfdc+BYYEVLNV6SpGp2//33s++++/LMM8+wYsUKjjvuOAAuvPBCFi1axIoVK9i8eTP33XdffZ1dd92Vxx57jGnTpnHyySdzww03sGLFCm6++WY2bCj0h6xcuZKpU6eybNkydt99d2bOnLnNft98802uvPJKHn74YZ566inGjRvHjBkz2LJlC1/60pe49957WbBgAa+//nrZdt9444306NGDZcuWccUVV7CkpGfwO9/5DosXL2bZsmX8+te/ZtmyZVx00UXsu+++zJ8/n/nz51csV/f+6vbbu3fvDnNVrNHAlVLaClwIPAA8D9yZUno2IqZFxLRisW8AewAzGwz/sBfweEQ8A/wO+GVK6f4WfxeSJFWhUaNG8fDDD3PZZZexYMECevcuTHo+f/58Dj/8cEaNGsV///d/8+yzz9bXOemkk+rrjhgxgn322YcPfehD7L///vXzCg4cOJAJEyYAMGXKFB5//PFt9rtw4UKee+45JkyYQE1NDbfccguvvvoqL7zwAkOGDGHo0KFEBFOmTCnb7scee6x+3ejRoxk9enT9ujvvvJOxY8dyyCGH8Oyzz/Lcc8+V3UalcrNnz+aOO+7g+uuv58wzz2TNmjVNPaxtItNciimlecC8BstmlTw/F9hutseU0mpgTMPlkiSpcQceeCBLlixh3rx5fPWrX+XYY4/l3/7t37jgggtYvHgxAwcOZPr06WzZsqW+zoc+9CEAunTpUv+87vXWrVsBiNj29uyGr1NKHHPMMdx+++3bLF+6dOl2ZSspV+6VV17h2muvZdGiRfTp04ezzz57m7ZnKTd8+HDuvfderrjiCvr3788555zDI488kqlNbcmR5iVJaqfWrVtHjx49mDJlCpdccglPPfVUffDo27cv7777bpMnaQb4/e9/z5NPPgnA7bffzpFHHrnN+iOOOIInnniCVatWAbBp0yZefPFFDj74YF555RVefvnl+rrlTJw4kVtvvRWAFStW1F8OfPvtt+nZsye9e/fmjTfe4Fe/+vugBr169eKdd95ptNyKFYU7k7p168bYsWPr67R3mXq4JElS61u+fDmXXnopXbp0oVu3btx44418+MMf5ktf+hKjRo1i8ODBHHbYYU3e7rBhw7jllls477zzGDp0KOeff/426/v168fNN9/MmWeeyV//+lcA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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"\n",
"obs = []\n",
"for _ in range(5000):\n",
" trace = poutine.trace(model).get_trace()\n",
" obs.append(trace.nodes['obs']['value'].item())\n",
"\n",
"plt.xlabel('posterior samples')\n",
"\n",
"plt.hist(data, range=(x_min, x_max), bins=100, alpha=0.2, density=True, label=r'observed data $\\{x_i\\}$')\n",
"plt.hist(obs, range=(x_min, x_max), bins=100, alpha=0.2, density=True, color='r', label=r'sampled data$')\n",
"\n",
"plt.legend()\n",
"savefig(\"pdf-obs\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ガンベル分布の最尤推定"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"保存先設定"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [],
"source": [
"experiment_name = \"gumbel\"\n",
"\n",
"file_format = \"png\" # \"pdf\"\n",
"savedir = \"./20200627_pyro_5th_trial/\"\n",
"os.makedirs(savedir, exist_ok=True)\n",
"\n",
"def savefig(desc):\n",
" fig.savefig(os.path.join(savedir, '{0}_{1}.{2}'.format(\n",
" experiment_name, desc, file_format)), bbox_inches='tight')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真のmとbをランダムに作成"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"m = 7.856017618643588 b = 1.9309664448239385\n",
"x_range: from -4.411 to 20.119\n"
]
}
],
"source": [
"true_m = np.random.rand() * 10\n",
"true_b = np.abs(np.random.rand() * 2)\n",
"print('m =', true_m, 'b =', true_b)\n",
"\n",
"var = np.pi**2 * true_b**2 / 6 # 分散\n",
"x_range = np.arange(true_m - 2*var, true_m + 2*var, 0.01)\n",
"x_max = x_range.max()\n",
"x_min = x_range.min()\n",
"print('x_range: from {0:.3f} to {1:.3f}'.format(x_min, x_max))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"真の分布からデータをサンプリング.最尤推定の解析解を計算."
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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UaRIEWJiYnyex5cT36OB0slelwJ2prLyGsAooJ1zbv/Z6c65nYl/7gUmknD48TzOuY+cc3Wdc3WLFTvvUhMiIiKeUMGSs9L634IvJWsJUMHMyppZTuABYHKKlYYD3wOPOud+TzY9r5nlP/scaA2sTVNCERERkUzokiXLORcLdAemAxuAb5xz68zsSTN7MnHYq0ARYHiKSzVcDcwzs1VAFDDVOfe/dN8KERGRLGrPnj089NBDlCtXjuuvv55GjRoxceLEK17uZ599Rvfu3dM0T0REBPv2JVws4OTJk9xwww3ExcVd1vr79+/PO++8c970mJgY2rRpc1nLDDQ+XfHdOTcNmJZi2shkz7sAXVKZbwtQM+V0ERERuTTnHHfddRedOnXiyy+/BGDbtm1Mnjz5EnP63+jRo7n77rsJDg5O1+UWK1aMEiVKMH/+fJo0aZKuy85ouuK7iIhIgJo1axY5c+bkySefTJpWpkwZnn322fP2RN1+++3Mnj0bgHz58tGnTx+uv/56brrpJqKiomjRogXlypU7p6Bt376dNm3aUKlSJV577bWk6WPHjqV+/frUqlWLbt26pbq3aty4cbRr1w6A2bNnc8MNN3DfffdRsWJF+vbty7hx46hfvz7Vq1dn8+bNqW7fqlWruPHGG6lQoQIff/xx0vS77rqLcePGXd5fWgAJyHsXioh4aU304fOmVS9V0IMkEkief/55Vq5cma7LrFWrFkOGDLng++vWraNOnTppXu7x48dp0aIFAwcOpH379rz88svMmDGD9evX06lTJ+68804AoqKiWLt2LXny5KFevXq0bduWvHnz8vXXXzN//nxCQkJ4+umnGTduHB07dkxa/unTp9myZQsRERFJ01atWsWGDRu46qqrKFeuHF26dCEqKor333+fDz74INXtXL16NYsWLeL48ePUrl2btm3bUrJkSerWrcvLL7+c5u0ONCpZIiIimcQzzzzDvHnzyJkzJ88888wFx+XMmTPpvKbq1auTK1cuQkJCqF69Olu3bk0ad/PNN1OkSBEA7r77bubNm0eOHDlYtmwZ9erVAxLOvSpevPg5y9+3bx+FChU6Z1q9evUoUaIEAOXLl6d169ZJ6//1119TzdmuXTty585N7ty5admyJVFRUdx1110UL16cnTvPu5BBpqOSJSIi4oOL7XHyl6pVq/Ldd98lvR42bBj79u2jbt265MiRg/j4+KT3kl+VPiQkJOlyA0FBQeTKlSvpeWxsbNK4lJckMDOcc3Tq1Im33nrrgrly58593lXwz67jUutMub7UXp86dYrcuXNfcP2Zhc7JEhERCVA33ngjp06dYsSIEUnTTpw4ASR802/lypXEx8ezfft2oqKi0rz8GTNmcODAAU6ePMmkSZNo0qQJrVq1YsKECezduxeAAwcOsG3btnPmK1y4MHFxcWm+3dDEiRPp169f0usffviBU6dOsX//fmbPnp209+z333+nWrVqad6eQKM9WSIiIgHKzJg0aRIvvPACb7/9NsWKFSNv3rwMHDiQJk2aULZsWapXr061atUu69ytpk2b8uijj7Jp0yYeeugh6tatC8Drr79O69atiY+PJyQkhGHDhlGmTJlz5m3dujXz5s3jpptu8nl9mzdvpkCBAkmv69evT9u2bfnrr7945ZVXKFmyJAC//vorbdu2TfP2BBpzLtU75Hiqbt26bunSpZceKCLiBzrxXc7asGEDlStX9jpGQFqxYgWDBw/miy++8HmeRx55hPfee49L3dmlefPm/PDDDxQuXPhKY6a71P6bMLNlzrm6KcdqT5aIiIikWe3atWnZsiVxcXE+Xytr7NixlxwTExPDiy++GJAFK61UskREROSydO7cOd2XWaxYMe666650X64XdOK7iIiIiB+oZImIiIj4gUqWiIiIiB+oZImIiIj4gUqWiIiIiB+oZImIiGRCW7duDcirovfv35933nnnisccOnSI4cOHX1aG+Ph4br/9dqpXr8727dt9mufFF1+kcuXKF7zP4uXQJRxERER8lNqFaq9EIF3k1jmHc46goMDY/3K2ZD399NNpnnfNmjXs3buXNWvW+DzP4MGDqV+/PqNHj6Zly5ZpXmdqAuNvUkRERC5o8ODBVKtWjWrVqp1zo+rY2Fg6depEjRo16NChAydOnOD48eO0bduWmjVrUq1aNb7++msg4UKg9evXp1atWnTr1o24uDi2bt1K5cqVefrpp6lTpw6PP/74OXuP+vfvz7vvvnvB+c964403qFSpEjfddBMbN25MdRsuNOauu+7i+uuvp2rVqnz00UdJ0/v27cvmzZupVasWvXr1uuC41Bw6dIjixYufM61ly5bMmDEDgJdffpkePXqcN98111zDoUOHLrrstNCeLBERkQC2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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# sampling\n",
"target_dist = dist.Gumbel(true_m, true_b)\n",
"data = torch.tensor([target_dist() for i in range(100)])\n",
"true_y = [target_dist.log_prob(torch.tensor([x])).exp() for x in x_range]\n",
"\n",
"\n",
"fig = plt.figure(figsize=(10,5))\n",
"plt.plot(x_range, true_y, c='k', label=r'Gumbel(m,b)')\n",
"plt.hist(data, range=(x_min, x_max), bins=100, density=True, alpha=0.2, label=r'observed data $\\{x_i\\}$')\n",
"\n",
"plt.title(r'm={0:.3f} b={1:.3f}'.format(true_m, true_b))\n",
"\n",
"plt.ylim(0,)\n",
"plt.xlabel('x')\n",
"plt.legend()\n",
"plt.savefig('obs-data')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"モデル`model`\n",
"- $p_\\theta(X)$\n",
"- $X = \\{x_1, \\ldots, x_N \\}$は観測されたデータ\n",
"- パラメータは$\\theta = \\{ m, b \\}$\n",
" - $x_i \\sim \\mathrm{Gumbel}(m, b)$\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 124.724x110.079 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pgm = daft.PGM()\n",
"\n",
"pgm.add_node(\"xn\", r\"$x_n$\", 2, 1, observed=True)\n",
"pgm.add_node(\"m\", \"m\", 1.5, 2, fixed=True)\n",
"pgm.add_node(\"b\", r\"b\", 2.5, 2, fixed=True)\n",
"pgm.add_edge(\"m\", \"xn\")\n",
"pgm.add_edge(\"b\", \"xn\")\n",
"pgm.add_plate([1, 0.5, 2, 1], label=r\"$n = 1, \\ldots, N$\", shift=-0.2)\n",
"\n",
"pgm.show() # render and show"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [],
"source": [
"def model(data=None):\n",
" \n",
" m = pyro.param(\"m\", torch.tensor(1.0))\n",
"\n",
" b = pyro.param(\"b\", torch.tensor(1.0), constraint=constraints.positive)\n",
"\n",
" with pyro.plate('observe_data'):\n",
" pyro.sample('obs', dist.Gumbel(m, b), obs=data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"guideは点推定のAutoDeltaを使用"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [],
"source": [
"guide = AutoDelta(\n",
" poutine.block(model, hide=['obs']),\n",
" init_loc_fn=init_to_feasible\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"準備"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [],
"source": [
"adam_params = {\"lr\": 0.005, \"betas\": (0.95, 0.999)}\n",
"optimizer = Adam(adam_params)\n",
"\n",
"\n",
"svi = SVI(model=model,\n",
" guide=guide,\n",
" optim=optimizer,\n",
" loss=Trace_ELBO()\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"パラメータの初期化とhookの設定.こうするとすべてのパラメータの途中の値を保存できる."
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {
"scrolled": false,
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tracing m <class 'torch.Tensor'> tensor(1., requires_grad=True)\n",
"tracing b <class 'torch.Tensor'> tensor(0., requires_grad=True)\n"
]
}
],
"source": [
"pyro.clear_param_store()\n",
"\n",
"svi.loss(model, guide, data)\n",
"\n",
"trace_dic = defaultdict(list)\n",
"for name, value in pyro.get_param_store().named_parameters():\n",
" print('tracing', name, type(value), value)\n",
" value.register_hook(lambda grad, name=name: trace_dic[name].append(pyro.param(name).item()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"収束するまで学習"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"scrolled": true,
"tags": []
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "f10818dd71fa442bb1ebedd20236d7c4",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"HBox(children=(FloatProgress(value=0.0, max=5000.0), HTML(value='')))"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"num_steps = 5000\n",
"\n",
"with tqdm(range(num_steps)) as pbar:\n",
" for i,p in enumerate(pbar):\n",
"\n",
" loss = svi.step(data)\n",
"\n",
" trace_dic['loss'].append(loss)\n",
"\n",
" if i > 100 and np.isclose(trace_dic['loss'][-100], loss):\n",
" break\n",
" \n",
" if i % 10 == 0:\n",
" pbar.set_postfix(loss=loss)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"lossとパラメータの推移をプロット"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment