Skip to content

Instantly share code, notes, and snippets.

@yonesuke
Created February 2, 2022 13:17
Show Gist options
  • Save yonesuke/92c88214e0bb12646b608bad8f980df9 to your computer and use it in GitHub Desktop.
Save yonesuke/92c88214e0bb12646b608bad8f980df9 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 640,
"metadata": {},
"outputs": [],
"source": [
"import scipy\n",
"import jax.numpy as jnp\n",
"from jax import grad, jit, jacfwd, random\n",
"from jax.lax import fori_loop\n",
"from jax.config import config; config.update(\"jax_enable_x64\", True)\n",
"import optax\n",
"\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 641,
"metadata": {},
"outputs": [],
"source": [
"def connectivity(mat):\n",
" n_oscillator = mat.shape[0]\n",
" minimum_deg = jnp.min(mat.sum(axis=-1))\n",
" return minimum_deg / (n_oscillator-1)\n",
"def orderparam(thetas, k):\n",
" rx, ry = jnp.cos(k*thetas).mean(), jnp.sin(k*thetas).mean()\n",
" return jnp.sqrt(rx*rx+ry*ry)\n",
"fn = lambda l: jnp.cos(0.5*jnp.pi*l)*(-1+jnp.cos(0.5*jnp.pi*l))"
]
},
{
"cell_type": "code",
"execution_count": 643,
"metadata": {},
"outputs": [],
"source": [
"N = 2**8\n",
"x = jnp.ones(N)\n",
"x = x.at[0].set(0)\n",
"for i in range(1, N):\n",
" if fn(i) > 1:\n",
" x = x.at[i].set(0)\n",
"# (N,p)=(2**8,2**6)のネットワーク\n",
"A = jnp.array(scipy.linalg.circulant(x))\n",
"# そのときの平衡点\n",
"initial_thetas = 0.5*jnp.pi*jnp.arange(N)"
]
},
{
"cell_type": "code",
"execution_count": 665,
"metadata": {},
"outputs": [],
"source": [
"# 微分方程式の右辺\n",
"def vec(A, thetas):\n",
" coss, sins = jnp.cos(thetas), jnp.sin(thetas)\n",
" vs = coss * (A @ sins) - sins * (A @ coss)\n",
" return vs\n",
"# ヤコビ行列\n",
"jac_fn = lambda mat, thetas: jacfwd(vec, argnums=1)(mat, thetas)"
]
},
{
"cell_type": "code",
"execution_count": 666,
"metadata": {},
"outputs": [],
"source": [
"# 平衡点を求めるための損失関数\n",
"loss_fn = lambda mat, thetas: jnp.mean(vec(mat, thetas)**2) / N\n",
"# thetaに関する最適化を行うのでtheta方向の微分\n",
"# 入力は (mat, thetas)\n",
"grad_fn = grad(loss_fn, argnums=1)"
]
},
{
"cell_type": "code",
"execution_count": 667,
"metadata": {},
"outputs": [],
"source": [
"# Aに摂動を与える\n",
"# (0, 1), (1, 0)成分を抜く\n",
"B = A\n",
"for ij in [(0,1)]:\n",
" cut_i, cut_j = ij\n",
" B = B.at[[cut_i, cut_j], [cut_j, cut_i]].set(0)"
]
},
{
"cell_type": "code",
"execution_count": 674,
"metadata": {},
"outputs": [],
"source": [
"# 平衡点を探索する関数\n",
"def fit(mat, initial_thetas, optimizer, n_iter=1000):\n",
" opt_state = optimizer.init(initial_thetas)\n",
" @jit\n",
" def step(thetas, opt_state):\n",
" loss_val = loss_fn(mat, thetas)\n",
" grads = grad_fn(mat, thetas)\n",
" updates, opt_state = optimizer.update(grads, opt_state, thetas)\n",
" thetas = optax.apply_updates(thetas, updates)\n",
" return thetas, opt_state, loss_val\n",
" def body_fn(i, val):\n",
" thetas, opt_state, losses = val\n",
" thetas, opt_state, loss_val = step(thetas, opt_state)\n",
" losses = losses.at[i].set(loss_val)\n",
" return [thetas, opt_state, losses]\n",
" losses = jnp.zeros(n_iter)\n",
" thetas, _, losses = fori_loop(0, n_iter, body_fn, init_val=[initial_thetas, opt_state, losses])\n",
" return thetas, losses"
]
},
{
"cell_type": "code",
"execution_count": 675,
"metadata": {},
"outputs": [],
"source": [
"# 平衡点を探す!!\n",
"thetas, losses = fit(B, initial_thetas, optax.adam(learning_rate=0.001), n_iter=10**5)"
]
},
{
"cell_type": "code",
"execution_count": 676,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfoAAAFpCAYAAAB05+qkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAzR0lEQVR4nO3dd3hc1b3u8e8alVEfdcm2LBe5YVywLWyw6RC6QxJOCAYOIQUSAukhl/Tk5BJIcnLOCSG5gXAIpAAhhGZ6QmIMwRT3ggu2XCTLki3J6l2z7h8qsY1kjayZ2TN73s/z+AHtaT+vR9artfYqxlqLiIiIuJPH6QJEREQkdBT0IiIiLqagFxERcTEFvYiIiIsp6EVERFxMQS8iIuJi8U4XEEzGmKXA0vT09BunTZvmdDkiIiJhsWbNmhprbd5gjxk3rqMvLS21q1evdroMERGRsDDGrLHWlg72mIbuRUREXExBLyIi4mIKehERERdT0IuIiLiYgl5ERMTFFPQiIiIupqAXERFxMQW9iIiIiynoRUREXExBLyIi4mIKehERERdT0IuIiLiYgl5ERMTFFPQiIiIu5qqgN8YsNcbc19DQ4HQpIiIiEcFVQW+tXW6tvcnn8zldioiISERwVdCLiIjI0RT0IiIiLqagFxERcTEFvYiIiIsp6EVERFxMQS8iIuJiCnoREREXU9CLiIi4mIJeRETExRT0IiIiLhbvdAGhUNPcwW9WlgXt/cZnp3DRyQUYY4L2niIiIuHgyqA/0NDOHc9vDep7njcjn7s+Mpv8jKSgvq+IiEgoGWut0zUE3fwFC+zKN94KyntZa3l8TQV3vbCN5MQ47vjQbC6bMyYo7y0iIhIMxpg11trSwR5zZY/eYwxp3uD91T6xZBJnTs3jq4+t55aH1/Lyu2P5jw/OwpeSELTPEBERCQVNxgvQlPw0/nLzYr7ygWk8t/EAF/7Pq7y645DTZYmIiByXgn4E4uM8fOH8qTx1yxIykhL4+ANv860nN9HS0e10aSIiIoNS0J+AWeN8LP/8Gdx45iQefnsfl979Gqv31DldloiIyPso6E9QUkIc37psJo/eeBo9fstV967irhe20dHd43RpIiIiAxT0o7Rocg4vfuksPnbqeH796i6uuOefbKlscLosERERQEEfFGneeO78yBweuKGU2pZOPvTLf/LLf+yku8fvdGkiIhLjXBX0xpilxpj7Ghqc6VGfN6OAl790FhfOLOSnL23no/euYndNiyO1iIiIgMuC3lq73Fp7k8/nc6yGrNRE7rlmHj+/+hTKDrVwyc9X8rtVe/D73bcxkYiIRD5XBX2kMMZwxSnjeOlLZ7FwUg7ffXoLH//t2xxoaHO6NBERiTEK+hAq9CXx0CdO5Y4Pz2L1nsNc+N8reWJtBW7cdlhERCKTgj7EjDFcu2gCL3zxTKYVpPOVxzZw8x/WUtvc4XRpIiISAxT0YTIxN5XHPnM6t18yg79vO8hF/7OSv75b7XRZIiLicgr6MIrzGD57dgnPfH4JeelJ3Pi71dz25w00tXc5XZqIiLiUgt4BMwozePqWJdxybgl/WVvBxf/zGjuqm5wuS0REXEhB75DEeA+3XTSDP392MR3dfm7+wxpaO3U4joiIBJeC3mELJmT1rrmvaeF7T29xuhwREXEZBX0EWDIll1vPncKf11Tw5LoKp8sREREXUdBHiC+eP5WFE7P51pObKTvU7HQ5IiLiEgr6CBEf5+Hny07BG+/hlofX0d6l425FRGT0FPQRZIwvmf/86Fy2Hmjkjue2Ol2OiIi4gII+wpx/UgGfPmMSv39zLy9sOuB0OSIiEuUU9BHo6xfPYG6Rj6//ZSPlda1OlyMiIlFMQR+BEuM9/GLZfLBw6yPr6Oz2O12SiIhEKQV9hCrOSeGuK+ewobye/3x5u9PliIhIlFLQR7DL5ozh2kXF3LeyjH9sO+h0OSIiEoUU9BHuO5fPZEZhOl95bD1VDe1OlyMiIlFGQR/hkhLiuOea+XR0+/nCo+vo7tH9ehERCZyCPgpMyU/jh1fM4u3dddz9951OlyMiIlFEQR8lrlxQxJXzi/jF39/jjZ01TpcjIiJRQkEfRf7jipOZlJvKF/+0nprmDqfLERGRKKCgjyKp3nh+ec18Gtq6+PKf1uP3W6dLEhGRCKegjzInjcngu5fP5LX3arh3ZZnT5YiISIRT0EehaxcVc9nsMfzny9tZs7fO6XJERCSCKeijkDGGO6+czbjMZD7z+7XaD19ERIakoI9SGUkJPHBDKZ3dPXz8t29T39rpdEkiIhKBFPRRbEp+Or+5vpSKujZu/N1q2rt6nC5JREQijII+yi2anMPPrprLO3sO89U/b9BMfBEROUq80wXI6C2dO5YDDW386PltjPUl8a3LZjpdkoiIRAgFvUvceOZk9h9u4zev7WZcZjI3LJnkdEkiIhIBFPQuYYzhu0tP5kBDOz949l0KfclcPKvQ6bJERMRhEX+P3hhzjjHmNWPMr40x5zhdTySL8xh+fvU8ThmfyRcfXceavYedLklERBwW0qA3xjxgjDlojNl8zPWLjTHbjTE7jTG3D/M2FmgGkoCKUNXqFsmJcdx/fSljfEl8+qF32F3T4nRJIiLioFD36B8ELj7ygjEmDvglcAkwE1hmjJlpjJltjHn2mD/5wGvW2kuA/wP8IMT1ukJOmpcHP7EQYww3/PZtHYAjIhLDQhr01tqVwLF7tC4Edlpry6y1ncCjwBXW2k3W2suP+XPQWuvve91hwDvUZxljbjLGrDbGrD506FBI/j7RZGJuKvd/vJTqxnY+9dBq2jq1xl5EJBY5cY9+HFB+xNcVfdcGZYz5iDHmXuD3wD1DPc9ae5+1ttRaW5qXlxe0YqPZ/OIsfn71PDZW1PPtpzYP/wIREXEdJ2bdm0GuDbnLi7X2CeCJ0JXjbhedXMhHFxTxwuYq/P45eDyDNb+IiLiVEz36CmD8EV8XAZUO1BEz5hdn0dTezV4dfiMiEnOcCPp3gKnGmEnGmETgauAZB+qIGXOKMgHYWFHvaB0iIhJ+oV5e9wiwCphujKkwxnzKWtsN3Aq8BGwFHrPWbgllHbFuWkEa3ngPG8obnC5FRETCLKT36K21y4a4/jzwfLA/zxizFFg6ZcqUYL91VIuP83Dy2Aw27a93uhQREQmziN8ZbySstcuttTf5fD6nS4k4c4oy2by/ke4e//BPFhER13BV0MvQ5o730dbVw85DzU6XIiIiYaSgjxH/mpCn+/QiIrFEQR8jJuWkku6N18x7EZEYo6CPER6PYdY4n3r0IiIxRkEfQ+aM97H1QCMd3dr3XkQkVrgq6I0xS40x9zU0qNc6mDnjMunqsWyvanK6FBERCRNXBb2W1x3fnKLedtmg4XsRkZjhqqCX4yvKSiY7NZFNmpAnIhIzFPQxxBjDbE3IExGJKQr6GDO3yMeO6iZaO7udLkVERMJAQR9j5hRl4rfwbmWj06WIiEgYKOhjjCbkiYjEFlcFvZbXDS8/I4nCjCTtkCciEiNcFfRaXheYOUU+NqlHLyISE1wV9BKYOUU+ympaaGjrcroUEREJMQV9DOo/yW7zfvXqRUTcTkEfg/on5Gk9vYiI+ynoY1BmSiLF2SmakCciEgMU9DFqTpF2yBMRiQUK+hg1tyiT/fVt1DR3OF2KiIiEkKuCXuvoAze77z69ltmJiLibq4Je6+gDN2ucD2Ngg+7Ti4i4mquCXgKX5o1nSl6aevQiIi6noI9hc4oy2VDRgLXW6VJERCREFPQxbE6Rj5rmDg40tDtdioiIhIiCPoZp4xwREfdT0Mewk8ZkEO8x2jhHRMTFFPQxLCkhjumF6erRi4i4mII+xs0pymRjRb0m5ImIuJSCPsbNLfLR2N7N3tpWp0sREZEQcFXQa2e8kevfIU8b54iIuJOrgl47443ctIJ0vPEeNpTrlyMRETdyVdDLyCXEeTi9JIen1++nuaPb6XJERCTIFPTCly6YRm1LJ/e/VuZ0KSIiEmQKeuGU8ZlcMquQ36wsozaCjq3deqCR83+2gr9vq3a6FBGRqKWgFwC+euF02rp6uOcfO50uBYDyulauf+Btdh1q4YfPbqW7x+90SSIiUUlBLwBMyU/jqtLx/PHNfZTXObvUrq6lk48/8DYdXT18/eLp7K5p4fE1FY7WJCISrRT0MuCLF0zFGPjvv+1wtI67X3mPisNtPHDDqdx8dgnzijP5+Svv0d7V42hdIiLRSEEvA8b4krlh8USeXLef7VVNjtWxYvtBzpiaS+nEbIwx3HbRdA40tPPHt/Y5VpOISLRS0MtRbj6nhDRvPD99aZsjn7+vtpU9ta2cNTV34NriklxOnZjFw2/t1Va9IiIjpKCXo2SmJPLZs0v429aDrN5TF/bPf/W9QwCcNS3vqOtXnDKOXYda2F7t3EiDiEg0UtDL+3xyySTy0738+MVtYe9Br9xxiKKsZCblph51/eJZhXgMPLvhQFjrERGJdq4Keu11HxzJiXF84fypvLPnMP/YfjBsn9vZ7eeNnTWcNS0PY8xRj+WmeVlcksuzGys1fC8iMgKuCnrtdR88Hzt1PBNzUvjJi9vx+8MTrGv3Haals4ezpuYN+vhlc8awp7aVLZWNYalHRMQNXBX0EjwJcR4+d+4UtlU1hS1YV+44RJzHsHhKzqCPX3xyIXEew7MbNXwvIhIoBb0M6Zy+CXFv7KoJy+etfO8Q84szyUhKGPTxrNREzpiSyzPr99MTplEGEZFop6CXIeVnJDE1P403dtWG/LMONXWweX/jkMP2/ZYtHE9lQzt/3xa+uQMiItFMQS/Htbgkh3f21NHZHdq95l/cUgXABTMLjvu8C04qoCDDy+/f3BvSekRE3EJBL8d1ekkurZ09bKioD+nnPLuhkin5acwoTD/u8+LjPCxbWMzKHYfYW9sS0ppERNxAQS/HddrkbIyBN3aGbvi+qqGdt/fUsXTO2PctqxvMsoXFxHmMtsQVEQmAgl6OKzMlkZPHZoR0Qt5zmw5gLVw+d0xAzy/ISOKCk/J5ct1+rakXERmGgl6Gtbgkl3X76mnrDM3pccs3VHLy2AxK8tICfs0HZhZyqKlDa+pFRIahoJdhnV6SQ2ePnzV7Dwf9vcvrWllfXs/SuWNH9Lqz+5b+rQjjzn0iItFIQS/DOnViNvEeE5Lh+/7Nby6bHdiwfb+8dC9zinxaZiciMgwFvQwrzRvP3PGZQV9P7/dbnl6/n/nFmYzPThnx68+Zns+68nrqWjqDWpeIiJso6CUgS0py2FhRT2N7V9De839f3822qiaWLSw+odefNyMfa+G1vqNtRUTk/RT0EpDTS3LxW3i7LDhn1K/bd5gfv7iNS2YV8m8Lik7oPeaM85GTmsiK7Qp6EZGhKOglIPOKM/HGe4IyfN/Q1sXnH1lHoS+Ju66cE9Da+cF4PIZTxmey9YBm3ouIDMVVQa/z6EMnKSGO0olZQZmQ940nNlLV0M4vls3Dlzz4ATaBmpibyp7alrAdpSsiEm1cFfQ6jz60Fpfksq2qidrmjhN+j321rTy/qYpbzp3CvOKsUdc0MTeV9i4/1U3to34vERE3clXQS2idXtJ7Tvybo7hPv6qsd0Tg8jkjW043lEk5qQDsrtG+9yIig1HQS8DmjPOR5o0f1fD9m2V15KYlMiU/8F3wjmdibu+yvD01rUF5PxERt1HQS8Di4zwsnJR9whPyrLWs2lXLosk5JzwB71hjfckkxnvYo5PsREQGpaCXEVlcksPumhYq69tG/No9ta1UNbZz+uScoNXj8RgmZKdo6F5EZAgKehmRxSW5AKw6gV79m2W9r+m/1x8sE3NT2aOgFxEZlIJeRmRGYTopiXFsrhz5EsZVu2rJS/cyOTc1qDVNzk1lb12rltiJiAxCQS8j4vEYCjOSONg4siV21lpWldVyehDvz/ebmJtKZ7efyoaR304QEXE7Bb2MWEFGElWNI1u3vutQC4eaOoI+bA8wsW+JnWbei4i8n4JeRqzQl0RVw8iCvv/+/GlBnIjXb1Ju/1r65qC/t4hItFPQy4jlZ3g52NQ+onviq8pqKcxIYmLOyI+jHU5BhhdvvId9derRi4gcS0EvI1aYkURXj+Vwa2DnwFtreausltNLgn9/HsAYQ6EvieoRzhsQEYkFCnoZscKMJICA79PvPNhMTXMnp03ODllNJzJvQEQkFijoZcQKfL1BXx1gsK7ZexiARZOCf39+oKaMJA4q6EVE3iegoDfGfNEYk2F6/a8xZq0x5sJQFyeRqaC/R98Q2FB5ZX0bHgNFWcmhqyndS1VjO9ZqLb2IyJEC7dF/0lrbCFwI5AGfAO4KWVUS0fLTvRgTeI++qrGdvHQv8XGhG0Aq9CXR3uWnsb07ZJ8hIhKNAv3J2z+D6lLgt9baDUdckxiTEOchJ9U7gqDvGLivHyr5fe+v4XsRkaMFGvRrjDEv0xv0Lxlj0gF/6MqSSFfo8wY8+a26oX1guD9k9YxwgqCISKyID/B5nwJOAcqsta3GmGx6h+8lRhWkJ1EZ4KY5BxraWBTCGffQu5Ye0BI7EZFjBNqjPx3Ybq2tN8ZcB3wbGPmpJuIaBb6kgIbu2zp7aGzvDnmPvv/9A72dICISKwIN+v8HtBpj5gJfB/YCvwtZVRLxCjOSqGvppKO757jP6x9KD/U9+qSEOHzJCQp6EZFjBBr03bZ33dIVwM+ttT8H0kNX1okxxiw1xtzX0KDBhlArHJj8dvyh8v498Qt9oQ166B2+V9CLiBwt0KBvMsZ8A/h34DljTByQELqyToy1drm19iafz+d0Ka6XP3BP/PjB2v94qIfu+z9D9+hFRI4WaNB/DOigdz19FTAO+GnIqpKI199DH26W+8DQfVh69IHNGxARiSUBBX1fuP8R8BljLgfarbW6Rx/DBpazDTPzvqqhnXRvPGneQBd4nLiCDC8HmzpGdKqeiIjbBboF7lXA28BHgauAt4wx/xbKwiSy+ZIT8MZ7Ahq6LwhDbx56f/no8VtqWwI7VU9EJBYE2s36FnCqtfYggDEmD/gb8HioCpPIFujRsAca2kM+475f/hFL7PLSvWH5TBGRSBfoPXpPf8j3qR3Ba8WlCtKHPxq2ujH0u+L1G9M3clBZ3xaWzxMRiQaB9uhfNMa8BDzS9/XHgOdDU5JEiwJfEhsr6od8vMdvOdjUQaEvPL3roqwUAPYr6EVEBgQU9Nba24wxVwJL6D3M5j5r7ZMhrUwiXmGGl5cbeo+GNeb9ZxzVNnfQ47dhG7rPSkkgOSGOisMKehGRfgFPhbbW/gX4SwhrkShTkJFER7efxrZufCnv31ahKoxr6KF33kBRVjL7FfQiIgOOG/TGmCZgsLVKBrDW2oyQVCVRoeCIE+MGDfow7orXb1xWMhX1rWH7PBGRSHfcoLfWRtw2txI5jtw0Z3rh+79VqsO0z/2RirKSWV9eH7bPExGJdJo5LyescJgT46oa24n3GHLSwrfUbVxmCvWtXTR3dIftM0VEIpmCXk7YwH73Q+yOV9XQQX66lzjP+yfqhUpRVjKA7tOLiPRR0MsJ88bHkZWSMORa+qrGtrDtitdvXH/Q6z69iAigoJdROt5BMlVh3BWvX3+PXkvsRER6KehlVI63DW51Y0fYltb1y031khjvGXHQv7Sligv+61XK6zQSICLuoqCXUSnMGHwb3OaObpo7usO6tA7A4zEUZY5sLX1bZw/ff2YLOw8289XHNuj0OxFxFQW9jEp+RhI1zR109fiPuj6whj7MPXroW0t/OPCe+UOr9nCgoZ2rSot4e08da/YdDmF1IiLhpaCXUSnMSMJaONR09PB9dZh3xTtScXYKu2taAuqZ+/2WP7y5l9MmZ3P7JScBsGavgl5E3ENBL6PSf2DNsRPynNgVr9+cIh+N7d3srm0Z9rmv76yh4nAb1yyaQHZqIpNzUxX0IuIqCnoZlYIhNs2pcmBXvH7zirMAWL+v/rjPs9Zy78pdZKcmctHJBQDMn5DF2r2HsVb36UXEHRT0MioD+90fs2lOdWM7vuQEkhPjwl5TSV4aad541pUfv2f+6Dvl/HNnLV++YCre+N46F0zIoralk721mn0vIu6goJdRyU5JJCHOUHXMErsDDqyh7xfnMcwd7zvunvddPX5++tJ2TpuczbWLJgxcXzChdzRAw/ci4hYKehkVj8eQn57Ewcb39+jDvSvekU4Zn8nWA020dfYM+vjr79VQ19LJp8+YjOeILXqn5KWRnhSvmfci4hoKehm1Qt/719L37ooXvsNsjjVvfBY9fsvmyoZBH396/X58yQmcNS3vqOsej2Fece99ehERN1DQy6gVZHiPCvruHj81zR2ODd0DnFKcCQw+Ia+9q4eX363m0tljSIx//z+BBcVZbK9uorG9K8RVioiEnoJeRq0gI4mDfffoWzq6+b/PbcVvYXx2imM15aZ5GetLGrRH/151M62dPZw1NXfQ1y6YkIW1sG6YWfsiItEg3ukCJPoVZiTR3NHNsxsrufP5bVQ2tPHx0yfwwVPGOlrXzLE+Nu9/f9CX1TQDMDkvbdDXnVKcicf0Tsg7+5ihfRGRaKOgl1Hr3xTn1ofXMTU/jcc/u3hg9rqTZo3L4JVt1bR0dJPq/de3+u6aFoyBCTmDjzikeeOZUZjBmr114SpVRCRkNHQvozanKJPCjCS+dMFUnv3CGRER8gCzxvqwFrZVNR51vexQC+Myk0lKGHqNf+nELNbtq6f7mD38RUSijYJeRm1SbipvfvN8vnTBtIGNZyLByeMyANi8/+ig313TwqTc1OO+dsGELFo7e9hW1RSy+kREwkFBL65VmJFETmriUffprbXsrmlh8jBBP7coE4B3KxuP+zwRkUinoBfXMsZw8jgfm48I60NNHTR3dA85Ea9fcXYKyQlxbK1S0ItIdIv4oDfGeIwxdxhjfmGM+bjT9Uh0mTkmg/eqm+jqu9deVtN7ot1wQ/cej2F6YTrbDmjoXkSiW0iD3hjzgDHmoDFm8zHXLzbGbDfG7DTG3D7M21wBjAO6gIpQ1SruNCU/jW6/ZV9d7yE1uwMMeoCTxqSztapRJ9mJSFQLdY/+QeDiIy8YY+KAXwKXADOBZcaYmcaY2caYZ4/5kw9MB1ZZa78C3BziesVlSvJ6A33Xwd6182WHmkmM9zAuM3nY184ozKC+tYvqYw7sERGJJiFdR2+tXWmMmXjM5YXATmttGYAx5lHgCmvtncDlx76HMaYC6Oz7cvATSkSGUJLfey9+16HenvzumhYm5aQedZDNUKYXpgOwo7ppYK8AEZFo48Q9+nFA+RFfV/RdG8oTwEXGmF8AK4d6kjHmJmPMamPM6kOHDgWnUol6GUkJ5Kd72XWor0cfwNK6fpP7RgPK+l4rIhKNnNgZb7Cu1JA3Qa21rcCnhntTa+19wH0ApaWluqkqA0ry0th1qJmuHj/7alu5+OTCgF6Xl+YlzRs/cF9fRCQaOdGjrwDGH/F1EVDpQB0SI0ryU9l1sJnyula6/TbgHr0xhsl5qQMz9UVEopETQf8OMNUYM8kYkwhcDTzjQB0SI0ry0mhs72b1nt4z5vuH5AMxOTeVskMKehGJXqFeXvcIsAqYboypMMZ8ylrbDdwKvARsBR6z1m4JZR0S20r6Nsd5+d1qACbnHn+znCNNzktjf30b7V2aByoi0SnUs+6XDXH9eeD5YH+eMWYpsHTKlCnBfmuJYjMK04nzGP6+rZrMlASyUhMDfm3/Lwk7DzYza5wvVCWKiIRMxO+MNxLW2uXW2pt8Pv1Aln/Jz0ji19ctIDvVyynjM0f02pljew/GGWzP+9rmDp5at58N5fVBqFJEJDR0Hr3EhA/MLOCsabmMdJO7CdkppHnj2VzZwFVHzCEtr2vlqntXcaChHYDvL53JDUsmBbNkEZGgcFWPXuR4vPFxxz2DfjAej2HmmAy2HNOj/++/7qChrYuHPrmQ82bk86MXtlHVF/oiIpFEQS8yjJPHZfBuZSM9/t7hgAMNbTyzoZKrTy3m7Gl5fPfymXR2+/nLWh3FICKRR0EvMoxFk3Jo6+phxfaDADy+uoJuv+WGxRMBmJibyqJJ2fxlTYUOwBGRiKOgFxnG+SflU5Dh5YF/7qaju4fH1pRz+uQcinNSBp7zwVPGUlbTwrYqHWsrIpHFVUFvjFlqjLmvoaHB6VLERRLiPHz6jMn8c2ctpT/8G+V1bdx09uSjnnPRyYV4DDy38YBDVYqIDM5VQa/ldRIqnz5zErddNJ28DC+fOWsy507PP+rx3DQvp03O4flNBzR8LyIRRcvrRAJgjOGWc6dwy7lDb8Z06ewxfPupzWze38jsIv2yKSKRwVU9ehEnLZ0zlpTEOH77xm6nSxERGaCgFwkSX0oCV5WOZ/mGSqobtaZeRCKDgl4kiD65ZBI9fsuv/rGTju4e/vZuNT9YvoV7/v4ebZ06GEdEwk/36EWCqDgnhetOm8BDq/byyDvldHb7SYz30Nnt5+09h7n/+lIS4/X7tYiEj6uCXqfXSST45qUnkZQQR01TB0tPGcuSklyeWFvB7U9s4nvPbObOj8xxukQRiSHGjUuBSktL7erVq50uQ+QoP3lxG79asYsfXzmbj51a7HQ5IuIixpg11trSwR7TGKJImHz1wumcMSWX7zy9hfU62lZEwkRBLxImcR7D3cvmkZfm5WP3ruJbT27i0bf30dDW5XRpIuJiCnqRMMpOTeTJzy3m/JPyeXLdfm5/YhOn3/kKv351l3bUE5GQUNCLhFl+RhK/unYBW35wEc/cuoQlU3K564VtfOlP62nvcucSvD01LSz44V8pr2t1uhSRmKOgF3GIMYY5RZnc9+8LuO2i6Ty9vpKlv3idZzdW0uN3V+/+sdXl1LZ08tS6/U6XIhJzFPQiDuvfR/+BG0rxW8utD6/jvJ+t4On1+10znB/vMQC8vrPG4UpEYo+rgl7H1Eo0O29GAS9/+Wx+de180rzxfPHR9Vx17yo2uGCGfpyn90fNW7vrHK5EJPa4Kuh1TK1EuziP4dLZY3jm1jO48yOz2V3TwhW//CdfeGQde2tbnC7vhKUl9e7NtXTuWIcrEYk9rtoZT8Qt4jyGZQuLuXzOGO59tYz7Xy/juU0HuKq0iFvPm8q4zGSnSxyR1o5uAJITXNW3EIkK+lcnEsHSkxL42kXTWXnbuVy3qJjH11Rw7k9X8M0nN0XVDPaWvgN9ul02yVAkGijoRaJAfkYSP7hiFituO5ePlhbx+OoKzv3PFdz25w3sron8If3+ZYNPrNWse5FwU9CLRJFxmcnc8eHZvPr1c7jutAk8s6GS8362ght/t5q3ymojdpa+jugVcY7u0YtEoTG+ZL7/wZP53Lkl/GHVXn7/5l7++m41s8ZlcMPiSVw2ewzJiXFOlzmgra9Hn5fudbgSkdijHr1IFMtPT+IrF07njdvP50cfnk1bZw9f+/MGFt7xN7755CY2lNdHRC+/P+hrmjvUuxcJM/XoRVwgOTGOaxYVs2zheN7aXcdj75TzxNoKHn5rH1Py07h0ViEXzSpk5pgMjDFhr6//Hr21cLCpnQk5qWGvQSRWKehFXMQYw2mTczhtcg7fv+Jklm+oZPmGSu75x07u/vtOxmcnc/6MAk4vyWHBhCyyUxLxeEIf/Ef24g81dSjoRcLIVUFvjFkKLJ0yZYrTpYg4LiMpgWsXTeDaRROoae7gb+9W88LmKh59Zx8PvrEHgMKMJM6elseCCVnMn5DJxJxU4uOCf0evtbOHoqxkKg63cbCpI+jvLyJDc1XQW2uXA8tLS0tvdLoWkUiSm+bl6oXFXL2wmI7uHjaUN7Bm72HeLKvlxS1V/Gl1OQCJcR4m56UytSCd4uxkxmelUJydwvjsFMb4kqhp7iQ/3TviUYD27h4m56VRcbgtqtb/i7iBq4JeRIbnjY9j4aRsFk7K5uZzSvD7LWU1zawvb2BHdRM7qptYX36Y5zcdOOoUPY8Bv4Xs1ETmjc9kWmE6MwrTmV6YTkleGgnHGQlo7+whP91LbpqXnQebw/HXFJE+CnqRGOfxGKbkpzMlP/2o6909fg40tFNe10r54VbK69p6Z8139bDtQBOv7jg0sNNdUoKHuUWZlE7MonRCNqdOyibN+68fL+3dfpIT4pian8bOQwp6kXBS0IvIoOLjPIzvG7YfTGe3n7KaZrZXNfXdCqjj16+W0ePfRWKch9NKclg6ZwwfnjeOts4ekhI8TMlP46l1vcfvOjH7XyQWKehF5IQkxnuYUZjBjMIMrjhlHACtnd2s21fPiu0HeWlLNbc9vpH/+dt7tHX1kJwQx/jsFJo6utlb28rEXM28FwkHbZgjIkGTkhjPkim5fOuymaz42jn8v2vn443v/TFTkp/G3KJMAN4sq3WwSpHYoh69iISEx2O4ZPYYzjspny2Vjcwbnznw2O1PbOLqhcXOFScSQ9SjF5GQ8sbHMb84C2PMUffl99VqmZ1IOCjoRSSsVnztHAB+8tI2ZwsRiREKehEJq4m5qXzunBKe3XiA5RsqnS5HxPUU9CISdl+6YBqlE7L42p83sLGi3ulyRFxNQS8iYZcY7+Hef19AZkoCX3x0PY3tXU6XJOJargp6Y8xSY8x9DQ0NTpciIsPISfPyi2XzKa9r5cuPrsd/xHa7IhI8rgp6a+1ya+1NPp/P6VJEJAALJ2Xznctn8sq2g3z76c109fidLknEdbSOXkQcdf3pEyiva+X+13eTFB/Hd5fOdLokEVdxVY9eRKKPMYZvXz6TK+cX8ds3drN5v269iQSTgl5EIsJ3L59JfrqXz/1xLe9WNuqevUiQKOhFJCL4UhK455r57Ktr5dK7X+ORd/Y5XZKIKyjoRSRinDoxm19fNx+A7z29RcvuRIJAQS8iEeXiWWP4xbJ5dPst//XyDqfLEYl6CnoRiThL547lmkXFPLRqD6+9d8jpckSimoJeRCLSty87ian5aXzx0fVUHNZJdyInSkEvIhEpJTGeX127gK4ePx+79012VDc5XZJIVFLQi0jEmpKfxoOfOJXDrZ18+6nNTpcjEpUU9CIS0RZMyOYrH5jG27vrWLvvsNPliEQdBb2IRLxlC4vJTEngm09scroUkaijoBeRiJfqjefGMyezrapJ9+pFRshVQa9jakXc60PzxgHw1Lr9DlciEl1cFfQ6plbEvcZlJnPm1Fx+tWIXNc0dTpcjEjVcFfQi4m6XzxkDwIX/vdLhSkSih4JeRKLGZXPGAlDX0om1Ot1OJBAKehGJGmneeKYVpAHw7oFGh6sRiQ4KehGJKncvmwfA2r1aUy8SCAW9iESV6QXpFGYk8c4eBb1IIBT0IhJVjDGcOimbN8tqdZ9eJAAKehGJOmdOyeVgUwfbtXmOyLAU9CISdc6clgvAyh06q15kOAp6EYk6Y3zJTM1P41UFvciwFPQiEpXOm5HPP3fWUl7X6nQpIhFNQS8iUem60yYA8MyGSocrEYlsCnoRiUrjs1OYW+Tjpy9tZ2NFvdPliEQsBb2IRK07PjwbgGfWq1cvMhQFvYhErVnjfJw9LY+X363WmnqRISjoRSSqXXRyIfvqWvnsH9bwbqX2vxc5loJeRKLa0rlj8Bh4aUs1l979Gj1+9exFjqSgF5Golp6UwOM3Lx74+r6VZbz+Xo2G8kX6GDf+YygtLbWrV692ugwRCaOO7h6mf/vFo649fcsS5o7PdKYgkTAyxqyx1pYO9ph69CLiCt74OG45t+Soa1f88p80tXc5VJFIZFDQi4hr3HbRDHb96FLuv/5fHZvZ33+Zp9btd7AqEWe5KuiNMUuNMfc1NDQ4XYqIOCTOY7hgZgF3L5s3cO1Lf1rPMxsq2XpAs/Il9ugevYi4Ume3n8/9cS17a1t472DzwPW54zN56nOLMcY4WJ1IcB3vHn18uIsREQmHxHgP93+8FGstk77x/MD1DeX13PnCNg63dPKheeNYMiXXwSpFQk89ehGJCX6/ZfI3nx/0sT13XRbmakSCS7PuRSTmeTyGDd+7cNDHPv/IOm59eG2YKxIJD/XoRSTmdHT38KPntvLQqr3ve+wbl8xgbGYy26ua+NpF0x2oTmTkdI9eROQI3vg4vnP5TCbnpfG9Z7Yc9didL2wb+P8PzRuH31oykhJYvbcOX3ICZ07NC3e5IqOiHr2IxLS6lk4eeXsfP31pe0DPX/udD5CdmhjiqkRG5ng9egW9iAiw82Az++vb+PgDbwf0/OLsFH77iVMpyUujqqGdrh4/47NTQlylyOAU9CIiI2CtZfb3X6a5o3tEr/vTTaexcFI2tS2ddPdYapo7mDXOF6IqRf5FQS8icgL21rbQ1N7NGF8Stz+xib++Wz3i97j+9AkY4OsXz6CupZP99W08uXY/t108ndw0b/CLlpikoBcRCYItlQ1cdvfrPPzpRVxz/1ujfr+/fvksdh1q5vyTCvjdqr1cf/oEEuK06llGTkEvIhIC9a2dPLa6nB89v43ctERqmjuD8r4eA34LxsArXzmbg00dTM1PI0cjADIEBb2ISAg1tHXhS06gvrWT+tYu9tW1cn2Ak/pOxJcvmEaqN44DDe3ML84iKzWBkwoz8CZ42HWwhUl5qaR53796uqO7h8Q4T0D7/De2d2Et+JITQvFXkCBT0IuIhNmmigZe3XGQ+ROyKMlLY8ldf6fbH76ft1Py09h5sJkffmgW7Z09zBrnY9lv3sSXnMD1p0/ghsUTSYj3kJGUQGN7Fz97aTvfuPQkkhLiAJh4+3NAYNsD3/3Ke5w7PZ/ZRb0TD7dVNTK9IB1jDD1+y09e3MYNSyYyxpccur9wjFPQi4hEgPeqmyjKSuG//rqd37y2m8+cPZl7Xy1zuqzjumZRMROyU3hy3X62VTXx2xtO5RMPvsOPPjybi2cV0trZzRk//gfQ+0vB95/ZwoNv7OEn/zaHq0rHc/tfNvLoO+UAXDm/iL9trebV284hM2XovQj21rZQ6EvCGx93QjXXNHdQ1dA+7IoHv9/i8bjjFEMFvYhIBPH7LV1+/0CQtXR0s6e2hbd31/HzV94jNTGe5o5uGtq6HK40dPrnIfSL8xhSEuMwQGP70csav3XpSbyw+QBr99Vz8zklnDcjnziPYd2+egDy0734rWXhpGzW7D3MrQ+vA+D3n1rI4dYu1uypY+GkHKob2xmbmcQFJxWwfGMlX/7TBh696TTuf203u2uaKZ2Qzfc/eDLJiXF0dPfQ2NZNXnrvvIiG1i7+49l3OWd6HglxHuZPyCQ/PWmgxu4eP8YY4ob5xWH5hkqmFaQzvTB99I14BAW9iEiUKq9r5Q9v7eXK+UX87OXtNLV388auWqfLkhMwrSCNHdXNAPzukws5a1rwtlNW0IuIuFB3jx+/hYQ4wx3PbeWp9ZXUNHfwy2vmc0vfaXy+5ARXjwxEs2Aej6ygFxGJYV09flo7eli+sZJUbxwleWlkJifyyrZqfrD8XaB3KP2MqXms3HHI4WpjR7iCXqfXiYi4XEKcB1+Kh+tOm3DU9U8smcQLm6q47vQJfHDu2KMee2NnDavKavnqhdPp6O7hK49tIM4Yli0s5tF39vH0+spw/hVkFNSjFxGREWto7cKX0rvGvra5g+zURNaX1xPv8fDw23v5zFkljMtK5qE39uC3lk8umcSK7Yf49O9Wc/M5JZw5JZfP/GENTe0jO0/ATTR0PwoKehGR6FLf2smLm6swBj52avHA9ec3HWBxSQ6+5AQ6e/z8+IXtnDE1h8UludS2dHLZ3a9R39rFr6+bT48f0pLiaevs5rN/WOvg3yYwCvpRUNCLiEhXj/99ZwdYa/Hb3v++tKWa0yZns6e2lXf21FGUlcypE7MxQFJiHK/tqOGU4kxWbD8IwLee3MxDn1zIW2W1XDJrDFsPNPLW7jr+srZixLVt+O6FAyMiwaCgFxERcbHjBb2OSRIREXExBb2IiIiLKehFRERcTEEvIiLiYgp6ERERF1PQi4iIuJiCXkRExMUU9CIiIi6moBcREXGxiD+9zhhzJnAtvbXOtNYudrgkERGRqBHSHr0x5gFjzEFjzOZjrl9sjNlujNlpjLn9eO9hrX3NWvtZ4FngoVDWKyIi4jah7tE/CNwD/K7/gjEmDvgl8AGgAnjHGPMMEAfceczrP2mtPdj3/9cAnw5xvSIiIq4S0qC31q40xkw85vJCYKe1tgzAGPMocIW19k7g8sHexxhTDDRYaxtDWa+IiIjbOHGPfhxQfsTXFcCiYV7zKeC3x3uCMeYm4Ka+L5uNMdsBH9AwyNOPvT7c17lAzTA1jtZQtQbrdcM9L9C2Gur6YM878lost+FQjwVyLdzfi2rD0Qt1Gw733Fhuw5G8Npg/EyOhDScM+Yi1NqR/gInA5iO+/ihw/xFf/zvwixB99n2BXA/g69VhaKdBaw3W64Z7XqBtFWibHXstltswkPYJtF1D3Y5qw8hvwxNpp1hpw5G8Npg/EyOxDY/848Tyugpg/BFfFwGVIfqs5QFeH+7rcDjRzwz0dcM9L9C2Gur6YM8LdztGahsO9Vgg19SGx38sFttwuOfGchuO5LXB/JkYiW04wPT9ZhG6D+i9R/+stXZW39fxwA7gfGA/8A5wjbV2S0gLGQVjzGprbanTdUQztWFwqB1HT204emrD0QtnG4Z6ed0jwCpgujGmwhjzKWttN3Ar8BKwFXgskkO+z31OF+ACasPgUDuOntpw9NSGoxe2Ngx5j15EREScoy1wRUREXExBLyIi4mIKehERERdT0J8AY0yqMeYhY8xvjDHXOl1PNDLGTDbG/K8x5nGna4lWxpgP9X0PPm2MudDpeqKRMeYkY8yvjTGPG2NudrqeaNX3M3GNMWbQ3U1leMaYc4wxr/V9P54TzPdW0PcZ4QE8HwEet9beCHww7MVGqJG0obW2zFr7KWcqjVwjbMOn+r4HbwA+5kC5EWmEbbjV9h6adRWg5WJ9TuBAsv8DPBbeKiPfCNvRAs1AEr37zQSNgv5fHgQuPvLCEQfwXALMBJYZY2bSu8lP/za+PWGsMdI9SOBtKIN7kJG34bf7HpdeDzKCNjTGfBB4HXglvGVGtAcJsA2NMRcA7wLV4S4yCjxI4N+Lr1lrL6H3l6YfBLMIBX0fa+1KoO6YywMH8FhrO4FHgSvo/W2rqO85asM+I2xDGcRI2tD0+jHwgrV2bbhrjVQj/T601j5jrV0M6DZcnxG24bnAafSeMHqjMUY/E/uMpB2ttf6+xw8D3mDW4cShNtFkqAN47gbuMcZchoPbGkaJQdvQGJMD3AHMM8Z8w/aeXiiDG+r78PPABYDPGDPFWvtrJ4qLEkN9H55D7604L/B8+MuKKoO2obX2VgBjzA1AzRGBJYMb6nvxI8BFQCa9x7sHjYL++Mwg16y1tgX4RLiLiVJDtWEt8NlwFxOlhmrDu+n9pVOGN1QbrgBWhLeUqDVoGw78j7UPhq+UqDbU9+ITwBOh+EANsRxfOA/gcSu14eipDUdPbTh6asPgCHs7KuiP7x1gqjFmkjEmEbgaeMbhmqKN2nD01IajpzYcPbVhcIS9HRX0fVx0AI9j1IajpzYcPbXh6KkNgyNS2lGH2oiIiLiYevQiIiIupqAXERFxMQW9iIiIiynoRUREXExBLyIi4mIKehERERdT0IuIiLiYgl5ERMTFFPQiIiIu9v8B62YBiaNm6UMAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=[8, 6])\n",
"plt.xscale(\"log\")\n",
"plt.yscale(\"log\")\n",
"plt.ylabel(\"loss\")\n",
"plt.plot(losses)\n",
"plt.savefig(\"loss.png\")"
]
},
{
"cell_type": "code",
"execution_count": 677,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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DSyx6FFbWxvbtm3j0KFDTJ06lddeew1PT0/TsYQQdkgpxdKlS1m1ahVXr17lN7/5DZWVlaZjDUvWKOTFQES31+FA6UOWfYn7DqtrrUs7/r8NbKX9UP0DtNbva62TtdbJ0kK0vsbGRj7++GMyMjJITU1lzZo1ctcyIUSvkpKSeO2116itreU3v/kNN2/eNB1p2LFGIT8NjFdKxSil3Ggv1tvuX0gp5QekAn/oNs1bKeXT+RxYBmRaIZPoh9raWjZu3Mi1a9dYs2YNCxculM4rQog+i4mJ4Y033kApxcaNG7l69arpSMPKgAu51roV+D6wB7gEbNJaZymlvqeU+l63RdcCe7XWdd2mhQBHlVLngVPATq317oFmEn1XUVHBBx98QEVFBa+88grTpk0zHUkI4YCCg4N566238PX15eOPPyYrK8t0pGFD7n42jN28eZPf//73WCwWXnnlFcLDw01HEnasqqoKAD8/P8NJhD1raGjg008/paioiKeeeopZs3o8Wyr6abAvPxMO6Nq1a2zcuBFnZ2feeOMNKeKiV35+flLERa88PT15/fXXiYuLY9euXXz77bemIw15UsiHoStXrvD73/8eHx8f3nzzTbm8TPRJZmYmmZnShUX0ztXVlfXr1zNlyhQOHjzIwYMHccSjv45CuiUPM7m5uWzatInAwEBef/11vL29TUcSDqLzdFZCQoLhJMIRODk5dV398u2339Lc3Mzy5culI+0gkEI+jFy6dIkvvviCkJAQXn/9dblGXAgxqJycnFi1ahVubm6cPHmSlpYWVq5cKcXcyqSQDxOZmZls2bKFsLAwXn31VTw8PExHEkIMA0opli9fjqurK0ePHkVrzapVq6SYW5EU8mEgKyuLLVu2EBERwSuvvIK7u7vpSEKIYUQpxZNPPolSim+//RYnJyeeeeYZKeZWIoV8iLt8+XJXEX/11VflPuJCCCOUUixatAiLxcKxY8dQSvH0009LMbcCKeRDWF5eHps3byY0NJRXXnlFirgYkPXr15uOIBycUorFixejtSYtLQ0nJydWrFghxXyApJAPUQUFBWzatIng4GBeffVVOZwuBszLy8t0BDEEKKVYsmQJFouFEydO4OrqypIlS0zHcmhSyIegoqIiPvvsM/z9/aV3urCajIwMABITE43mEI5PKcWyZctoaWnh2LFjeHp6MnfuXNOx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\n",
"text/plain": [
"<Figure size 576x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=[8,8])\n",
"plt.xlim(-1.1, 1.1)\n",
"plt.ylim(-1.1, 1.1)\n",
"phis = jnp.arange(0, 2*jnp.pi, 0.01)\n",
"plt.plot(jnp.cos(phis), jnp.sin(phis), color=\"gray\")\n",
"plt.scatter(jnp.cos(initial_thetas), jnp.sin(initial_thetas), label=f\"(N,p)=({2**8},{2**6})\")\n",
"plt.scatter(jnp.cos(thetas), jnp.sin(thetas), label=\"perturbed\")\n",
"plt.plot([-1, 1], [0, 0], color=\"gray\", ls=\"dashed\")\n",
"plt.plot([0, 0], [-1, 1], color=\"gray\", ls=\"dashed\")\n",
"plt.legend()\n",
"\n",
"plt.savefig(\"pos.png\")"
]
},
{
"cell_type": "code",
"execution_count": 678,
"metadata": {},
"outputs": [],
"source": [
"eigvals0 = jnp.linalg.eigvalsh(jac_fn(A, initial_thetas)) # 摂動を与える前のネットワーク、平衡点の固有値\n",
"eigvals1 = jnp.linalg.eigvalsh(jac_fn(B, thetas)) # 摂動を与えたネットワーク、対応する最適化で求めた平衡点の固有値"
]
},
{
"cell_type": "code",
"execution_count": 679,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfYAAAFlCAYAAAAZGcpRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAe50lEQVR4nO3df7xVdZ3v8dcnQGHMH5U0Kj+EuioqoeKR8Ef2QwlvqaS3H3ivk05TTI3VzNyJEp2xxrJHM5Q1PW7jY3CmdO4tjWtEOHWzoaayxlQQBxElMUwO6ggWpIEK+Ll/7A0d8AD7/Nh77fM9r+fjwWOf9V1rr/V2P87jvF0/9lqRmUiSpDK8pOoAkiSp/1jskiQVxGKXJKkgFrskSQWx2CVJKojFLklSQYZWHaA/HHrooTlu3LiqY0iS1DJLly7dkJkjdx8votjHjRvHkiVLqo4hSVLLRMQvuxv3ULwkSQWx2CVJKojFLklSQYo4xy5Jag9bt26ls7OTZ599tuooxRg+fDijR49m2LBhDS1vsUuS+k1nZycHHngg48aNIyKqjjPgZSZPPfUUnZ2djB8/vqH3eChektRvnn32WV7xildY6v0kInjFK17RoyMgFrskqV9Z6v2rp5+nxS5JGpTe8pa3sHHjxr0uc9VVV7F48eJerf+HP/wh5557bq/e2xeeY5ckDSqZSWbyne98Z5/LXn311S1I1L/cY9/d8vnw+YnwiUNqr8vnV51Ikoq1cNk6Tv/MDxh/+bc5/TM/YOGydf2y3muvvZaJEycyceJEvvCFL/DII49w7LHH8id/8idMnjyZtWvXMm7cODZs2ADAJz/5SSZMmMC0adO46KKL+OxnPwvApZdeyi233ALU7nL68Y9/nMmTJ/Oa17yGBx98EIC77rqL0047jZNOOonTTjuNVatW9ct/Q29Z7F0tnw+3fhg2rQWy9nrrhy13SWqChcvWMWfBfazbuIUE1m3cwpwF9/W53JcuXcpXvvIV7rzzTn72s59x/fXX8+tf/5pVq1bx7ne/m2XLlnHkkUfuXH7JkiV84xvfYNmyZSxYsGCvtyg/9NBDueeee/jABz6ws/wnTJjAj3/8Y5YtW8bVV1/NFVdc0af8feWh+K6+fzVs3bLr2NYttfFJ76wmkyQVau5tq9iydfsuY1u2bmfubat420mjer3en/zkJ1xwwQUccMABAFx44YXcfvvtHHnkkUydOrXb5WfMmMGIESMAOO+88/a47gsvvBCAk08+mQULFgCwadMmLrnkEh566CEigq1bt/Y6e39wj72rTZ09G5ck9dpjG7f0aLxRmdnt+I6ib3T57uy///4ADBkyhG3btgHwV3/1V7zxjW9kxYoV3HrrrZXfnMdi7+rg0T0blyT12hGHjOjReKPOPPNMFi5cyObNm/ntb3/LN7/5TV73utftcfkzzjhjZyE/88wzfPvb3+7R9jZt2sSoUbUjDDfccENfovcLi72rs66CYbv9Qg0bURuXJPWr2dOPYcSwIbuMjRg2hNnTj+nTeidPnsyll17KlClTeO1rX8t73/teXvayl+1x+VNOOYXzzz+fE044gQsvvJCOjg4OPvjghrf30Y9+lDlz5nD66aezffv2fb+hyaInhyDaVUdHR/bb89iXz6+dU9/UWdtTP+sqz69LUoMeeOABjj322IaXX7hsHXNvW8VjG7dwxCEjmD39mD6dX++tZ555hpe+9KVs3ryZM888k3nz5jF58uSW59iT7j7XiFiamR27L+vFc7ub9E6LXJJa5G0njaqkyHc3a9YsVq5cybPPPssll1zSVqXeUxa7JGnQ+9rXvlZ1hH7jOXZJkgpisUuSVBCLXZKkglRa7BHx5Yh4MiJWdBl7eUT8a0Q8VH/d83cUJEnSLqreY78BOGe3scuB72fmUcD369OSJLXEwoULWblyZY/f19fHtPbXY14rLfbM/DHwq92GZwA31n++EXhbKzNJkgavbdu29arYd9xeth1Uvcfend/PzMcB6q+v7G6hiJgVEUsiYsn69etbGlCS1E+a8KjsRx55hAkTJnDJJZcwadIk3v72t7N582aWLl3K61//ek4++WSmT5/O448/DsAb3vAGrrjiCl7/+tfzN3/zNyxatIjZs2dz4okn8vDDD/OGN7xh5xPfNmzYwLhx44Da7WPf8Y53cN555/HmN78ZgN/85jdccMEFHHfccbz//e/nhRdeAOB73/sep556KpMnT+Yd73gHzzzzDADf/e53mTBhAmecccbOh8r0VTsWe0Myc15mdmRmx8iRI6uOI0nqqSY+KnvVqlXMmjWL5cuXc9BBB/GlL32JD33oQ9xyyy0sXbqU97znPVx55ZU7l9+4cSM/+tGPuPLKKzn//POZO3cu9957L69+9av3up077riDG2+8kR/84AdA7dnsn/vc57jvvvt4+OGHWbBgARs2bOBTn/oUixcv5p577qGjo4Nrr72WZ599lve9733ceuut3H777TzxxBN9/u+G9rxBzX9GxOGZ+XhEHA48WXUgSVITNPFR2WPGjOH0008H4OKLL+bTn/40K1asYNq0aQBs376dww8/fOfy73rXu3q1nWnTpvHyl7985/SUKVN41ateBcBFF13ET37yE4YPH87KlSt35nn++ec59dRTefDBBxk/fjxHHXXUzpzz5s3rVY6u2rHYFwGXAJ+pv36r2jiSpKZo4qOyI2KX6QMPPJDjjz+eO+64o9vl9/RIV4ChQ4fuPKS++yNZd3/f7tuNCDKTadOmcdNNN+0y7957733R8v2h6q+73QTcARwTEZ0R8UfUCn1aRDwETKtPS5JK08RHZT/66KM7S/ymm25i6tSprF+/fufY1q1buf/++7t974EHHsjTTz+9c3rcuHEsXboUgFtuuWWv273rrrtYs2YNL7zwAl//+tc544wzmDp1Kj/96U9ZvXo1AJs3b+bnP/85EyZMYM2aNTz88MM7c/aHqq+KvygzD8/MYZk5OjP/KTOfysyzMvOo+uvuV81LkkrQxEdlH3vssdx4441MmjSJX/3qVzvPr3/sYx/jhBNO4MQTT+Tf//3fu33vzJkzmTt3LieddBIPP/wwH/nIR7juuus47bTT2LBhw163e+qpp3L55ZczceJExo8fzwUXXMDIkSO54YYbuOiii5g0aRJTp07lwQcfZPjw4cybN4+3vvWtnHHGGRx55JF9/u8GH9sqSepHPX1sazMelf3II49w7rnnsmLFin0vPED42FZJ0sDgo7L73YD9upskSd0ZN25cUXvrPWWxS5JUEItdktSvSrh2q5309PO02CVJ/Wb48OE89dRTlns/yUyeeuophg8f3vB7vHhOktRvRo8eTWdnJz7Do/8MHz6c0aMb/26/xS5J6jfDhg1j/PjxVccY1DwUL0lSQSx2SZIKYrFLklQQi12SpIJY7JIkFcRilySpIBa7JEkFsdglSSqIxS5JUkEsdkmSCmKxS5JUEItdkqSCWOySJBXEYpckqSAWuyRJBbHYJUkqiMUuSVJBLHZJkgpisUuSVBCLXZKkgljskiQVpG2LPSLOiYhVEbE6Ii6vOo8kSQPB0KoDdCcihgBfAqYBncDd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\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# 上位10個の固有値をそれぞれプロット\n",
"plt.figure(figsize=[8, 6])\n",
"idx = 10\n",
"plt.ylabel(\"eigen vals\")\n",
"plt.scatter(jnp.arange(idx), eigvals0.real[-idx:][::-1], label=\"original\")\n",
"plt.scatter(jnp.arange(idx), eigvals1.real[-idx:][::-1], label=\"perturbed\")\n",
"plt.plot(jnp.arange(idx), jnp.zeros(idx), color=\"gray\")\n",
"plt.legend()\n",
"\n",
"plt.savefig(\"eig.png\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment