Skip to content

Instantly share code, notes, and snippets.

@yonesuke
Created May 18, 2022 08:39
Show Gist options
  • Save yonesuke/a2393772669a620cba3cc54ce892f5af to your computer and use it in GitHub Desktop.
Save yonesuke/a2393772669a620cba3cc54ce892f5af to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 148,
"metadata": {},
"outputs": [],
"source": [
"import jaxfss\n",
"import jax\n",
"import jax.numpy as jnp\n",
"import optax\n",
"from softclip import SoftClip\n",
"from jax.config import config; config.update(\"jax_enable_x64\", True)\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib\n",
"matplotlib.rc('text', usetex=True)"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [],
"source": [
"# initializing MLP\n",
"mlp = jaxfss.RationalMLP(features=[20, 20, 1])\n",
"mlp_params = mlp.init(jax.random.PRNGKey(0), jnp.array([[1]]))"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [],
"source": [
"# creating data\n",
"dataset = jaxfss.CriticalData.from_file(fname=\"ising.dat\")\n",
"train_data = dataset.train_data"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [],
"source": [
"# creating bijector for stablizing learning\n",
"bij_c1 = SoftClip(low=0.0)\n",
"bij_c2 = SoftClip(low=0.0)\n",
"bij_Tc = SoftClip(low=-1.0, high=1.0)"
]
},
{
"cell_type": "code",
"execution_count": 155,
"metadata": {},
"outputs": [],
"source": [
"# initial parameters\n",
"init_params = {\n",
" \"mlp\": mlp_params,\n",
" \"fss\": [0.0, 0.0] # p1, pc\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {},
"outputs": [],
"source": [
"# helper function for bijectors\n",
"def bijectors(params):\n",
" p1, pc = params[\"fss\"]\n",
" c1 = bij_c1.forward(p1)\n",
" # c2 = bij_c2.forward(p2)\n",
" scaled_Tc = bij_Tc.forward(pc)\n",
" return [c1, scaled_Tc]\n",
"\n",
"# loss function for learning\n",
"def loss_fn(params):\n",
" c2 = 0.0\n",
" c1, scaled_Tc = bijectors(params)\n",
" Ls, Ts, As, vAs = train_data[\"system_size\"], train_data[\"temperature\"], train_data[\"observable\"], train_data[\"observable_var\"]\n",
" X = (Ts - scaled_Tc) * Ls ** c1\n",
" Y = As * Ls ** c2\n",
" E = vAs * Ls ** c2\n",
" return jaxfss.NLLLoss(mlp.apply(params[\"mlp\"], X), Y, E) + 0.5 * jnp.log(2.0 * jnp.pi)\n",
"\n",
"# fit function\n",
"def fit(loss_fn, optimizer, init_params, steps):\n",
" opt_state = optimizer.init(init_params)\n",
" @jax.jit\n",
" def update_fn(i, val):\n",
" params, opt_state, logs = val\n",
" loss, grad = jax.value_and_grad(loss_fn)(params)\n",
" updates, opt_state = optimizer.update(grad, opt_state, params)\n",
" params = optax.apply_updates(params, updates)\n",
" # losses = losses.at[i].set(loss)\n",
" # criticals = criticals.at[i].set(params[\"fss\"])\n",
" logs = logs.at[i].set([loss, *params[\"fss\"]])\n",
" return [params, opt_state, logs]\n",
" # losses = jnp.zeros(steps)\n",
" # criticals = jnp.zeros((steps, len(init_params[\"fss\"])))\n",
" logs = jnp.zeros((steps, len(init_params[\"fss\"]) + 1))\n",
" init_val = [init_params, opt_state, logs]\n",
" params, _, logs = jax.lax.fori_loop(0, steps, update_fn, init_val)\n",
" return params, logs"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2.47 s, sys: 261 ms, total: 2.73 s\n",
"Wall time: 2.13 s\n",
"0.9907766077862741 0.44070345563338675\n"
]
}
],
"source": [
"lr = 10**-2\n",
"optimizer = optax.adam(learning_rate=lr)\n",
"steps = 10**4\n",
"# learn!!\n",
"# params, losses, fsses = jaxfss.fit(loss_fn, optimizer, init_params, steps)\n",
"%time params, logs = fit(loss_fn, optimizer, init_params, steps)\n",
"c1, scaled_Tc = bijectors(params)\n",
"Tc = dataset.bij_temperature.inverse(scaled_Tc)\n",
"print(c1, Tc)"
]
},
{
"cell_type": "code",
"execution_count": 170,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAhEAAAGCCAYAAABehJFiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAA6zElEQVR4nO3deXhb13nv+98COIgUKYEUNVm2LEOe4ikOTWWemtJpBp8kbiU57UnTtLmRkpz2PG1zK0b33D63bW6qUk2b9rYnp5R7MvSkPU2lpE0zOIkQJ03SJLUlOrHjSbZgW5ZkWQMIkRo4AFj3j70BbIAgiRnkxvfzPHiwsbCHhUUQeLHetdc21loBAACUKtDoCgAAgKWJIAIAAJSFIAIAAJSFIAIAAJSFIAIAAJSlpdEVqIW+vj67adOmRlcDAIC6OXz48Flr7ep6HtOXQcSmTZt06NChRlcDAIC6McY8V+9jks4AAABlIYgAAABlIYgAAABlIYgAAABlIYgAAABlIYgAAABlIYgAAABlIYgAAABlIYgAAABlIYgAAABlIYgAAABlIYgAAGAO5y/P6NJ0otHVyJFKWe2573H97weONboq/rwAF6rHWquL00mduzCl85dnNJ1IaTqZUiJpNZNMaSaZ0nTSaiaRyjyeSVqNXZrWuYvTOn95RkZSR2tQbS0BtQYDCgaMWoJGrYGAc++WWeseUzazPHZxWifPX9bEZELWSstag+psc26tQWf7loBRSzDg3Adyy6y1il2c1gvnJ/XEqQm1tQS0prtdHa1BtQRMpi5Bd1vn3njuA57nnfuJyYS+/9QZSdLm1V1a1hrM3c6ty6x9ueUBI1krWaXvrS5NJfXYC+NqCwZ04/puBYyRtVaBgJExzjZGzn3AGBkjGWOUSlklrVUyZWXd+6SVLk0ldHE6qWvXdKk1aJRM2by/a97f2bMcvzStJ05N6MZ13bqyp0OtwYCmEyklUlYp69ySKTnLKauUVaY8lbL68k9P6qFjcf2fb75e16/tVjJlM9tad91Z93LuL08n9WffOqLLM0m9/7XX6I03rFbQGE2776vMe86tz3QilXlPTiVSOh67pK898oK23nGl3nzzOo1fntHlmaSmEimlUlYBI6lAe8o4r/1T33laz567pK/+1mt19sKUzl6Y1rTnvW2tZNx1jTFyd+c8lvSPDz6vJ05N6HO/8XK1Bo1Oxifd1+ltJ+f/ytt2f3X/0zp/eUZ/+e7b1dfVrqdenND5ywkZIwUDRgGT+7dPPzbG6ONfe1yS9O2PvEGPnhzXmQtTGr88I8n5srGSkqn03815v6RSVjNJq8/+8Nmc98EH37BZ3ctyvxa877FEyrk/d2FaXxw9Lkn64oderR9Hz0mS2lsCmdeYTDnHSf/tE+7jHx49p0dOnM85xq+/ZpNesm6FZlLZz5ZEyirh/t0TqZR++vx5/eDps7pn4CpNu++Bl1/Tq5ag0UwilfM+TL9XEkmrB56N6YFnYjnH+9g7b5bc/7GU+z+T/v9JWenSdEJ/df/TOdus7GjVzjeEFepoUzKVyvz/yn3vpj/77vvZC/rZifHMdqu72/XhN25We0sws13adCKlvd94UtPJVM6xPn73Le5+nXrNJK2SKbctklafjBzJrLv7S48oYKQ/euctagRj8z9NfGBgYMByFc/5JZIpvTgxpRNjl3Uyflkvjk/q3MVpnbswrXMXp3TuwrRiF6d19sKUphKphXcIAGio54bvOmytHajnMemJ8LlEMqUjL17QE6fG9eSLEzpyakJPnb6gF85Pzvp1CgBAKQgifCaRTGn0WFz//vRZHX5uTA8dG9PF6WRF+2xvCaivq109y1vV3uKkAdKpiVY3HdEWzKYmWoMBdbYFtX7lMq3oaJUkXZ5OZrr7Em63XDLdXel2kRop061s5HTbdrYGtaGnQ6u62jP7uTyT0KXpZKbbM93NmnD3ne4GTZe1tQS0aVWnrl/bLSspfmlGkzNJt2s2lemiTSSz3b3Zx57n3fuAMbqqt0NXhDp0enwy85qSKRVcP38/yZR10hFKpyWcV7yio0VdbS06NT6Z6ba2ni5wySqVyu0SDwSMgsY494F0N3c2TfN87JICxvm75DMFCqyVvv/UGW1e3aX1K5fp7IVptQadv3dLMODsO92dHsh2saeXJenzP3bytH1d7drY26He5e1qb3W2NZKnWz7dNZ99fGZiUpHHT0uSutpbtHlNlzpbg2ptCajNfX+1uO+79HuuLeikytpbAvrHB4/pxfEpSdKq5W26ZcNK9XU5xw8aI6t02znt523fyURSX3v4hUxzrF+5TK8Kr1J7q/OebgkEMn8Tb8pNcvcl6e9+9FymbGVHq15xTa9WdLTmvMZAXjoiYIw+/e/P5Pwp3nrLOm1e3SVJSqRs5njp1EK63jNJOysvPviStbpurbNtJm3jvk+CAWWWpxMp/dnBIznbvueVG7ViWeus90p+iu7bj5/WA8/mpgh+7VVXKxgIKOCmYIxx1g140nrBgNGf3PfErP2/7ro+rV2xTK3BbEqyLZP6DKg1YGbVVZLeefsVmdRm+r0fME5924LOtn9eYLvtA1e672cp6P5dgun3c8Dof/3oOV0q8Ll5501r1dvZppagcyxJSmfDWoMBtbUE9KnvHi1Yzw437ZneTpK+e+S0no9dnrX+L/ZvUHtLIPM50BJw3vPBQEAXpmYy/2NeW++4Un82q7T2SGf4wORMUt9+/LQOPnZK3z1yRvFLM0Vt19fVrg09HdoQWqZ1KzrU192mvuXt6l3eplVdberrcpY724IyZtZXDuBLiWQq8yVYjqlEUqmU1NEWLGm752OX9MzZi7phXbfWrlhW9HbJlNW3Hj2lqURKr7m2T6u720s67vGxS9oQ6ij59d7/xIv6jc8e0muuXaVPbHup1q/sKGo7a62+OHpCLQGjN9+8Vp1txf2WnU6kdP3/fV/m8RMfe4uWtS7cxqfOT+qVe74tSfrhR9+kK0LF1fMNf/odPXfukiTpL999u955+4aitjvy4oTe/MnvSZLuftkGffKe2+dd/3/+4Bl97KuPaeDqHv3d+19eVHv85Pm43vXf/139G0Pa994B9bk/sowxdU9nEEQsUdZa/eT5uPYfPq6v/PSkJibnHj28bsUy3XblSt24rlvXr+vW9Wu7tbG3s6h/QADA0tCIIIJ0xhKTTFl989FT2ve9qH7yfLzgOmtXtOtNN67RK8OrdMfVPWX9ygAAYCEEEUtEKmX1lYdP6s8PHsl0sXlt7O3Uu162QW++aa1uvmIFQQMAoOYIIpaAHzx1Vnvue1yPnhzPKW8LBvSO26/Q9oGrtGVTD4EDAKCu6hJEGGP6JQ1IikoKSYpbayMLbBOWtF/SiKRDksKS7pQ0Yq0drWmFF4kzE1P6o68+pq/89GRO+cqOVv3qK6/We199tdZ0Fz8ACwCAaqp5EOEGA7uttds8ZfuNMbEigoGQpGH3PiJpqBkCCGut9h8+rv/3q49p3DNgcllrQO9/7TXa+YbNBU/DAgCgnurREzEkpzfBa4+c4ODOBbbd1gxBg9f5yzP6v770iL72yAs55Xe/bIM++tYbSzr1CwCAWqpHELFdTsDgFZU0WIdjLykPHRvTb/7DQzoRz04+srG3Ux+/+xa97rrVDawZAACz1TSIcFMZIWtt1FturY07s9WZ/oV6GowxITnjIeL5+/GTL40e10e/+EjOhVh+5RUb9ftvv6nkSWsAAKiHWvdEhBZ4vneB5++RdFDuwEpjzH5JH7DWxvNXNMbskLRDkjZu3FhyRRslmbL6028+qb/5t+xUqSuWtWj4l27TW29d38CaAQAwv0V7iqe1NmqM2eMJGEaNMQcl3StpW4H190naJzkzVtatohWYSiT1O1/4ib7+yKlM2fVru/S3792ijas6G1gzAAAWtmiDCMlJe+QVRSSNGGNChXojlpJL0wl98POj+t6RM5myn79xjf7i3bermzMvAABLwOxL+1VXXMqMaygkNkd5Oj0x1/rhimrVYOOTM3rv/3wgJ4B436s3ad97BwggAABLRk2DCHcgZFx5Yx/SQcVcgyrdAZkj7n0hS3aA5cWphN736Qd06LmxTNlvD16n/+c/3aRggBknAQBLR617IiQnBdGfVzbglhfkBh87C5yNsV3S6FJNZUzOJPV/fO6QRo/FM2W/f9dN+u3B65myGgCw5NQjiBiStDuvbKdbLsnpmTDGHDbGbPWsE/P2RLi9FzslfaCGda2Z6URKH/r8Yf0oei5T9ofvuFnvf+01DawVAADlq/nASvcsiyFjzC45aYiwCl//IixP2sNae8AYs9UTWGyWM4PlkktlWGv10S8+rO88mR0DMfSWG/Vrr97UuEoBAFChupyd4V5sa770RVxST4HyAzWsVt385bef0pceOpF5/FtvulYfeuPmBtYIAIDK1SOd0dT++aHj+ovIU5nH795ylX73zusbWCMAAKqDIKKGHnw2pl0HHs48ft11ffrYu25hECUAwBcIImrk9PikPvz3o5pJOpNnXr+2S//9P/erNUiTAwD8gW+0GphJpvSb//CQzkxMSZJ6Olv16fdt0QomkgIA+AhBRA0M3/eEHnjWmVwzYKS/+uV+XdnDtTAAAP5CEFFl9z/xov72B89kHn/kzTfotdf1NbBGAADUBkFEFZ29MJUzkHLwJWv0oTdwKicAwJ8IIqokPaHU2QvTkqQ13e36060vVYDrYQAAfIogokr2HzquyOOnM48/se2l6lne1sAaAQBQWwQRVXD2wpQ+/vXHM4/f9+pNev31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\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.rcParams[\"font.size\"] = 20\n",
"plt.xlim(0, steps)\n",
"plt.xlabel(r\"$\\textrm{iteration}$\")\n",
"# plt.plot(bij_c1.forward_fn(logs[:,1]), label=\"$c_{1}$\", lw=3)\n",
"plt.plot(logs[:,1], label=\"$p_{1}$\", lw=3)\n",
"# plt.plot(bij_c2.forward_fn(logs[:,2]), label=\"$c_{2}$\", lw=3)\n",
"# plt.plot(dataset.bij_temperature.inverse(bij_Tc.forward_fn(logs[:,3])), label=\"$\\mathrm{rescaled}\\ T_{c}$\", lw=3)\n",
"# plt.plot(bij_Tc.forward_fn(logs[:,2]), label=r\"$\\textrm{rescaled }T_{c}$\", lw=3)\n",
"plt.plot(logs[:,2], label=r\"$p_{c}$\", lw=3)\n",
"plt.legend()\n",
"\n",
"plt.savefig(\"ising_params.pdf\", bbox_inches='tight', transparent=True)"
]
},
{
"cell_type": "code",
"execution_count": 188,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x720 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=[8, 10])\n",
"plt.rcParams[\"font.size\"] = 20\n",
"\n",
"plt.subplot(2,1,1)\n",
"plt.title(\"$\\mathrm{(a)}$\", loc=\"left\")\n",
"nums = [64, 128, 256]\n",
"for num in nums:\n",
" idx = dataset.Ls == num\n",
" plt.scatter(dataset.Ts[idx], dataset.As[idx], label=rf\"$L={num}$\")\n",
"plt.legend()\n",
" \n",
"plt.subplot(2,1,2)\n",
"plt.title(\"$\\mathrm{(b)}$\", loc=\"left\")\n",
"for num in nums:\n",
" idx = dataset.Ls == num\n",
" Ls, Ts, As = train_data[\"system_size\"][idx], train_data[\"temperature\"][idx], train_data[\"observable\"][idx]\n",
" X = (Ts - scaled_Tc) * Ls ** c1\n",
" Y = As\n",
" plt.scatter(X, Y, label=rf\"$L={num}$\")\n",
"plt.legend()\n",
"\n",
"plt.savefig(\"ising_binder.pdf\", bbox_inches='tight', transparent=True)"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DeviceArray([[ 2.98515077e+05, 1.00000000e-02, -1.00000000e-02],\n",
" [ 2.30951170e+05, 9.77260388e-03, -1.88504672e-02],\n",
" [ 1.80104530e+05, 4.33646888e-03, -2.79320548e-02],\n",
" ...,\n",
" [-5.26425070e+00, 5.26663112e-01, 1.40916808e-01],\n",
" [-5.26570592e+00, 5.26663547e-01, 1.40923429e-01],\n",
" [-5.26588023e+00, 5.26694239e-01, 1.40923888e-01]], dtype=float64)"
]
},
"execution_count": 165,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"logs"
]
},
{
"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