{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|hide\n", "#| eval: false\n", "! [ -e /content ] && pip install -Uqq fastai # upgrade fastai on colab" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|default_exp torch_core" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "from __future__ import annotations\n", "from fastai.imports import *\n", "from fastai.torch_imports import *\n", "from packaging.version import parse" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from PIL import Image" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|hide\n", "from nbdev.showdoc import *" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "_all_ = ['progress_bar','master_bar']" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "defaults.benchmark = True" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def setup_cuda(benchmark=defaults.benchmark):\n", " \"Sets the main cuda device and sets `cudnn.benchmark` to `benchmark`\"\n", " if torch.cuda.is_available():\n", " if torch.cuda.current_device()==0:\n", " def_gpu = int(os.environ.get('DEFAULT_GPU') or 0)\n", " if torch.cuda.device_count()>=def_gpu: torch.cuda.set_device(def_gpu)\n", " torch.backends.cudnn.benchmark = benchmark" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Torch Core\n", "\n", "> Basic pytorch functions used in the fastai library" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Arrays and show" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@delegates(plt.subplots, keep=True)\n", "def subplots(\n", " nrows:int=1, # Number of rows in returned axes grid\n", " ncols:int=1, # Number of columns in returned axes grid\n", " figsize:tuple=None, # Width, height in inches of the returned figure\n", " imsize:int=3, # Size (in inches) of images that will be displayed in the returned figure\n", " suptitle:str=None, # Title to be set to returned figure\n", " **kwargs\n", ") -> (plt.Figure, plt.Axes): # Returns both fig and ax as a tuple\n", " \"Returns a figure and set of subplots to display images of `imsize` inches\"\n", " if figsize is None:\n", " h=nrows*imsize if suptitle is None or imsize>2 else nrows*imsize+0.6 #https://github.com/matplotlib/matplotlib/issues/5355\n", " figsize=(ncols*imsize, h)\n", " fig,ax = plt.subplots(nrows, ncols, figsize=figsize, **kwargs)\n", " if suptitle is not None: fig.suptitle(suptitle)\n", " if nrows*ncols==1: ax = array([ax])\n", " return fig,ax" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is used in `get_grid`. `suptitle`, `sharex`, `sharey`, `squeeze`, `subplot_kw` and `gridspec_kw` are all passed down to [plt.subplots](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplots.html#matplotlib-pyplot-subplots)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|hide\n", "_,axs = subplots()\n", "test_eq(axs.shape,[1])\n", "plt.close()\n", "_,axs = subplots(2,3)\n", "test_eq(axs.shape,[2,3])\n", "plt.close()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def _fig_bounds(x):\n", " r = x//32\n", " return min(5, max(1,r))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@delegates(plt.Axes.imshow, keep=True, but=['shape', 'imlim'])\n", "def show_image(im, ax=None, figsize=None, title=None, ctx=None, **kwargs):\n", " \"Show a PIL or PyTorch image on `ax`.\"\n", " # Handle pytorch axis order\n", " if hasattrs(im, ('data','cpu','permute')):\n", " im = im.data.cpu()\n", " if im.shape[0]<5: im=im.permute(1,2,0)\n", " elif not isinstance(im,np.ndarray): im=array(im)\n", " # Handle 1-channel images\n", " if im.shape[-1]==1: im=im[...,0]\n", "\n", " ax = ifnone(ax,ctx)\n", " if figsize is None: figsize = (_fig_bounds(im.shape[0]), _fig_bounds(im.shape[1]))\n", " if ax is None: _,ax = plt.subplots(figsize=figsize)\n", " ax.imshow(im, **kwargs)\n", " if title is not None: ax.set_title(title)\n", " ax.axis('off')\n", " return ax" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`show_image` can show PIL images..." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "im = Image.open(TEST_IMAGE_BW)\n", "ax = show_image(im, cmap=\"Greys\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "...and color images with standard `CHW` dim order..." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "im2 = np.array(Image.open(TEST_IMAGE))\n", "ax = show_image(im2, figsize=(2,2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "...and color images with `HWC` dim order..." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "im3 = torch.as_tensor(im2).permute(2,0,1)\n", "ax = show_image(im3, figsize=(2,2))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@delegates(show_image, keep=True)\n", "def show_titled_image(o, **kwargs):\n", " \"Call `show_image` destructuring `o` to `(img,title)`\"\n", " show_image(o[0], title=str(o[1]), **kwargs)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_titled_image((im3,'A puppy'), figsize=(2,2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Show all images `ims` as subplots with `rows` using `titles`. `suptitle` provides a way to create a figure title for all images. If you use `suptitle`, `constrained_layout` is used unless you set `constrained_layout` to `False`. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@delegates(subplots)\n", "def show_images(ims, nrows=1, ncols=None, titles=None, **kwargs):\n", " \"Show all images `ims` as subplots with `rows` using `titles`.\"\n", " if ncols is None: ncols = int(math.ceil(len(ims)/nrows))\n", " if titles is None: titles = [None]*len(ims)\n", " axs = subplots(nrows, ncols, **kwargs)[1].flat\n", " for im,t,ax in zip(ims, titles, axs): show_image(im, ax=ax, title=t)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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Z2tri5MnT/LKV76Sw8NDAG6//XaEELzlLW+5z/FCCF7/+tff53y33norP/ADP8DW1ha7u7u87nWvw3vPpz71Kb77u7+b2WzGjTfeyBvf+Mb7va62bXnd617HVVddRVVVPP3pT+fDH/7wffb7wAc+wAte8AJ2d3cpy5InPelJ95kz/Ja3vAUhBL/zO7/DK1/5So4fP05d1/eZpjQyMjIy8qUxGuSvId///d/Pox71KH7zN3+T/+l/+p9429vedr+av18qL3rRi3jCE57Ab/7mb/LqV7+af/gP/yE/9mM/xvd+7/fyV//qX+Vd73oXz3rWs/jJn/xJ3vnOd97n+J/+6Z/mtttu41d/9Vf51V/9Ve655x6e8YxncNtttx3tc8stt/Bd3/VdHBwc8E//6T/l3e9+N0984hN58YtffL+Lh1e+8pUYY3jrW9/KO97xDowxX/H9jYyMjHxLk0a+6tx8880JSG984xsv2/6a17wmlWWZYozp85//fALSr/3ar93neCDdfPPN9znfL/3SL1223xOf+MQEpHe+851H25xz6fjx4+mFL3zh0bZbbrklAenJT35yijEebb/99tuTMSa96lWvOtr2bd/2belJT3pScs5d9lzPf/7z06lTp1IIIaWU0q/92q8lIP3QD/3Ql/7CjIyMjIxckdFD/hryghe84LLfv/3bv522bTl79uxXdL7nP//5l/3+mMc8BiHEZfq/Wmse8YhHcMcdd9zn+Je85CWXSRPecMMNPO1pT+OWW24B4LOf/Syf/OQnj4bDe++Pfp73vOdx+vRpPvWpT112zu///u//iu5lZGRkZORyRoP8NWRvb++y34uiAHLx01fC7u7uZb9ba6nrmrIs77O9bdv7HH/VVVfd77YLFy4AcObMGQB+/Md/HGPMZT+XZtSeP3/+suNPnTr1Fd3LyMjIyMjljNOevkFcMqJ/ugjqknH8WnDvvffe77ZLC4djx44B8FM/9VO88IUvvN9zPPrRj77s93EYwMjIyMhXh9Egf4M4efIkZVly6623Xrb93e9+99fsOX/913+d173udUdG9I477uC9730vP/RDPwRkY/vIRz6Sj3zkI/ziL/7i1+w6RkZGRkbuy2iQv0EIIXjZy17Gv/gX/4KbbrqJJzzhCbzvfe/jbW9729fsOc+ePcv3fd/38epXv5rDw0NuvvlmyrLkp37q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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show_images((im,im3),titles=('number','puppy'),suptitle='Number Puppy', imsize=3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`ArrayImage`, `ArrayImageBW` and `ArrayMask` are subclasses of `ndarray` that know how to show themselves." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class ArrayBase(ndarray):\n", " \"An `ndarray` that can modify casting behavior\"\n", " @classmethod\n", " def _before_cast(cls, x): return x if isinstance(x,ndarray) else array(x)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class ArrayImageBase(ArrayBase):\n", " \"Base class for arrays representing images\"\n", " _show_args = {'cmap':'viridis'}\n", " def show(self, ctx=None, **kwargs):\n", " return show_image(self, ctx=ctx, **{**self._show_args, **kwargs})" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class ArrayImage(ArrayImageBase):\n", " \"An array representing an image\"\n", " pass" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class ArrayImageBW(ArrayImage):\n", " \"An array representing an image\"\n", " _show_args = {'cmap':'Greys'}" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class ArrayMask(ArrayImageBase):\n", " \"An array representing an image mask\"\n", " _show_args = {'alpha':0.5, 'cmap':'tab20', 'interpolation':'nearest'}" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "im = Image.open(TEST_IMAGE)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "im_t = cast(im, ArrayImage)\n", "test_eq(type(im_t), ArrayImage)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax = im_t.show(figsize=(2,2))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_fig_exists(ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basics" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@patch\n", "def __array_eq__(self:Tensor,b):\n", " return torch.equal(self,b) if self.dim() else self==b" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def _array2tensor(x, requires_grad=False, pin_memory=False, **kwargs):\n", " if x.dtype==np.uint16: x = x.astype(np.float32)\n", " # windows default numpy int dtype is int32, while torch tensor default int dtype is int64\n", " # https://github.com/numpy/numpy/issues/9464\n", " if sys.platform == \"win32\" and x.dtype==int: x = x.astype(np.int64)\n", " t = torch.as_tensor(x, **kwargs)\n", " t.requires_grad_(requires_grad)\n", " if pin_memory: t.pin_memory()\n", " return t" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@use_kwargs_dict(dtype=None, device=None, requires_grad=False, pin_memory=False)\n", "def tensor(x, *rest, **kwargs):\n", " \"Like `torch.as_tensor`, but handle lists too, and can pass multiple vector elements directly.\"\n", " if len(rest): x = (x,)+rest\n", " # There was a Pytorch bug in dataloader using num_workers>0. Haven't confirmed if fixed\n", " # if isinstance(x, (tuple,list)) and len(x)==0: return tensor(0)\n", " res = (x if isinstance(x, Tensor)\n", " else torch.tensor(x, **kwargs) if isinstance(x, (tuple,list,numbers.Number))\n", " else _array2tensor(x, **kwargs) if isinstance(x, ndarray)\n", " else as_tensor(x.values, **kwargs) if isinstance(x, (pd.Series, pd.DataFrame))\n", "# else as_tensor(array(x, **kwargs)) if hasattr(x, '__array__') or is_iter(x)\n", " else _array2tensor(array(x), **kwargs))\n", " if res.dtype is torch.float64: return res.float()\n", " return res" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_eq(tensor(torch.tensor([1,2,3])), torch.tensor([1,2,3]))\n", "test_eq(tensor(array([1,2,3])), torch.tensor([1,2,3]))\n", "test_eq(tensor(1,2,3), torch.tensor([1,2,3]))\n", "test_eq_type(tensor(1.0), torch.tensor(1.0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`set_seed` is useful for reproducibility between runs. It is important to remember that certain classes such as `Dataloaders` have internal random number generators that is not effected by this function, so this must be run before such objects are created in order to guarantee reproducibility. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def set_seed(s, reproducible=False):\n", " \"Set random seed for `random`, `torch`, and `numpy` (where available)\"\n", " try: torch.manual_seed(s)\n", " except NameError: pass\n", " try: torch.cuda.manual_seed_all(s)\n", " except NameError: pass\n", " try: np.random.seed(s%(2**32-1))\n", " except NameError: pass\n", " random.seed(s)\n", " if reproducible:\n", " torch.backends.cudnn.deterministic = True\n", " torch.backends.cudnn.benchmark = False" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is an example of how `set_seed` can be used to reset the state of random number generators." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a's: 0.154 0.498 0.071\n", "b's: 0.154 0.498 0.071\n" ] } ], "source": [ "set_seed(2*33)\n", "a1 = np.random.random()\n", "a2 = torch.rand(())\n", "a3 = random.random()\n", "set_seed(2*33)\n", "b1 = np.random.random()\n", "b2 = torch.rand(())\n", "b3 = random.random()\n", "print('a\\'s: {0:3.3f} {1:3.3f} {2:3.3f}'.format(a1,a2,a3))\n", "print('b\\'s: {0:3.3f} {1:3.3f} {2:3.3f}'.format(b1,b2,a3))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_eq(a1,b1)\n", "test_eq(a2,b2)\n", "test_eq(a3,b3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`get_random_states` and `set_random_states` are useful for storing a state so you can go back to it later. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def get_random_states():\n", " \"Gets states for `random`, `torch`, and `numpy` random number generators\"\n", " return {'random_state':random.getstate(),\n", " 'numpy_state':np.random.get_state(),\n", " 'torch_state':torch.get_rng_state(),\n", " 'torch_cuda_state':torch.cuda.get_rng_state_all(),\n", " 'torch_deterministic':torch.backends.cudnn.deterministic,\n", " 'torch_benchmark':torch.backends.cudnn.benchmark}" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def set_random_states(random_state,numpy_state,torch_state,torch_cuda_state,torch_deterministic,torch_benchmark):\n", " \"Set states for `random`, `torch`, and `numpy` random number generators\"\n", " random.setstate(random_state)\n", " np.random.set_state(numpy_state)\n", " torch.set_rng_state(torch_state)\n", " torch.cuda.set_rng_state_all(torch_cuda_state)\n", " torch.backends.cudnn.deterministic=torch_deterministic\n", " torch.backends.cudnn.benchmark=torch_benchmark" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below notice that the old values and rewinded values are the same because we were able to return to the previous state. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "olds: 0.435 0.134 0.023\n", "news: 0.246 0.363 0.227\n", "rewinds: 0.435 0.134 0.023\n" ] } ], "source": [ "old_states = get_random_states()\n", "olds = (random.random(),np.random.random(),torch.rand(()))\n", "news = (random.random(),np.random.random(),torch.rand(()))\n", "set_random_states(**old_states)\n", "rewinds = (random.random(),np.random.random(),torch.rand(()))\n", "\n", "print('olds: {0:3.3f} {1:3.3f} {2:3.3f}'.format(*olds))\n", "print('news: {0:3.3f} {1:3.3f} {2:3.3f}'.format(*news))\n", "print('rewinds: {0:3.3f} {1:3.3f} {2:3.3f}'.format(*rewinds))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_ne(olds,news)\n", "test_eq(olds,rewinds)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In `no_random` we combine the ideas of rewinding state with `get_random_states` and `set_random_states` with the ability to `set_seed` and create a context manager that can allow us to control randomness in a portion of our code. \n", "\n", "Note: Similar to `torch.random.fork_rng`, but also with `numpy` and `random`" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@contextmanager\n", "def no_random(seed=42,reproducible=True):\n", " \"Stores and retrieves state of random number generators. Sets random seed for `random`, `torch`, and `numpy`.\"\n", " states = get_random_states()\n", " set_seed(seed,reproducible=reproducible)\n", " try:\n", " yield #we are managing global variables\n", " finally:\n", " set_random_states(**states)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are some examples on how we can use `no_random` to control the randomness within a block of code. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "olds: 0.246 0.363 0.227\n", "new1: 0.639 0.375 0.882\n", "new2: 0.639 0.375 0.882\n", "seeded1: 0.146 0.543 0.112\n", "seeded2: 0.146 0.543 0.112\n", "rewinds: 0.246 0.363 0.227\n" ] } ], "source": [ "states=get_random_states()\n", "olds = (random.random(),np.random.random(),torch.rand(()))\n", "set_random_states(**states) #rewinding above random calls\n", "\n", "with no_random():\n", " new1 = (random.random(),np.random.random(),torch.rand(()))\n", "with no_random():\n", " new2 = (random.random(),np.random.random(),torch.rand(()))\n", "with no_random(seed=100):\n", " seeded1 = (random.random(),np.random.random(),torch.rand(()))\n", "with no_random(seed=100):\n", " seeded2 = (random.random(),np.random.random(),torch.rand(()))\n", " \n", "rewinds = (random.random(),np.random.random(),torch.rand(()))\n", "\n", "print('olds: {0:3.3f} {1:3.3f} {2:3.3f}'.format(*olds))\n", "print('new1: {0:3.3f} {1:3.3f} {2:3.3f}'.format(*new1))\n", "print('new2: {0:3.3f} {1:3.3f} {2:3.3f}'.format(*new2))\n", "print('seeded1: {0:3.3f} {1:3.3f} {2:3.3f}'.format(*seeded1))\n", "print('seeded2: {0:3.3f} {1:3.3f} {2:3.3f}'.format(*seeded2))\n", "print('rewinds: {0:3.3f} {1:3.3f} {2:3.3f}'.format(*rewinds))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that olds, and rewinds are alos both equal to each other. From this we can see that everything in the `with` blocks did not update the state outside of the block. Inside of the block, the state is reset for any particular seed, so for the same seed you should get the same random number generator results. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: It is important to remember that classes like `Dataloader` have internal random number generators, and `no_random` will have no effect on those random number generators." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_ne(olds,new1)\n", "test_eq(new1,new2)\n", "test_ne(new1,seeded1)\n", "test_eq(seeded1,seeded2)\n", "test_eq(olds,rewinds)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def unsqueeze(x, dim=-1, n=1):\n", " \"Same as `torch.unsqueeze` but can add `n` dims\"\n", " for _ in range(n): x = x.unsqueeze(dim)\n", " return x" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t = tensor([1])\n", "t2 = unsqueeze(t, n=2)\n", "test_eq(t2,t[:,None,None])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def unsqueeze_(x, dim=-1, n=1):\n", " \"Same as `torch.unsqueeze_` but can add `n` dims\"\n", " for _ in range(n): x.unsqueeze_(dim)\n", " return x" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t = tensor([1])\n", "unsqueeze_(t, n=2)\n", "test_eq(t, tensor([1]).view(1,1,1))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def _fa_rebuild_tensor (cls, *args, **kwargs): return cls(torch._utils._rebuild_tensor_v2(*args, **kwargs))\n", "def _fa_rebuild_qtensor(cls, *args, **kwargs): return cls(torch._utils._rebuild_qtensor (*args, **kwargs))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def apply(func, x, *args, **kwargs):\n", " \"Apply `func` recursively to `x`, passing on args\"\n", " if is_listy(x): return type(x)([apply(func, o, *args, **kwargs) for o in x])\n", " if isinstance(x,(dict,MutableMapping)): return {k: apply(func, v, *args, **kwargs) for k,v in x.items()}\n", " res = func(x, *args, **kwargs)\n", " return res if x is None else retain_type(res, x)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def maybe_gather(x, axis=0):\n", " \"Gather copies of `x` on `axis` (if training is distributed)\"\n", " if num_distrib()<=1: return x\n", " ndim = x.ndim\n", " res = [x.new_zeros(*x.shape if ndim > 0 else (1,)) for _ in range(num_distrib())]\n", " torch.distributed.all_gather(res, x.contiguous() if ndim > 0 else x[None])\n", " return torch.cat(res, dim=axis) if ndim > 0 else torch.cat(res, dim=axis).mean()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def to_detach(b, cpu=True, gather=True):\n", " \"Recursively detach lists of tensors in `b `; put them on the CPU if `cpu=True`.\"\n", " def _inner(x, cpu=True, gather=True):\n", " if not isinstance(x,Tensor): return x\n", " x = x.detach()\n", " if gather: x = maybe_gather(x)\n", " return x.cpu() if cpu else x\n", " return apply(_inner, b, cpu=cpu, gather=gather)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`gather` only applies during distributed training and the result tensor will be the one gathered across processes if `gather=True` (as a result, the batch size will be multiplied by the number of processes)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def to_half(b):\n", " \"Recursively map floating point tensors in `b ` to FP16.\"\n", " return apply(lambda x: x.half() if torch.is_floating_point(x) else x, b)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def to_float(b):\n", " \"Recursively map floating point tensors in `b ` to float.\"\n", " return apply(lambda x: x.float() if torch.is_floating_point(x) else x, b)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "# None: True if available; True: error if not available; False: use CPU\n", "defaults.use_cuda = None" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def _has_mps():\n", " if nested_attr(torch, 'backends.mps.is_available', noop)(): return True\n", " return nested_attr(torch, 'backends.mps.is_built', False)()\n", "\n", "def default_device(use=-1):\n", " \"Return or set default device; `use_cuda`: -1 - CUDA/mps if available; True - error if not available; False - CPU\"\n", " if use == -1: use = defaults.use_cuda\n", " else: defaults.use_cuda=use\n", " if use is None:\n", " if torch.cuda.is_available() or _has_mps(): use = True\n", " if use:\n", " if torch.cuda.is_available(): return torch.device(torch.cuda.current_device())\n", " if _has_mps(): return torch.device('mps')\n", " return torch.device('cpu')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|cuda\n", "if torch.cuda.is_available():\n", " _td = torch.device(torch.cuda.current_device())\n", " test_eq(default_device(-1), _td)\n", " test_eq(default_device(True), _td)\n", "else:\n", " test_eq(default_device(False), torch.device('cpu'))\n", "default_device(-1);" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def to_device(b, device=None, non_blocking=False):\n", " \"Recursively put `b` on `device`.\"\n", " if defaults.use_cuda==False: device='cpu'\n", " elif device is None: device=default_device()\n", " def _inner(o):\n", " # ToDo: add TensorDict when released\n", " if isinstance(o,Tensor): return o.to(device, non_blocking=non_blocking)\n", " return o\n", " return apply(_inner, b)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t = to_device((3,(tensor(3),tensor(2))))\n", "t1,(t2,t3) = t" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|cuda\n", "if torch.cuda.is_available():\n", " test_eq_type(t,(3,(tensor(3).cuda(),tensor(2).cuda())))\n", " test_eq(t2.type(), \"torch.cuda.LongTensor\")\n", " test_eq(t3.type(), \"torch.cuda.LongTensor\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def to_cpu(b):\n", " \"Recursively map tensors in `b ` to the cpu.\"\n", " return to_device(b,'cpu')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t3 = to_cpu(t3)\n", "test_eq(t3.type(), \"torch.LongTensor\")\n", "test_eq(t3, 2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def to_np(x):\n", " \"Convert a tensor to a numpy array.\"\n", " return apply(lambda o: o.data.cpu().numpy(), x)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t3 = to_np(t3)\n", "test_eq(type(t3), np.ndarray)\n", "test_eq(t3, 2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def to_concat(xs, dim=0):\n", " \"Concat the element in `xs` (recursively if they are tuples/lists of tensors)\"\n", " if not xs: return xs\n", " if is_listy(xs[0]): return type(xs[0])([to_concat([x[i] for x in xs], dim=dim) for i in range_of(xs[0])])\n", " if isinstance(xs[0],dict): return {k: to_concat([x[k] for x in xs], dim=dim) for k in xs[0].keys()}\n", " #We may receive xs that are not concatenable (inputs of a text classifier for instance),\n", " # in this case we return a big list\n", " try: return retain_type(torch.cat(xs, dim=dim), xs[0])\n", " except: return sum([L(retain_type(o_.index_select(dim, tensor(i)).squeeze(dim), xs[0])\n", " for i in range_of(o_)) for o_ in xs], L())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_eq(to_concat([tensor([1,2]), tensor([3,4])]), tensor([1,2,3,4]))\n", "test_eq(to_concat([tensor([[1,2]]), tensor([[3,4]])], dim=1), tensor([[1,2,3,4]]))\n", "test_eq_type(to_concat([(tensor([1,2]), tensor([3,4])), (tensor([3,4]), tensor([5,6]))]), (tensor([1,2,3,4]), tensor([3,4,5,6])))\n", "test_eq_type(to_concat([[tensor([1,2]), tensor([3,4])], [tensor([3,4]), tensor([5,6])]]), [tensor([1,2,3,4]), tensor([3,4,5,6])])\n", "test_eq_type(to_concat([(tensor([1,2]),), (tensor([3,4]),)]), (tensor([1,2,3,4]),))\n", "\n", "test_eq(to_concat([tensor([[1,2]]), tensor([[3,4], [5,6]])], dim=1), [tensor([1]),tensor([3, 5]),tensor([4, 6])])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_eq(type(to_concat([dict(foo=tensor([1,2]), bar=tensor(3,4))])), dict)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tensor subtypes" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|exporti\n", "# Parsed PyTorch versions for faster version checking\n", "_torch_version = parse(torch.__version__)\n", "_torch_20 = parse('2.0')\n", "_torch_113 = parse('1.13')\n", "_torch_112 = parse('1.12')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@patch\n", "def set_meta(self:Tensor, x, as_copy=False):\n", " \"Set all metadata in `__dict__`\"\n", " if not hasattr(x,'__dict__'): return\n", " # XXX: change to `deepcopy` once PyTorch 1.7.1 is out, and check nb 23 segmentation fit works\n", " self.__dict__ = copy(x.__dict__) if as_copy else x.__dict__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "if not hasattr(torch,'as_subclass'): torch.as_subclass = torch.Tensor.as_subclass" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@patch\n", "def as_subclass(self:Tensor, typ):\n", " \"Cast to `typ` and include `__dict__` and meta\"\n", " return retain_meta(self, torch.as_subclass(self, typ))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`Tensor.set_meta` and `Tensor.as_subclass` work together to maintain `__dict__` after casting." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class _T(Tensor): pass\n", "t = tensor(1.).requires_grad_()\n", "t.img_size = 1\n", "t2 = t.as_subclass(_T)\n", "test_eq(t.img_size, t2.img_size)\n", "test_eq(t2.img_size, 1)\n", "assert(t2.requires_grad_)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def _torch_handled(args, opt, func):\n", " if func not in opt: return False\n", " for oks in opt[func]:\n", " if all(isinstance(arg,ok) for arg,ok in zip(args,oks) if ok): return True" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "# from https://github.com/pytorch/pytorch/blob/13c975684a220ec096216ec6468ccd0dc90ff50a/torch/_tensor.py#L34\n", "def _rebuild_from_type(func, type, args, dict):\n", " ret = func(*args).as_subclass(type)\n", " ret.__dict__ = dict\n", " return ret" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def _find_args(x):\n", " x0 = x[0] if is_listy(x[0]) and x[0] else x\n", " return [a for a in x0 if hasattr(a,'__dict__')]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class TensorBase(Tensor):\n", " \"A `Tensor` which support subclass pickling, and maintains metadata when casting or after methods\"\n", " debug,_opt = False,defaultdict(list)\n", " def __new__(cls, x, **kwargs):\n", " res = cast(tensor(x), cls)\n", " for k,v in kwargs.items(): setattr(res, k, v)\n", " return res\n", "\n", " @classmethod\n", " def _before_cast(cls, x): return tensor(x)\n", " def __repr__(self): return re.sub('tensor', self.__class__.__name__, super().__repr__())\n", "\n", " def __reduce_ex__(self, proto):\n", " if _torch_version >= _torch_20:\n", " return super().__reduce_ex__(proto)\n", " else:\n", " torch.utils.hooks.warn_if_has_hooks(self)\n", " args = (self.storage(), self.storage_offset(), tuple(self.size()), self.stride())\n", " if self.is_quantized: args = args + (self.q_scale(), self.q_zero_point())\n", " args = args + (self.requires_grad, OrderedDict())\n", " f = torch._utils._rebuild_qtensor if self.is_quantized else torch._utils._rebuild_tensor_v2\n", " return (_rebuild_from_type, (f, type(self), args, self.__dict__))\n", "\n", " @classmethod\n", " def register_func(cls, func, *oks): cls._opt[func].append(oks)\n", "\n", " @classmethod\n", " def __torch_function__(cls, func, types, args=(), kwargs=None):\n", " if cls.debug and func.__name__ not in ('__str__','__repr__'): print(func, types, args, kwargs)\n", " if _torch_handled(args, cls._opt, func): types = (torch.Tensor,)\n", " res = super().__torch_function__(func, types, args, ifnone(kwargs, {}))\n", " dict_objs = _find_args(args) if args else _find_args(list(kwargs.values()))\n", " if issubclass(type(res),TensorBase) and dict_objs: res.set_meta(dict_objs[0],as_copy=True)\n", " elif dict_objs and is_listy(res): [r.set_meta(dict_objs[0],as_copy=True) for r in res if issubclass(type(r),TensorBase)]\n", " return res\n", "\n", " def new_tensor(self, size, dtype=None, device=None, requires_grad=False):\n", " cls = type(self)\n", " return self.as_subclass(Tensor).new_tensor(size, dtype=dtype, device=device, requires_grad=requires_grad).as_subclass(cls)\n", "\n", " def new_ones(self, data, dtype=None, device=None, requires_grad=False):\n", " cls = type(self)\n", " return self.as_subclass(Tensor).new_ones(data, dtype=dtype, device=device, requires_grad=requires_grad).as_subclass(cls)\n", "\n", " def new(self, x=None):\n", " cls = type(self)\n", " res = self.as_subclass(Tensor).new() if x is None else self.as_subclass(Tensor).new(x)\n", " return res.as_subclass(cls)\n", "\n", " def requires_grad_(self, requires_grad=True):\n", " # Workaround https://github.com/pytorch/pytorch/issues/50219\n", " self.requires_grad = requires_grad\n", " return self\n", "\n", " def clone(self, *, memory_format=None):\n", " cls = type(self)\n", " return self.as_subclass(Tensor).clone(memory_format=memory_format).as_subclass(cls)\n", "\n", " def new_empty(self, size, *, dtype=None, layout=None, device=None, pin_memory=False, requires_grad=False):\n", " cls = type(self)\n", " if _torch_version < _torch_113 and layout is None:\n", " layout = torch.strided\n", " if _torch_version < _torch_112:\n", " return super().new_empty(size, dtype=dtype, layout=layout, device=device, pin_memory=pin_memory, requires_grad=requires_grad)\n", " return self.as_subclass(Tensor).new_empty(size, dtype=dtype, layout=layout, device=device, pin_memory=pin_memory, requires_grad=requires_grad).as_subclass(cls)\n", "\n", " def new_empty(self, *size, dtype=None, layout=None, device=None, pin_memory=False, requires_grad=False):\n", " cls = type(self)\n", " if _torch_version < _torch_113 and layout is None:\n", " layout = torch.strided\n", " if _torch_version < _torch_112:\n", " return super().new_empty(*size, dtype=dtype, layout=layout, device=device, pin_memory=pin_memory, requires_grad=requires_grad)\n", " return self.as_subclass(Tensor).new_empty(*size, dtype=dtype, layout=layout, device=device, pin_memory=pin_memory, requires_grad=requires_grad).as_subclass(cls)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`TensorBase` hooks into `__torch_function__` to ensure metadata is not lost. To see all functions being called, set `debug`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "TensorBase(0.5000)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = TensorBase(1)\n", "TensorBase.debug=True\n", "1/(a+1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`TensorBase` and its subclasses also allow for passing through metadata size as img_size..." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from torch.utils.data._utils.collate import default_collate" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = TensorBase(1,img_size=(128,128))\n", "test_eq(a.img_size,(128,128))\n", "b = cast(a,TensorBase)\n", "test_eq(b.img_size,(128,128))\n", "test_eq(torch.stack([a,b],0).img_size,(128,128))\n", "\n", "test_eq(default_collate([a,b]).img_size,(128,128))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "_TImage2([2.])" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class _TImage(TensorBase): pass\n", "class _TImage2(_TImage): pass\n", "t1 = _TImage([1.])\n", "t2 = _TImage2([1.])\n", "t2+t1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class _T(TensorBase): pass\n", "\n", "t = _T(range(5))\n", "test_eq(t[0], 0)\n", "test_eq_type(t+1, _T(range(1,6)))\n", "test_eq(repr(t), '_T([0, 1, 2, 3, 4])')\n", "test_eq_type(t[_T([False,False,True,True,True])], _T([2,3,4]))\n", "test_eq_type(t[_T([2,3,4])], _T([2,3,4]))\n", "test_eq(type(pickle.loads(pickle.dumps(t))), _T)\n", "test_eq_type(t.new_ones(1), _T([1]))\n", "test_eq_type(t.new_tensor([1,2]), _T([1,2]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t = tensor([1,2,3])\n", "m = TensorBase([False,True,True])\n", "test_eq(t[m], tensor([2,3]))\n", "t = tensor([[1,2,3],[1,2,3]])\n", "m = cast(tensor([[False,True,True],\n", " [False,True,True]]), TensorBase)\n", "test_eq(t[m], tensor([2,3,2,3]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t = tensor([[1,2,3],[1,2,3]])\n", "t.img_size = 1\n", "t2 = cast(t, TensorBase)\n", "test_eq(t2.img_size, t.img_size)\n", "x = retain_type(tensor([4,5,6]), t2)\n", "test_eq(x.img_size, t.img_size)\n", "t3 = TensorBase([[1,2,3],[1,2,3]], img_size=1)\n", "test_eq(t3.img_size, t.img_size)\n", "t4 = t2+1\n", "t4.img_size = 2\n", "test_eq(t2.img_size, 1)\n", "test_eq(t4.img_size, 2)\n", "# this will fail with `Tensor` but works with `TensorBase`\n", "test_eq(pickle.loads(pickle.dumps(t2)).img_size, t2.img_size)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|hide\n", "# test of https://github.com/pytorch/pytorch/issues/47186\n", "class _T(TensorBase): ...\n", "t = _T([1.])\n", "test_eq_type(t.new([1,2]), _T([1.,2.]))\n", "test_eq_type(t.new(), _T([]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|hide\n", "# test of https://github.com/pytorch/pytorch/issues/50219\n", "x = TensorBase(torch.rand(4,3,16,16))\n", "with torch.no_grad():\n", " y = x.requires_grad_()\n", " assert y.requires_grad and x.requires_grad" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|hide\n", "x = TensorBase(torch.rand(4,3,16,16))\n", "x.test = 'test metadata'\n", "y = deepcopy(x)\n", "assert hasattr(y, 'test') and y.test == x.test" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class TensorImageBase(TensorBase):\n", " _show_args = ArrayImageBase._show_args\n", " def show(self, ctx=None, **kwargs):\n", " return show_image(self, ctx=ctx, **{**self._show_args, **kwargs})" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class TensorImage(TensorImageBase): pass" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class TensorImageBW(TensorImage): _show_args = ArrayImageBW._show_args" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class TensorMask(TensorImageBase):\n", " _show_args = ArrayMask._show_args\n", "\n", " def show(self, ctx=None, **kwargs):\n", " codes = getattr(self, 'codes', None)\n", " if codes is not None: kwargs = merge({'vmin': 0, 'vmax': len(codes)}, kwargs)\n", " return super().show(ctx=ctx, **kwargs)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "for o in Tensor.__getitem__, Tensor.__ne__,Tensor.__eq__,Tensor.add,Tensor.sub,Tensor.mul,Tensor.div,Tensor.__rsub__,Tensor.__radd__,Tensor.matmul,Tensor.bmm:\n", " TensorBase.register_func(o, TensorMask, TensorImageBase)\n", " TensorBase.register_func(o, TensorImageBase, TensorMask)\n", "\n", "TensorMask.register_func(torch.einsum, str, TensorImageBase, TensorMask)\n", "TensorMask.register_func(torch.einsum, str, TensorMask, TensorImageBase)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "im = Image.open(TEST_IMAGE)\n", "im_t = cast(array(im), TensorImage)\n", "test_eq(type(im_t), TensorImage)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "im_t2 = cast(tensor(1), TensorMask)\n", "test_eq(type(im_t2), TensorMask)\n", "test_eq(im_t2, tensor(1))\n", "ax = im_t.show(figsize=(2,2))\n", "_ =(im_t == im_t2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_fig_exists(ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Operations between `TensorMask` and `TensorImageBase` objects return the type of the `TensorImageBase` object:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = TensorMask([1,2])\n", "test_eq_type(TensorImage(1)+a, TensorImage([2,3]))\n", "test_eq_type(1-a, TensorMask([0,-1]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|hide (last test of to_concat)\n", "test_eq_type(to_concat([TensorImage([1,2]), TensorImage([3,4])]), TensorImage([1,2,3,4]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class TensorFlowField(TensorBase): pass\n", "TensorImage.register_func(F.grid_sample, TensorImageBase, TensorFlowField)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t1 = TensorImage([1.]).view(1,1,1,1)\n", "t2 = TensorFlowField([1.,1.]).view(1,1,1,2)\n", "test_eq_type(F.grid_sample(t1, t2), TensorImage([[[[0.25]]]]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export \n", "class TensorCategory(TensorBase): pass\n", "\n", "TensorBase.register_func(Tensor.__getitem__, TensorImageBase, TensorCategory)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tc = TensorCategory([1,2,3])\n", "mask_t = TensorMask([0,2,4,5])\n", "im_t = TensorImage([0,2,4,5])\n", "test_eq(mask_t[tc], tensor([2,4,5]))\n", "test_eq(im_t[tc], tensor([2,4,5]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export \n", "class TensorMultiCategory(TensorCategory): pass" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class TitledTensorScalar(TensorBase):\n", " \"A tensor containing a scalar that has a `show` method\"\n", " def show(self, **kwargs): show_title(self.item(), **kwargs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## L -" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@patch\n", "def tensored(self:L):\n", " \"`mapped(tensor)`\"\n", " return self.map(tensor)\n", "@patch\n", "def stack(self:L, dim=0):\n", " \"Same as `torch.stack`\"\n", " return torch.stack(list(self.tensored()), dim=dim)\n", "@patch\n", "def cat (self:L, dim=0):\n", " \"Same as `torch.cat`\"\n", " return torch.cat (list(self.tensored()), dim=dim)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "---\n", "\n", "#### L.tensored\n", "\n", "> L.tensored ()\n", "\n", "`mapped(tensor)`" ], "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_doc(L.tensored)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are shortcuts for `torch.stack` and `torch.cat` if your `L` contains tensors or something convertible. You can manually convert with `tensored`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t = L(([1,2],[3,4]))\n", "test_eq(t.tensored(), [tensor(1,2),tensor(3,4)])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "---\n", "\n", "#### L.stack\n", "\n", "> L.stack (dim=0)\n", "\n", "Same as `torch.stack`" ], "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_doc(L.stack)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_eq(t.stack(), tensor([[1,2],[3,4]]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "---\n", "\n", "#### L.cat\n", "\n", "> L.cat (dim=0)\n", "\n", "Same as `torch.cat`" ], "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_doc(L.cat)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_eq(t.cat(), tensor([1,2,3,4]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Chunks" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def concat(*ls):\n", " \"Concatenate tensors, arrays, lists, or tuples\"\n", " if not len(ls): return []\n", " it = ls[0]\n", " if isinstance(it,torch.Tensor): res = torch.cat(ls)\n", " elif isinstance(it,ndarray): res = np.concatenate(ls)\n", " else:\n", " res = itertools.chain.from_iterable(map(L,ls))\n", " if isinstance(it,(tuple,list)): res = type(it)(res)\n", " else: res = L(res)\n", " return retain_type(res, it)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a,b,c = [1],[1,2],[1,1,2]\n", "test_eq(concat(a,b), c)\n", "test_eq_type(concat(tuple (a),tuple (b)), tuple (c))\n", "test_eq_type(concat(array (a),array (b)), array (c))\n", "test_eq_type(concat(tensor(a),tensor(b)), tensor(c))\n", "test_eq_type(concat(TensorBase(a),TensorBase(b)), TensorBase(c))\n", "test_eq_type(concat([1,1],1), [1,1,1])\n", "test_eq_type(concat(1,1,1), L(1,1,1))\n", "test_eq_type(concat(L(1,2),1), L(1,2,1))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class Chunks:\n", " \"Slice and int indexing into a list of lists\"\n", " def __init__(self, chunks, lens=None):\n", " self.chunks = chunks\n", " self.lens = L(map(len,self.chunks) if lens is None else lens)\n", " self.cumlens = np.cumsum(0+self.lens)\n", " self.totlen = self.cumlens[-1]\n", "\n", " def __getitem__(self,i):\n", " if isinstance(i,slice): return retain_type(self.getslice(i), old=self.chunks[0])\n", " di,idx = self.doc_idx(i)\n", " return retain_type(self.chunks[di][idx], old=self.chunks[0])\n", "\n", " def getslice(self, i):\n", " st_d,st_i = self.doc_idx(ifnone(i.start,0))\n", " en_d,en_i = self.doc_idx(ifnone(i.stop,self.totlen+1))\n", " res = [self.chunks[st_d][st_i:(en_i if st_d==en_d else sys.maxsize)]]\n", " for b in range(st_d+1,en_d): res.append(self.chunks[b])\n", " if st_d!=en_d and en_d 0: o = t+'\\n'+str(o)\n", " ax.set_title(o, color=color)\n", " elif isinstance(ax, pd.Series):\n", " while label in ax: label += '_'\n", " ax = pd.concat([ax,pd.Series({label: o})])\n", " return ax" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_stdout(lambda: show_title(\"title\"), \"title\")\n", "# ensure that col names are unique when showing to a pandas series\n", "assert show_title(\"title\", ctx=pd.Series(dict(a=1)), label='a').equals(pd.Series(dict(a=1,a_='title')))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class ShowTitle:\n", " \"Base class that adds a simple `show`\"\n", " _show_args = {'label': 'text'}\n", " def show(self, ctx=None, **kwargs):\n", " \"Show self\"\n", " return show_title(str(self), ctx=ctx, **merge(self._show_args, kwargs))\n", "\n", "class TitledInt(Int, ShowTitle):\n", " _show_args = {'label': 'text'}\n", " def show(self, ctx=None, **kwargs):\n", " \"Show self\"\n", " return show_title(str(self), ctx=ctx, **merge(self._show_args, kwargs))\n", "\n", "class TitledFloat(Float, ShowTitle):\n", " _show_args = {'label': 'text'}\n", " def show(self, ctx=None, **kwargs):\n", " \"Show self\"\n", " return show_title(str(self), ctx=ctx, **merge(self._show_args, kwargs))\n", "\n", "class TitledStr(Str, ShowTitle):\n", " _show_args = {'label': 'text'}\n", " def show(self, ctx=None, **kwargs):\n", " \"Show self\"\n", " return show_title(str(self), ctx=ctx, **merge(self._show_args, kwargs))\n", "\n", "class TitledTuple(fastuple, ShowTitle):\n", " _show_args = {'label': 'text'}\n", " def show(self, ctx=None, **kwargs):\n", " \"Show self\"\n", " return show_title(str(self), ctx=ctx, **merge(self._show_args, kwargs))\n", "\n", "add_docs(TitledInt, \"An `int` with `show`\"); add_docs(TitledStr, \"An `str` with `show`\");\n", "add_docs(TitledFloat, \"A `float` with `show`\"); add_docs(TitledTuple, \"A `fastuple` with `show`\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "---\n", "\n", "### TitledInt\n", "\n", "\n", "\n", "An `int` with `show`" ], "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_doc(TitledInt, title_level=3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "---\n", "\n", "### TitledStr\n", "\n", "\n", "\n", "An `str` with `show`" ], "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_doc(TitledStr, title_level=3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "---\n", "\n", "### TitledFloat\n", "\n", "> TitledFloat (x=0)\n", "\n", "A `float` with `show`" ], "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_doc(TitledFloat, title_level=3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_stdout(lambda: TitledStr('s').show(), 's')\n", "test_stdout(lambda: TitledInt(1).show(), '1')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "---\n", "\n", "### TitledTuple\n", "\n", "> TitledTuple (x=None, *rest)\n", "\n", "A `fastuple` with `show`" ], "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_doc(TitledTuple, title_level=3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|hide\n", "df = pd.DataFrame(index = range(1))\n", "row = df.iloc[0]\n", "x = TitledFloat(2.56)\n", "row = x.show(ctx=row, label='lbl')\n", "test_eq(float(row.lbl), 2.56)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@patch\n", "def truncate(self:TitledStr, n):\n", " \"Truncate self to `n`\"\n", " words = self.split(' ')[:n]\n", " return TitledStr(' '.join(words))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Other functions" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "if not hasattr(pd.DataFrame,'_old_init'): pd.DataFrame._old_init = pd.DataFrame.__init__" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@patch\n", "def __init__(self:pd.DataFrame, data=None, index=None, columns=None, dtype=None, copy=None):\n", " if data is not None and isinstance(data, Tensor): data = to_np(data)\n", " self._old_init(data, index=index, columns=columns, dtype=dtype, copy=copy)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def get_empty_df(n):\n", " \"Return `n` empty rows of a dataframe\"\n", " df = pd.DataFrame(index = range(n))\n", " return [df.iloc[i] for i in range(n)]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def display_df(df):\n", " \"Display `df` in a notebook or defaults to print\"\n", " try: from IPython.display import display, HTML\n", " except: return print(df)\n", " display(HTML(df.to_html()))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def get_first(c):\n", " \"Get the first element of c, even if c is a dataframe\"\n", " return getattr(c, 'iloc', c)[0]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def one_param(m):\n", " \"First parameter in `m`\"\n", " return first(m.parameters())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def item_find(x, idx=0):\n", " \"Recursively takes the `idx`-th element of `x`\"\n", " if is_listy(x): return item_find(x[idx])\n", " if isinstance(x,dict):\n", " key = list(x.keys())[idx] if isinstance(idx, int) else idx\n", " return item_find(x[key])\n", " return x" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def find_device(b):\n", " \"Recursively search the device of `b`.\"\n", " return item_find(b).device" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t2 = to_device(tensor(0))\n", "dev = default_device()\n", "test_eq(find_device(t2), dev)\n", "test_eq(find_device([t2,t2]), dev)\n", "test_eq(find_device({'a':t2,'b':t2}), dev)\n", "test_eq(find_device({'a':[[t2],[t2]],'b':t2}), dev)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def find_bs(b):\n", " \"Recursively search the batch size of `b`.\"\n", " res = item_find(b)\n", " if not hasattr(res, \"shape\"): return len(b)\n", " return res.shape[0]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = torch.randn(4,5)\n", "x1 = [1,2,3]\n", "test_eq(find_bs(x1), 3)\n", "test_eq(find_bs(x), 4)\n", "test_eq(find_bs((x,x)), 4)\n", "test_eq(find_bs([x, x]), 4)\n", "test_eq(find_bs({'a':x,'b':x}), 4)\n", "test_eq(find_bs({'a':[[x],[x]],'b':x}), 4)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def np_func(f):\n", " \"Convert a function taking and returning numpy arrays to one taking and returning tensors\"\n", " def _inner(*args, **kwargs):\n", " nargs = [to_np(arg) if isinstance(arg,Tensor) else arg for arg in args]\n", " return tensor(f(*nargs, **kwargs))\n", " functools.update_wrapper(_inner, f)\n", " return _inner" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This decorator is particularly useful for using numpy functions as fastai metrics, for instance:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import f1_score" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "@np_func\n", "def f1(inp,targ): return f1_score(targ, inp)\n", "\n", "a1,a2 = array([0,1,1]),array([1,0,1])\n", "t = f1(tensor(a1),tensor(a2))\n", "test_eq(f1_score(a1,a2), t)\n", "assert isinstance(t,Tensor)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "class Module(nn.Module, metaclass=PrePostInitMeta):\n", " \"Same as `nn.Module`, but no need for subclasses to call `super().__init__`\"\n", " def __pre_init__(self, *args, **kwargs): super().__init__()\n", " def __init__(self): pass" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "---\n", "\n", "### Module\n", "\n", "> Module ()\n", "\n", "Same as `nn.Module`, but no need for subclasses to call `super().__init__`" ], "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "show_doc(Module, title_level=3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([-0.0832], grad_fn=)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class _T(Module):\n", " def __init__(self): self.f = nn.Linear(1,1)\n", " def forward(self,x): return self.f(x)\n", "\n", "t = _T()\n", "t(tensor([1.]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "from torch.nn.parallel import DistributedDataParallel" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def get_model(model):\n", " \"Return the model maybe wrapped inside `model`.\"\n", " return model.module if isinstance(model, (DistributedDataParallel, nn.DataParallel)) else model" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def one_hot(x, c):\n", " \"One-hot encode `x` with `c` classes.\"\n", " res = torch.zeros(c, dtype=torch.uint8)\n", " if isinstance(x, Tensor) and x.numel()>0: res[x] = 1.\n", " else: res[list(L(x, use_list=None))] = 1.\n", " return res" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_eq(one_hot([1,4], 5), tensor(0,1,0,0,1).byte())\n", "test_eq(one_hot(torch.tensor([]), 5), tensor(0,0,0,0,0).byte())\n", "test_eq(one_hot(2, 5), tensor(0,0,1,0,0).byte())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def one_hot_decode(x, vocab=None):\n", " return L(vocab[i] if vocab else i for i,x_ in enumerate(x) if x_==1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_eq(one_hot_decode(tensor(0,1,0,0,1)), [1,4])\n", "test_eq(one_hot_decode(tensor(0,0,0,0,0)), [ ])\n", "test_eq(one_hot_decode(tensor(0,0,1,0,0)), [2 ])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def params(m):\n", " \"Return all parameters of `m`\"\n", " return [p for p in m.parameters()]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def trainable_params(m):\n", " \"Return all trainable parameters of `m`\"\n", " return [p for p in m.parameters() if p.requires_grad]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "m = nn.Linear(4,5)\n", "test_eq(trainable_params(m), [m.weight, m.bias])\n", "m.weight.requires_grad_(False)\n", "test_eq(trainable_params(m), [m.bias])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "norm_types = (nn.BatchNorm1d, nn.BatchNorm2d, nn.BatchNorm3d, nn.InstanceNorm1d, nn.InstanceNorm2d, nn.InstanceNorm3d, nn.LayerNorm)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def norm_bias_params(m, with_bias=True):\n", " \"Return all bias and BatchNorm parameters\"\n", " if isinstance(m, norm_types): return L(m.parameters())\n", " res = L(m.children()).map(norm_bias_params, with_bias=with_bias).concat()\n", " if with_bias and getattr(m, 'bias', None) is not None: res.append(m.bias)\n", " return res" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for norm_func in [nn.BatchNorm1d, partial(nn.InstanceNorm1d, affine=True)]:\n", " model = nn.Sequential(nn.Linear(10,20), norm_func(20), nn.Conv1d(3,4, 3))\n", " test_eq(norm_bias_params(model), [model[0].bias, model[1].weight, model[1].bias, model[2].bias])\n", " model = nn.ModuleList([nn.Linear(10,20, bias=False), nn.Sequential(norm_func(20), nn.Conv1d(3,4,3))])\n", " test_eq(norm_bias_params(model), [model[1][0].weight, model[1][0].bias, model[1][1].bias])\n", " model = nn.ModuleList([nn.Linear(10,20), nn.Sequential(norm_func(20), nn.Conv1d(3,4,3))])\n", " test_eq(norm_bias_params(model, with_bias=False), [model[1][0].weight, model[1][0].bias])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def batch_to_samples(b, max_n=10):\n", " \"'Transposes' a batch to (at most `max_n`) samples\"\n", " if isinstance(b, Tensor): return retain_types(list(b[:max_n]), [b])\n", " else:\n", " res = L(b).map(partial(batch_to_samples,max_n=max_n))\n", " return retain_types(res.zip(), [b])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t = tensor([1,2,3])\n", "test_eq(batch_to_samples([t,t+1], max_n=2), ([1,2],[2,3]))\n", "test_eq(batch_to_samples(tensor([1,2,3]), 10), [1, 2, 3])\n", "test_eq(batch_to_samples([tensor([1,2,3]), tensor([4,5,6])], 10), [(1, 4), (2, 5), (3, 6)])\n", "test_eq(batch_to_samples([tensor([1,2,3]), tensor([4,5,6])], 2), [(1, 4), (2, 5)])\n", "test_eq(batch_to_samples([tensor([1,2,3]), [tensor([4,5,6]),tensor([7,8,9])]], 10), \n", " [(1, (4, 7)), (2, (5, 8)), (3, (6, 9))])\n", "test_eq(batch_to_samples([tensor([1,2,3]), [tensor([4,5,6]),tensor([7,8,9])]], 2), [(1, (4, 7)), (2, (5, 8))])\n", "\n", "t = fastuple(tensor([1,2,3]),TensorBase([2,3,4]))\n", "test_eq_type(batch_to_samples(t)[0][1], TensorBase(2))\n", "test_eq(batch_to_samples(t).map(type), [fastuple]*3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@patch\n", "def interp_1d(x:Tensor, xp, fp):\n", " \"Same as `np.interp`\"\n", " slopes = (fp[1:]-fp[:-1])/(xp[1:]-xp[:-1])\n", " incx = fp[:-1] - (slopes*xp[:-1])\n", " locs = (x[:,None]>=xp[None,:]).long().sum(1)-1\n", " locs = locs.clamp(0,len(slopes)-1)\n", " return slopes[locs]*x + incx[locs]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "brks = tensor(0,1,2,4,8,64).float()\n", "ys = tensor(range_of(brks)).float()\n", "ys /= ys[-1].item()\n", "pts = tensor(0.2,0.5,0.8,3,5,63)\n", "\n", "preds = pts.interp_1d(brks, ys)\n", "test_close(preds.numpy(), np.interp(pts.numpy(), brks.numpy(), ys.numpy()))\n", "\n", "plt.scatter(brks,ys)\n", "plt.scatter(pts,preds)\n", "plt.legend(['breaks','preds']);" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@patch\n", "def pca(x:Tensor, k=2):\n", " \"Compute PCA of `x` with `k` dimensions.\"\n", " x = x-torch.mean(x,0)\n", " U,S,V = torch.svd(x.t())\n", " return torch.mm(x,U[:,:k])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def logit(x):\n", " \"Logit of `x`, clamped to avoid inf.\"\n", " x = x.clamp(1e-7, 1-1e-7)\n", " return -(1/x-1).log()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def num_distrib():\n", " \"Return the number of processes in distributed training (if applicable).\"\n", " return int(os.environ.get('WORLD_SIZE', 0))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def rank_distrib():\n", " \"Return the distributed rank of this process (if applicable).\"\n", " return int(os.environ.get('RANK', 0))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def distrib_barrier():\n", " \"Place a synchronization barrier in distributed training\"\n", " if num_distrib() > 1 and torch.distributed.is_initialized(): torch.distributed.barrier()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After calling this, ALL sub-processes in the pytorch process group must arrive here before proceeding." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "# Saving arrays requires pytables - optional dependency\n", "try: import tables\n", "except: pass" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def _comp_filter(lib='lz4',lvl=3): return tables.Filters(complib=f'blosc:{lib}', complevel=lvl)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@patch\n", "def save_array(p:Path, o, complib='lz4', lvl=3):\n", " \"Save numpy array to a compressed `pytables` file, using compression level `lvl`\"\n", " if isinstance(o,Tensor): o = to_np(o)\n", " with tables.open_file(p, mode='w', filters=_comp_filter(lib=complib,lvl=lvl)) as f: f.create_carray('/', 'data', obj=o)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compression lib can be any of: blosclz, lz4, lz4hc, snappy, zlib or zstd." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "@patch\n", "def load_array(p:Path):\n", " \"Save numpy array to a `pytables` file\"\n", " with tables.open_file(p, 'r') as f: return f.root.data.read()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def base_doc(elt):\n", " \"Print a base documentation of `elt`\"\n", " name = getattr(elt, '__qualname__', getattr(elt, '__name__', ''))\n", " print(f'{name}{inspect.signature(elt)}\\n{inspect.getdoc(elt)}\\n')\n", " print('To get a prettier result with hyperlinks to source code and documentation, install nbdev: pip install nbdev')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def doc(elt):\n", " \"Try to use doc form nbdev and fall back to `base_doc`\"\n", " try:\n", " from nbdev.showdoc import doc\n", " doc(elt)\n", " except: base_doc(elt)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def nested_reorder(t, idxs):\n", " \"Reorder all tensors in `t` using `idxs`\"\n", " if isinstance(t, (Tensor,L)): return t[idxs]\n", " elif is_listy(t): return type(t)(nested_reorder(t_, idxs) for t_ in t)\n", " if t is None: return t\n", " raise TypeError(f\"Expected tensor, tuple, list or L but got {type(t)}\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = tensor([0,1,2,3,4,5])\n", "idxs = tensor([2,5,1,0,3,4])\n", "test_eq_type(nested_reorder(([x], x), idxs), ([idxs], idxs))\n", "\n", "y = L(0,1,2,3,4,5)\n", "z = L(i.item() for i in idxs)\n", "test_eq_type(nested_reorder((y, x), idxs), (z,idxs))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def flatten_check(inp, targ):\n", " \"Check that `inp` and `targ` have the same number of elements and flatten them.\"\n", " inp,targ = TensorBase(inp.contiguous()).view(-1),TensorBase(targ.contiguous()).view(-1)\n", " test_eq(len(inp), len(targ))\n", " return inp,targ" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x1,x2 = torch.randn(5,4),torch.randn(20)\n", "x1,x2 = flatten_check(x1,x2)\n", "test_eq(x1.shape, [20])\n", "test_eq(x2.shape, [20])\n", "x1,x2 = torch.randn(5,4),torch.randn(21)\n", "test_fail(lambda: flatten_check(x1,x2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Image helpers" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def make_cross_image(bw=True):\n", " \"Create a tensor containing a cross image, either `bw` (True) or color\"\n", " if bw:\n", " im = torch.zeros(5,5)\n", " im[2,:] = 1.\n", " im[:,2] = 1.\n", " else:\n", " im = torch.zeros(3,5,5)\n", " im[0,2,:] = 1.\n", " im[1,:,2] = 1.\n", " return im" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.imshow(make_cross_image(), cmap=\"Greys\");" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.imshow(make_cross_image(False).permute(1,2,0));" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def show_image_batch(b, show=show_titled_image, items=9, cols=3, figsize=None, **kwargs):\n", " \"Display batch `b` in a grid of size `items` with `cols` width\"\n", " if items" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "show_image_batch(([Image.open(TEST_IMAGE_BW),Image.open(TEST_IMAGE)],['bw','color']), items=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Model init" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def requires_grad(m):\n", " \"Check if the first parameter of `m` requires grad or not\"\n", " ps = list(m.parameters())\n", " return ps[0].requires_grad if len(ps)>0 else False" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tst = nn.Linear(4,5)\n", "assert requires_grad(tst)\n", "for p in tst.parameters(): p.requires_grad_(False)\n", "assert not requires_grad(tst)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def init_default(m, func=nn.init.kaiming_normal_):\n", " \"Initialize `m` weights with `func` and set `bias` to 0.\"\n", " if func:\n", " if hasattr(m, 'weight'): func(m.weight)\n", " if hasattr(m, 'bias') and hasattr(m.bias, 'data'): m.bias.data.fill_(0.)\n", " return m" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tst = nn.Linear(4,5)\n", "tst.weight.data.uniform_(-1,1)\n", "tst.bias.data.uniform_(-1,1)\n", "tst = init_default(tst, func = lambda x: x.data.fill_(1.))\n", "test_eq(tst.weight, torch.ones(5,4))\n", "test_eq(tst.bias, torch.zeros(5))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def cond_init(m, func):\n", " \"Apply `init_default` to `m` unless it's a batchnorm module\"\n", " if (not isinstance(m, norm_types)) and requires_grad(m): init_default(m, func)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tst = nn.Linear(4,5)\n", "tst.weight.data.uniform_(-1,1)\n", "tst.bias.data.uniform_(-1,1)\n", "cond_init(tst, func = lambda x: x.data.fill_(1.))\n", "test_eq(tst.weight, torch.ones(5,4))\n", "test_eq(tst.bias, torch.zeros(5))\n", "\n", "tst = nn.BatchNorm2d(5)\n", "init = [tst.weight.clone(), tst.bias.clone()]\n", "cond_init(tst, func = lambda x: x.data.fill_(1.))\n", "test_eq(tst.weight, init[0])\n", "test_eq(tst.bias, init[1])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def apply_leaf(m, f):\n", " \"Apply `f` to children of `m`.\"\n", " c = m.children()\n", " if isinstance(m, nn.Module): f(m)\n", " for l in c: apply_leaf(l,f)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tst = nn.Sequential(nn.Linear(4,5), nn.Sequential(nn.Linear(4,5), nn.Linear(4,5)))\n", "apply_leaf(tst, partial(init_default, func=lambda x: x.data.fill_(1.)))\n", "for l in [tst[0], *tst[1]]: test_eq(l.weight, torch.ones(5,4))\n", "for l in [tst[0], *tst[1]]: test_eq(l.bias, torch.zeros(5))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def apply_init(m, func=nn.init.kaiming_normal_):\n", " \"Initialize all non-batchnorm layers of `m` with `func`.\"\n", " apply_leaf(m, partial(cond_init, func=func))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tst = nn.Sequential(nn.Linear(4,5), nn.Sequential(nn.Linear(4,5), nn.BatchNorm1d(5)))\n", "init = [tst[1][1].weight.clone(), tst[1][1].bias.clone()]\n", "apply_init(tst, func=lambda x: x.data.fill_(1.))\n", "for l in [tst[0], tst[1][0]]: test_eq(l.weight, torch.ones(5,4))\n", "for l in [tst[0], tst[1][0]]: test_eq(l.bias, torch.zeros(5))\n", "test_eq(tst[1][1].weight, init[0])\n", "test_eq(tst[1][1].bias, init[1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## autograd jit functions" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def script_use_ctx(f):\n", " \"Decorator: create jit script and pass everything in `ctx.saved_variables to `f`, after `*args`\"\n", " sf = torch.jit.script(f)\n", " def _f(ctx, *args, **kwargs): return sf(*args, *ctx.saved_variables, **kwargs)\n", " return update_wrapper(_f,f)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def script_save_ctx(static, *argidx):\n", " \"Decorator: create jit script and save args with indices `argidx` using `ctx.save_for_backward`\"\n", " def _dec(f):\n", " sf = torch.jit.script(f)\n", " def _f(ctx, *args, **kwargs):\n", " if argidx:\n", " save = [args[o] for o in argidx]\n", " ctx.save_for_backward(*save)\n", " if not argidx: args = [ctx]+args\n", " return sf(*args, **kwargs)\n", " if static: _f = staticmethod(_f)\n", " return update_wrapper(_f,f)\n", " return _dec" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def script_fwd(*argidx):\n", " \"Decorator: create static jit script and save args with indices `argidx` using `ctx.save_for_backward`\"\n", " return script_save_ctx(True, *argidx)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def script_bwd(f):\n", " \"Decorator: create static jit script and pass everything in `ctx.saved_variables to `f`, after `*args`\"\n", " return staticmethod(script_use_ctx(f))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def grad_module(cls):\n", " \"Decorator: convert `cls` into an autograd function\"\n", " class _c(nn.Module):\n", " def forward(self, *args, **kwargs): return cls.apply(*args, **kwargs)\n", " return _c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Torch Version Checks -" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def ismin_torch(min_version):\n", " \"Check if `torch.__version__` >= `min_version` using packaging.version\"\n", " return _torch_version >= parse(min_version)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "def notmax_torch(max_version):\n", " \"Check if `torch.__version__` < `max_version` using packaging.version\"\n", " return _torch_version < parse(max_version)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## PyTorch 1.13 `__format__` workaround -" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|export\n", "# PyTorch 1.13 introduced a Tensor Subclass string formatting bug\n", "# Workaround from pending PyTorch PR: https://github.com/pytorch/pytorch/pull/82766\n", "if ismin_torch('1.13') and notmax_torch('1.14'):\n", " from torch.overrides import has_torch_function_unary, handle_torch_function\n", " @patch\n", " def __format__(self:Tensor, format_spec):\n", " if has_torch_function_unary(self):\n", " return handle_torch_function(Tensor.__format__, (self,), self, format_spec)\n", " if self.dim() == 0 and not self.is_meta and issubclass(type(self), Tensor):\n", " return self.item().__format__(format_spec)\n", " return object.__format__(self, format_spec)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Export -" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#|hide\n", "import nbdev; nbdev.nbdev_export()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "jupytext": { "split_at_heading": true }, "kernelspec": { "display_name": "python3", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 4 }