Created
March 28, 2021 21:37
-
-
Save amaarora/57604e10cddd7f01f61bc3b8bb1e83ff to your computer and use it in GitHub Desktop.
Downloads/Timm_revised.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"metadata": { | |
"gradient": {}, | |
"trusted": false | |
}, | |
"id": "royal-stamp", | |
"cell_type": "code", | |
"source": "import timm \nimport torch \nimport fnmatch\nimport torchvision\nimport torch.nn as nn\nfrom matplotlib import pyplot as plt", | |
"execution_count": 1, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"trusted": false | |
}, | |
"id": "mediterranean-banner", | |
"cell_type": "code", | |
"source": "def avg_sq_ch_mean(model, input, output): \n \"calculate average channel square mean of output activations\"\n return torch.mean(output.mean(axis=[0,2,3])**2).item()\n\n\ndef avg_ch_var(model, input, output): \n \"calculate average channel variance of output activations\"\n return torch.mean(output.var(axis=[0,2,3])).item()", | |
"execution_count": 2, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"trusted": false | |
}, | |
"id": "contrary-concentrate", | |
"cell_type": "code", | |
"source": "class ActivationStatsHook:\n \"\"\"Iterates through each of `model`'s modules and matches modules using unix pattern \n matching based on `layer_name` and `layer_type`. If there is match, this class adds \n creates a hook using `hook_fn` and adds it to the module.\n\n Arguments:\n model (nn.Module): model from which we will extract the activation stats\n layer_names (str): The layer name to look for to register forward \n hook. Example, 'stem', 'stages'\n hook_fns (List[Callable]): List of hook functions to be registered at every\n module in `layer_names`.\n \n Inspiration from https://docs.fast.ai/callback.hook.html.\n \"\"\"\n\n def __init__(self, model, layer_name, layer_type=None, hook_fns=[avg_sq_ch_mean, avg_ch_var], pat=None):\n self.model = model\n self.layer_name = layer_name \n self.hook_fns = hook_fns\n self.pat = pat\n self.stats = dict((hook_fn.__name__, []) for hook_fn in hook_fns)\n for hook_fn in hook_fns: \n self.register_hook(layer_name, layer_type, hook_fn)\n\n def _create_hook(self, hook_fn):\n def append_activation_stats(module, input, output):\n out = hook_fn(module, input, output)\n self.stats[hook_fn.__name__].append(out)\n return append_activation_stats\n \n def register_hook(self, layer_name, layer_type, hook_fn):\n pat = self.pat\n if pat is None:\n pat = f'{layer_name}.?.?' if layer_type is None else f'{layer_name}.?.?.{layer_type}' \n for name, module in self.model.named_modules():\n if not fnmatch.fnmatch(name, pat):\n continue\n module.register_forward_hook(self._create_hook(hook_fn))", | |
"execution_count": 3, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"trusted": false | |
}, | |
"id": "labeled-coordination", | |
"cell_type": "code", | |
"source": "def extract_spp_stats(model, \n layer_name=None, \n hook_fns=[avg_sq_ch_mean, avg_ch_var], \n input_shape=[8, 3, 224, 224],\n layer_type=None,\n pat=None):\n \"\"\"Extract average square channel mean and variance of activations during \n forward pass to plot Signal Propogation Plots (SPP).\n \n Paper: https://arxiv.org/abs/2101.08692\n \"\"\" \n x = torch.normal(0., 1., input_shape)\n hook = ActivationStatsHook(model, layer_name=layer_name, hook_fns=hook_fns, layer_type=layer_type, pat=pat)\n _ = model(x)\n return hook.stats", | |
"execution_count": 15, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"gradient": {}, | |
"trusted": false | |
}, | |
"id": "departmental-baker", | |
"cell_type": "code", | |
"source": "model = timm.create_model('nfnet_f0')\nstats = extract_spp_stats(model, layer_name='stages', hook_fns=[avg_sq_ch_mean, avg_ch_var])\nplt.plot(stats['avg_sq_ch_mean'], label='avg_sq_ch_mean');\nplt.plot(stats['avg_ch_var'], label='avg_ch_var');\nplt.legend();", | |
"execution_count": 16, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAf9ElEQVR4nO3de3RU9b338fc3FxJucgkxQUBBRSCQyCVSFR+8VrFSgSUq1nrUpx4ePVqxrcdl9Xnk2Na11Lpcira1VLzXKyCCSE/xwkFtUSJykYsVCgoUMAblIgQIfJ8/9iSGGMyQzGRn9nxey1lz2b/Z851k/PDL77fnt83dERGR1JcRdgEiIpIYCnQRkYhQoIuIRIQCXUQkIhToIiIRkRXWC3fp0sV79uwZ1suLiKSkDz744At3z69vW2iB3rNnT8rKysJ6eRGRlGRmnx5qm4ZcREQiQoEuIhIRCnQRkYgIbQxdRJpm3759bNiwgcrKyrBLkSTIzc2le/fuZGdnx/0cBbpIitqwYQPt27enZ8+emFnY5UgCuTsVFRVs2LCBXr16xf08DbmIpKjKykry8vIU5hFkZuTl5R32X18KdJEUpjCPrsb8blMv0LesgLl3wJ4dYVciItKipF6gf/UpvPtgEOwiIlIj9QK9sDi43rw03DpEJCVdddVVTJ06NewykiL1Av2IbpDbETYvC7sSEZEWJfUOWzQLeulbPgq7EpEW485Zy1nxr+0J3WfRUUcw8Yf9G2w3evRo1q9fT2VlJRMmTODAgQOsWbOG3/72twA88cQTlJWV8fDDD/PrX/+aZ555hvz8fHr06MGQIUO4+eab693vpEmTeOSRR8jKyqKoqIjnn3+eiooKLrvsMjZu3Mgpp5zC3Llz+eCDD+jSpUu9+3jqqae47777MDNKSkp4+umnAZg/fz73338/mzdv5t5772Xs2LH1Pn/evHlMnDiRjh07smzZMi655BKKi4t58MEH2b17NzNmzOC4446jvLyca6+9ls8++wyABx54gGHDhvH+++8zYcIEKisrad26NY8//jh9+vThiSeeYObMmezatYs1a9YwZswY7r333gZ/1g1JvUCHINDLHocD+yEjM+xqRNLaY489RufOndm9ezcnnXQSb7zxBsOGDasJ9BdeeIHbb7+dhQsXMm3aNJYsWcK+ffsYPHgwQ4YMOeR+7777btauXUtOTg5fffUVAHfeeSennXYad9xxB7Nnz2bKlCmHfP7y5cv5zW9+w9/+9je6dOnC1q1ba7Zt2rSJd955h1WrVnHhhRceMtABlixZwsqVK+ncuTPHHnss11xzDe+//z4PPvggDz30EA888AATJkzgZz/7GaeddhqfffYZ5513HitXrqRv3768/fbbZGVl8frrr3Pbbbcxbdo0ABYvXsyHH35ITk4Offr04ac//Sk9evQ4nB/9t6RuoFfthoo1kH9C2NWIhC6ennSyTJo0iZdffhmA9evXs3btWo499lgWLFhA7969WbVqFcOGDePBBx9k1KhR5Obmkpubyw9/+MPv3G9JSQmXX345o0ePZvTo0UDQs54+fToAF1xwAZ06dTrk8998800uvvjimt57586da7aNHj2ajIwMioqK2LJly3fWcdJJJ9G1a1cAjjvuOM4991wAiouLeeuttwB4/fXXWbHimwM1tm/fzs6dO9m2bRtXXnkln3zyCWbGvn37atqcffbZdOjQAYCioiI+/fTTNA30ggHB9ealCnSREM2bN4/XX3+dv//977Rp04YzzjiDyspKxo0bx4svvkjfvn0ZM2ZMo46pnj17NvPnz2fWrFncddddLFuWuHmznJycmtvuHnfbjIyMmvsZGRlUVVUBcODAARYsWEBubu5Bz73hhhs488wzefnll1m3bh1nnHFGvfvNzMys2VdTpN6kKEB+X8jI1ji6SMi2bdtGp06daNOmDatWrWLBggUAjBkzhldeeYXnnnuOcePGATBs2DBmzZpFZWUlO3fu5NVXXz3kfg8cOMD69es588wzueeee9i2bRs7d+5k+PDhPPvsswDMmTOHL7/88pD7OOuss3jppZeoqKgAOGjIJdHOPfdcHnrooZr7ixcvBoKfT7du3YBgLiHZUjPQs1pBfh8d6SISshEjRlBVVUW/fv249dZbOfnkkwHo1KkT/fr149NPP2Xo0KFAMHRx4YUXUlJSwvnnn09xcXHNkENd+/fv58c//jHFxcUMGjSIG2+8kY4dOzJx4kTmz59P//79mT59OkcfffQha+vfvz+33347p59+OieeeCI///nPE/8DiJk0aRJlZWWUlJRQVFTEI488AsAtt9zCL3/5SwYNGpSQHnhDrKE/N5KltLTUm3TGopevhTVvwc0fJ64okRSycuVK+vXrF3YZh2Xn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\n", | |
"text/plain": "<Figure size 432x288 with 1 Axes>" | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": false | |
}, | |
"id": "radical-wholesale", | |
"cell_type": "code", | |
"source": "model = timm.create_model('nfnet_f0')\nstats = extract_spp_stats(model, layer_name='stages', layer_type='conv3', hook_fns=[avg_ch_var])\nplt.plot(stats['avg_ch_var'], label='avg_ch_var');\nplt.legend();", | |
"execution_count": 13, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAS6UlEQVR4nO3df5CU9X3A8fenh5GABAGJUU8LqUwFK4myEpOzxolGcaoiLVMxaUsy6TDJaGuSZiypMzVqMqOJjdHRZoaoldFEIRojatUiCdMZRy0H5oegVhQNh6gErUr01JNP/7hH5rwccne7x+b4vl8zzO3z7Hf3Pns69759nt27yEwkSeX6o2YPIElqLkMgSYUzBJJUOEMgSYUzBJJUuBHNHmAw9ttvv5w0aVKzx5CkYWX16tW/zcyJvfcPyxBMmjSJ9vb2Zo8hScNKRDzT134PDUlS4QyBJBXOEEhS4YblOQJJw8tbb71FR0cHnZ2dzR6lCCNHjqS1tZW99tqrX+sNgaQh19HRwZgxY5g0aRIR0exx9miZydatW+no6GDy5Mn9uo2HhiQNuc7OTiZMmGAEdoOIYMKECQN69mUIJO0WRmD3GejX2hBIUuEMgSQVzhBI0hBYuXIlp556arPH6BdDIEnD3Ntvv13X7X35qKTd6sI71rLu2Vcaep/TDvwAF5x2+C7XnXHGGWzcuJHOzk7OPfdctm/fzpNPPsl3vvMdAK6//nra29u56qqruPjii7nxxhuZOHEiBx98MDNmzOBrX/tan/e7fv16vvjFL7JlyxZaWlr48Y9/DMC2bduYO3cujzzyCDNmzODGG2/s80TuPffcw7XXXrvjditXruSyyy7jzjvv5Etf+hKrVq3i9ddfZ+7cuVx44YVA9+9cO/PMM1m+fDnnnXce8+bNG9TXDgyBpIJcd911jB8/ntdff52jjz6aFStW0NbWtiMES5Ys4fzzz2fVqlXceuut/PKXv+Stt97iqKOOYsaMGTu9389+9rMsXLiQOXPm0NnZyfbt29m4cSMPP/wwa9eu5cADD6StrY3777+fY4899vduf+KJJ7JgwQJ+97vfMXr0aJYsWbLjG/u3vvUtxo8fz9tvv80JJ5zAr371K6ZPnw7AhAkTWLNmTd1fF0Mgabfqz0/uQ+XKK6/ktttuA2Djxo1s2LCBD3/4wzz44INMmTKFxx57jLa2Nq644gpmz57NyJEjGTlyJKeddtpO7/PVV19l06ZNzJkzB+h+V+87Zs6cSWtrKwAf/ehHefrpp/sMwYgRI5g1axZ33HEHc+fO5a677uLb3/42AEuXLmXRokV0dXWxefNm1q1btyMEZ555ZkO+LoZAUhFWrlzJfffdxwMPPMCoUaM4/vjj6ezsZN68eSxdupTDDjuMOXPmNPT9DnvvvfeOyy0tLXR1de107bx587jqqqsYP348tVqNMWPGsGHDBi677DJWrVrFuHHj+NznPveuN4qNHj26IXN6slhSEV5++WXGjRvHqFGjeOyxx3jwwQcBmDNnDrfffjs33XTTjsMxbW1t3HHHHXR2drJt2zbuvPPOnd7vmDFjaG1t5ac//SkAb7zxBq+99tqA5/vkJz/JmjVr+MEPfrBjjldeeYXRo0czduxYnn/+ee6+++4B329/GAJJRZg1axZdXV1MnTqVhQsXcswxxwAwbtw4pk6dyjPPPMPMmTMBOProozn99NOZPn06p5xyCkcccQRjx47d6X3fcMMNXHnllUyfPp1PfOITPPfccwOer6WlhVNPPZW77757x8tOP/KRj3DkkUdy2GGH8ZnPfIa2trZBPPJdi8wckjseSrVaLf0LZdLw8eijjzJ16tRmjzEg27ZtY5999uG1117juOOOY9GiRRx11FHNHqvf+vqaR8TqzKz1Xus5Aknqw4IFC1i3bh2dnZ3Mnz9/WEVgoAyBJPXhRz/60e/tO/vss7n//vvfte/cc8/l85//fL/vd86cOWzYsOFd+y699FJOPvnkwQ3aAIZA0m6RmcP+N5BeffXVdd/HOy9fHUoDPeTvyWJJQ27kyJFs3bp1wN+gNHDv/GGanu9n2BWfEUgacq2trXR0dLBly5Zmj1KEd/5UZX8ZAklDbq+99ur3n03U7uehIUkqXENCEBGzIuLxiFgfEQv7uH7viFhSXf9QREzqdf0hEbEtIvr+1X6SpCFTdwgiogW4GjgFmAacFRHTei37AvBSZh4KXA5c2uv67wJD895pSdJ7asQzgpnA+sx8KjPfBG4GZvdaMxtYXF2+BTghqteRRcQZwAZgbQNmkSQNUCNCcBCwscd2R7WvzzWZ2QW8DEyIiH2AfwYu3NUniYgFEdEeEe2+8kCSGqfZJ4u/AVyemdt2tTAzF2VmLTNrEydOHPrJJKkQjXj56Cbg4B7brdW+vtZ0RMQIYCywFfgYMDcivg3sC2yPiM7MvKoBc0mS+qERIVgFTImIyXR/w58HfKbXmmXAfOABYC7ws+x+i+Gfv7MgIr4BbDMCkrR71R2CzOyKiHOAe4EW4LrMXBsRFwHtmbkMuBa4ISLWAy/SHQtJ0h8A/x6BJBViZ3+PoNkniyVJTWYIJKlwhkCSCmcIJKlwhkCSCmcIJKlwhkCSCmcIJKlwhkCSCmcIJKlwhkCSCmcIJKlwhkCSCmcIJKlwhkCSCmcIJKlwhkCSCmcIJKlwhkCSCmcIJKlwhkCSCmcIJKlwhkCSCmcIJKlwhkCSCmcIJKlwhkCSCmcIJKlwhkCSCmcIJKlwDQlBRMyKiMcjYn1ELOzj+r0jYkl1/UMRMana/+mIWB0Rv64+fqoR80iS+q/uEEREC3A1cAowDTgrIqb1WvYF4KXMPBS4HLi02v9b4LTMPAKYD9xQ7zySpIFpxDOCmcD6zHwqM98EbgZm91ozG1hcXb4FOCEiIjMfzsxnq/1rgfdHxN4NmEmS1E+NCMFBwMYe2x3Vvj7XZGYX8DIwodeavwLWZOYbDZhJktRPI5o9AEBEHE734aKT3mPNAmABwCGHHLKbJpOkPV8jnhFsAg7usd1a7etzTUSMAMYCW6vtVuA24O8y88mdfZLMXJSZtcysTZw4sQFjS5KgMSFYBUyJiMkR8T5gHrCs15pldJ8MBpgL/CwzMyL2Be4CFmbm/Q2YRZI0QHWHoDrmfw5wL/AosDQz10bERRFxerXsWmBCRKwHvgq88xLTc4BDgX+NiF9U/z5Y70ySpP6LzGz2DANWq9Wyvb292WNI0rASEaszs9Z7v+8slqTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCNSQEETErIh6PiPURsbCP6/eOiCXV9Q9FxKQe13292v94RJzciHkkSf1XdwgiogW4GjgFmAacFRHTei37AvBSZh4KXA5cWt12GjAPOByYBfx7dX+SpN1kRAPuYyawPjOfAoiIm4HZwLoea2YD36gu3wJcFRFR7b85M98ANkTE+ur+HmjAXL/nwjvWsu7ZV4biriVpyE078ANccNrhDb/fRhwaOgjY2GO7o9rX55rM7AJeBib087YARMSCiGiPiPYtW7Y0YGxJEjTmGcFukZmLgEUAtVotB3MfQ1FSSRruGvGMYBNwcI/t1mpfn2siYgQwFtjaz9tKkoZQI0KwCpgSEZMj4n10n/xd1mvNMmB+dXku8LPMzGr/vOpVRZOBKcD/NGAmSVI/1X1oKDO7IuIc4F6gBbguM9dGxEVAe2YuA64FbqhOBr9Idyyo1i2l+8RyF3B2Zr5d70ySpP6L7h/Mh5darZbt7e3NHkOShpWIWJ2Ztd77fWexJBXOEEhS4QyBJBXOEEhS4QyBJBXOEEhS4QyBJBXOEEhS4QyBJBXOEEhS4QyBJBXOEEhS4QyBJBXOEEhS4QyBJBXOEEhS4QyBJBXOEEhS4QyBJBXOEEhS4QyBJBXOEEhS4QyBJBXOEEhS4QyBJBXOEEhS4QyBJBXOEEhS4QyBJBXOEEhS4eoKQUSMj4jlEfFE9XHcTtbNr9Y8ERHzq32jIuKuiHgsItZGxCX1zCJJGpx6nxEsBFZk5hRgRbX9LhExHrgA+BgwE7igRzAuy8zDgCOBtog4pc55JEkDVG8IZgOLq8uLgTP6WHMysDwzX8zMl4DlwKzMfC0zfw6QmW8Ca4DWOueRJA1QvSHYPzM3V5efA/bvY81BwMYe2x3Vvh0iYl/gNLqfVUiSdqMRu1oQEfcBH+rjqvN7bmRmRkQOdICIGAHcBFyZmU+9x7oFwAKAQw45ZKCfRpK0E7sMQWaeuLPrIuL5iDggMzdHxAHAC30s2wQc32O7FVjZY3sR8ERmfm8Xcyyq1lKr1QYcHElS3+o9NLQMmF9dng/c3seae4GTImJcdZL4pGofEfFNYCzw5TrnkCQNUr0huAT4dEQ8AZxYbRMRtYi4BiAzXwQuBlZV/y7KzBcjopXuw0vTgDUR8YuI+Ps655EkDVBkDr+jLLVaLdvb25s9hiQNKxGxOjNrvff7zmJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKpwhkKTCGQJJKlxdIYiI8RGxPCKeqD6O28m6+dWaJyJifh/XL4uIR+qZRZI0OPU+I1gIrMjMKcCKavtdImI8cAHwMWAmcEHPYETEXwLb6pxDkjRI9YZgNrC4urwYOKOPNScDyzPzxcx8CVgOzAKIiH2ArwLfrHMOSdIg1RuC/TNzc3X5OWD/PtYcBGzssd1R7QO4GPg34LVdfaKIWBAR7RHRvmXLljpGliT1NGJXCyLiPuBDfVx1fs+NzMyIyP5+4oj4KPAnmfmViJi0q/WZuQhYBFCr1fr9eSRJ722XIcjME3d2XUQ8HxEHZObmiDgAeKGPZZuA43tstwIrgY8DtYh4uprjgxGxMjOPR5K029R7aGgZ8M6rgOYDt/ex5l7gpIgYV50kPgm4NzO/n5kHZuYk4Fjgf42AJO1+9YbgEuDTEfEEcGK1TUTUIuIagMx8ke5zAauqfxdV+yRJfwAic/gdbq/Vatne3t7sMSRpWImI1ZlZ673fdxZLUuEMgSQVzhBIUuEMgSQVzhBIUuEMgSQVzhBIUuEMgSQVzhBIUuEMgSQVzhBIUuEMgSQVzhBIUuEMgSQVzhBIUuEMgSQVzhBIUuEMgSQVzhBIUuEMgSQVzhBIUuEMgSQVzhBIUuEMgSQVLjKz2TMMWERsAZ4Z5M33A37bwHH+kOzJjw327MfnYxu+htPj++PMnNh757AMQT0ioj0za82eYyjsyY8N9uzH52MbvvaEx+ehIUkqnCGQpMKVGIJFzR5gCO3Jjw327MfnYxu+hv3jK+4cgSTp3Up8RiBJ6sEQSFLhiglBRMyKiMcjYn1ELGz2PI0UEQdHxM8jYl1ErI2Ic5s9U6NFREtEPBwRdzZ7lkaKiH0j4paIeCwiHo2Ijzd7pkaKiK9U/08+EhE3RcTIZs80WBFxXUS8EBGP9Ng3PiKWR8QT1cdxzZxxsIoIQUS0AFcDpwDTgLMiYlpzp2qoLuCfMnMacAxw9h72+ADOBR5t9hBD4Argnsw8DPgIe9BjjIiDgH8Eapn5Z0ALMK+5U9XlemBWr30LgRWZOQVYUW0PO0WEAJgJrM/MpzLzTeBmYHaTZ2qYzNycmWuqy6/S/c3koOZO1TgR0Qr8BXBNs2dppIgYCxwHXAuQmW9m5v81dajGGwG8PyJGAKOAZ5s8z6Bl5n8DL/baPRtYXF1eDJyxO2dqlFJCcBCwscd2B3vQN8qeImIScCTwUJNHaaTvAecB25s8R6NNBrYA/1Ed9romIkY3e6hGycxNwGXAb4DNwMuZ+V/Nnarh9s/MzdXl54D9mznMYJUSgiJExD7ArcCXM/OVZs/TCBFxKvBCZq5u9ixDYARwFPD9zDwS+B3D9NBCX6rj5bPpDt6BwOiI+JvmTjV0svu1+MPy9filhGATcHCP7dZq3x4jIvaiOwI/zMyfNHueBmoDTo+Ip+k+pPepiLixuSM1TAfQkZnvPHu7he4w7ClOBDZk5pbMfAv4CfCJJs/UaM9HxAEA1ccXmjzPoJQSglXAlIiYHBHvo/uE1bImz9QwERF0H2d+NDO/2+x5Gikzv56ZrZk5ie7/bj/LzD3ip8rMfA7YGBF/Wu06AVjXxJEa7TfAMRExqvp/9AT2oJPhlWXA/OryfOD2Js4yaCOaPcDukJldEXEOcC/dr1y4LjPXNnmsRmoD/hb4dUT8otr3L5n5n80bSf30D8APqx9QngI+3+R5GiYzH4qIW4A1dL+y7WGG8a9jiIibgOOB/SKiA7gAuARYGhFfoPtX4/918yYcPH/FhCQVrpRDQ5KknTAEklQ4QyBJhTMEklQ4QyBJhTMEklQ4QyBJhft/uvsB3H6DJ9AAAAAASUVORK5CYII=\n", | |
"text/plain": "<Figure size 432x288 with 1 Axes>" | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"gradient": {}, | |
"trusted": false | |
}, | |
"id": "cultural-hygiene", | |
"cell_type": "code", | |
"source": "model = torchvision.models.resnet50()\nstats = extract_spp_stats(model, pat='layer?.?', hook_fns=[avg_sq_ch_mean, avg_ch_var])\nplt.plot(stats['avg_sq_ch_mean'], label='avg_sq_ch_mean');\nplt.plot(stats['avg_ch_var'], label='avg_ch_var');\nplt.legend();", | |
"execution_count": 17, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": "<Figure size 432x288 with 1 Axes>" | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": false | |
}, | |
"id": "underlying-marshall", | |
"cell_type": "code", | |
"source": "model = torchvision.models.resnet50()\nstats = extract_spp_stats(model, pat='layer?.?.conv3', hook_fns=[avg_ch_var])\nplt.plot(stats['avg_ch_var'], label='avg_ch_var');\nplt.legend();", | |
"execution_count": 19, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": "<Figure size 432x288 with 1 Axes>" | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": false | |
}, | |
"id": "julian-empty", | |
"cell_type": "code", | |
"source": "model = timm.create_model('resnet50')", | |
"execution_count": 4, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"trusted": false | |
}, | |
"id": "japanese-denmark", | |
"cell_type": "code", | |
"source": "import fnmatch\np = ['layer?.?', 'layer?.?.conv3']\nfor n,m in model.named_modules():\n if any([fnmatch.fnmatch(n, pt) for pt in p]):\n print(n)", | |
"execution_count": 6, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": "layer1.0\nlayer1.0.conv3\nlayer1.1\nlayer1.1.conv3\nlayer1.2\nlayer1.2.conv3\nlayer2.0\nlayer2.0.conv3\nlayer2.1\nlayer2.1.conv3\nlayer2.2\nlayer2.2.conv3\nlayer2.3\nlayer2.3.conv3\nlayer3.0\nlayer3.0.conv3\nlayer3.1\nlayer3.1.conv3\nlayer3.2\nlayer3.2.conv3\nlayer3.3\nlayer3.3.conv3\nlayer3.4\nlayer3.4.conv3\nlayer3.5\nlayer3.5.conv3\nlayer4.0\nlayer4.0.conv3\nlayer4.1\nlayer4.1.conv3\nlayer4.2\nlayer4.2.conv3\n" | |
} | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3", | |
"language": "python" | |
}, | |
"language_info": { | |
"name": "python", | |
"version": "3.8.5", | |
"mimetype": "text/x-python", | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"pygments_lexer": "ipython3", | |
"nbconvert_exporter": "python", | |
"file_extension": ".py" | |
}, | |
"gist": { | |
"id": "", | |
"data": { | |
"description": "Downloads/Timm_revised.ipynb", | |
"public": true | |
} | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment