Skip to content

Instantly share code, notes, and snippets.

@aseyboldt
Created September 21, 2022 16:35
Show Gist options
  • Save aseyboldt/2bf34b3758f88c7563391f4df3dbea94 to your computer and use it in GitHub Desktop.
Save aseyboldt/2bf34b3758f88c7563391f4df3dbea94 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 383,
"id": "9882bcc1-6f7e-4f0d-9607-6c0ddbdb75a1",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy import stats"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "30bde601-92f8-4714-b614-f2b870741979",
"metadata": {},
"outputs": [],
"source": [
"def apply_layer(x, A, b, act):\n",
" return act(A @ x + b[:, None])"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "9341408e-5e53-4ee5-992e-4c19622a994d",
"metadata": {},
"outputs": [],
"source": [
"rng = np.random.default_rng(42)"
]
},
{
"cell_type": "code",
"execution_count": 1007,
"id": "4629255a-77ba-4c1a-8482-383314901769",
"metadata": {},
"outputs": [],
"source": [
"def random_layer(act, n_dim, rng: np.random.Generator):\n",
" vecs = stats.ortho_group(dim=n_dim, seed=rng).rvs()[:, :4]\n",
" vals = np.exp(np.random.randn(n_dim))[:4] / 8\n",
" diag = np.exp(np.random.randn(n_dim) / 4)\n",
" A = np.diag(diag) @ (vecs @ np.diag(vals - 1) @ vecs.T + vecs @ vecs.T)\n",
" b = rng.normal(size=n_dim)\n",
" return A, b, act"
]
},
{
"cell_type": "code",
"execution_count": 1008,
"id": "99b2aac9-e577-458e-9cc6-4d73a9cd7e88",
"metadata": {},
"outputs": [],
"source": [
"n_dim = 10"
]
},
{
"cell_type": "code",
"execution_count": 1009,
"id": "d6745612-9ccd-4e14-9806-f383c8da396e",
"metadata": {},
"outputs": [],
"source": [
"acts = [np.sinh, np.arcsinh, np.sinh, np.arcsinh]\n",
"\n",
"rng = np.random.default_rng(42)"
]
},
{
"cell_type": "code",
"execution_count": 1053,
"id": "0f51ea7f-0f8c-4b91-84ab-65d0774ce3ef",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7f23405ea400>"
]
},
"execution_count": 1053,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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4uJiyz4XLlxweExXXlf+f3fOzR2+unZbQgg899xzmDZtGsaOHWvZHoifOwBMmjQJmzZtwkcffYQNGzbgwoULmDJlCr7++mvLMeTnuXpu7vCXz90X33eg+67fG6/bWz97dwXSd94Vvv7OA+zOrsn2X11CCLttANDZ2Ync3FysXLkSKSkpmsf7wx/+gMcffxypqamQJAnJyclYsmQJNm7cqLr/m2++iezsbMTFxSm2L1y40PL3sWPH4vbbb8eIESOwY8cOLFiwwJ1L1OTqtQPA6NGjMXr0aMvPWVlZqK+vx5o1azB9+nS3jumtfbrCV9cuW7ZsGT777DO7kcBA/dyzs7Mtf09LS0NWVhaSk5Px9ttv47nnnvPo3Dzh68/dl993d8/V1ev31uv2xs/eHYH2nXfGH77zHPGxMXjwYISEhNhFlhcvXrSLQAHgypUrOHToEJYtW4bQ0FCEhobiN7/5DY4ePYrQ0FAUFRUBAIYMGYLt27ejpaUF586dw6lTp9C/f38kJSXZHfPcuXP45z//iccee8zp+cbGxmLEiBGoqqry8IpvcPfatUyePFlxPjExMQ6P6crryln/XT03Lb66dmtPP/00PvjgA+zZswfDhw93+DqB8LmriYyMRFpamuU4wfC5++r7DnTf9XvjdXvrZ++OQPvOe6Knv/MAAx87ffv2xcSJE/Hxxx8rtn/88ceYMmWK3f5RUVGorKxERUWF5c+TTz6J0aNHo6KiApMmTVLs369fPwwbNgzffvsttm7divvuu8/umBs3bsTQoUMxf/58p+f79ddfo76+HrGxsW5eqT13r11LeXm54nyysrLsjrl7927LMV153aSkJMTExCj26ejowCeffOLWuWnx1bUD5n/JLFu2DNu2bUNRUZFqMGwrED53Ne3t7Th58qTlOIH8uct89X0Huu/6vfG6vfWzd0Wgfuc90dPfeQBczq5GXub35ptvihMnTohnn31WREZGitraWiGEEHl5eeLhhx/WfL5a1vqBAwfE1q1bRXV1tSguLhazZ88WSUlJdhnynZ2dIiEhQSxfvtzuuFeuXBE///nPRWlpqaipqRF79uwRWVlZYtiwYV5f3unqtf/3f/+3eO+998SZM2fEsWPHRF5engAgtm7datln//79IiQkRBQWFoqTJ0+KwsJCzeXsWq8rhHmJo16vF9u2bROVlZXiwQcf7JalrT197T/5yU+EXq8Xe/fuVSzxbG1tFUIE9uf+85//XOzdu1d8/vnn4sCBA+K73/2uGDBgQFB87kL4/vveXdff3t4uysvLRXl5uYiNjRXPP/+8KC8vF1VVVS6/rhC987N35doD9TvvyrX7w3eegY+G1157TYwYMUL07dtXTJgwwW6Z4YwZMzSfqxb47N27V4wZM0aEhYWJQYMGiYcfflg0NDTYPfejjz6y1Eqw1draKu666y4xZMgQ0adPH5GQkCAWL14s6urqPL5ONe5c++rVq0VycrLo16+fiI6OFtOmTRM7duywO+b//d//idGjR4s+ffqI1NRUxZfFldcVwrzMccWKFSImJkaEhYWJ6dOni8rKSu9duJNz6K5rB6D6Z+PGjUKIwP7c5focffr0EXFxcWLBggXi+PHjin0C9XMXwj++70J4//prampUf6dt/7sZiN95V649UL/zrly7P3znJSGE8M7YEREREZF/Y44PERERBQ0GPkRERBQ0GPgQERFR0GDgQ0REREGDgQ8REREFDQY+REREFDQY+BAREVHQYOBDREREQYOBDxEREQUNBj5EREQUNBj4EBERUdBg4ENERERB4/8HV16b8myFQE0AAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"layers = [random_layer(act, n_dim, rng) for act in acts]\n",
"\n",
"n_draws = 5000\n",
"draws = rng.normal(size=(n_draws, n_dim))\n",
"\n",
"x = draws.T\n",
"for layer in layers:\n",
" x = apply_layer(x, *layer)\n",
"\n",
"plt.scatter(*x[-2:], marker='.')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a0f360c8-b1bd-4c02-89ce-78c666778e8f",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "46d57179-f0ca-4e20-8a70-1ecc3137d41e",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "pymc",
"language": "python",
"name": "pymc"
},
"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.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment