{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Diffusion Simulation on PyTorch\n", "\n", "\n", "Copyright (c) 2018 Lirimy \n", "Released under the MIT license \n", "http://opensource.org/licenses/mit-license.php" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", "from matplotlib.animation import FuncAnimation\n", "%matplotlib inline\n", "from IPython.display import HTML\n", "\n", "import torch\n", "import torch.nn as nn\n", "from torch.autograd import Variable\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "#dtype = torch.FloatTensor # CPU\n", "dtype = torch.cuda.FloatTensor # GPU" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "class Net(nn.Module):\n", " \n", " def __init__(self, sigma=3.):\n", " super(Net, self).__init__()\n", " \n", " self.setSigma(sigma)\n", " self.setGrid(np.random.randn(60,80))\n", " \n", " def setSigma(self, sigma=3.):\n", " \"\"\"\n", " set sigma and automatically generate transpose tensor\n", " sigma: float-like (default: 3.)\n", " \"\"\"\n", " self.sigma=sigma\n", " m = int(min(64-1, max(1, 2*sigma)))\n", " self.m = m\n", " ruler = np.linspace(-m, m, num=2*m+1, endpoint=True)\n", " X1, X2 = np.meshgrid(ruler, ruler)\n", " dist = np.exp(-(X1*X1+X2*X2)/(2*sigma*sigma))\n", " dist = dist / dist.sum()\n", "\n", " self.conv = nn.Conv2d(1, 1, 2*m+1, padding=m, bias=False)\n", " self.conv.weight = nn.Parameter(torch.Tensor([[dist]]).type(dtype),\n", " requires_grad=False)\n", " \n", " def getSigma(self):\n", " \"\"\"\n", " get sigma\n", " return: float-like\n", " \"\"\"\n", " return self.sigma\n", " \n", " def getWeight(self):\n", " \"\"\"\n", " get transpose matrix\n", " return: Numpy 2-D Array\n", " \"\"\"\n", " return self.conv.weight.data.cpu().numpy()[0, 0]\n", " \n", " def setGrid(self, x):\n", " \"\"\"\n", " set grid value\n", " x: Numpy 2-D Array\n", " \"\"\"\n", " self.gridMin = min(0, x.min())\n", " self.gridMax = max(0, x.max())\n", " self.grid = Variable(torch.Tensor([[x]]).type(dtype),\n", " requires_grad=False)\n", " \n", " def getGrid(self):\n", " \"\"\"\n", " get grid value\n", " return: Numpy 2-D Array\n", " \"\"\"\n", " return self.grid.data.cpu().numpy()[0, 0]\n", " \n", " def step(self):\n", " \"\"\"\n", " update grid by convolution of weight\n", " \"\"\"\n", " self.grid = self.conv(self.grid)\n", " \n", " def showGrid(self, autoscale=False, colorbar=True, nocbtick=False,\n", " notick=True):\n", " \"\"\"\n", " show grid\n", " return: matplotlib object\n", " \"\"\"\n", " fig, ax = plt.subplots()\n", " self.fig = fig\n", " self.ax = ax\n", " \n", " if autoscale:\n", " im = ax.pcolormesh(self.getGrid())\n", " else:\n", " im = ax.pcolormesh(self.getGrid(),\n", " vmin=self.gridMin, vmax=self.gridMax)\n", " \n", " ax.axis(\"image\")\n", " divider = make_axes_locatable(ax)\n", " cax = divider.append_axes(\"right\", size=\"3%\", pad=\"3%\")\n", " fig.tight_layout()\n", " \n", " if colorbar:\n", " if nocbtick:\n", " fig.colorbar(im, cax=cax).ax.tick_params(\\\n", " labelright='off', right='off')\n", " else:\n", " fig.colorbar(im, cax=cax)\n", " \n", " if notick:\n", " ax.tick_params(labelbottom='off', labelleft='off')\n", " ax.tick_params(bottom='off', left='off')\n", " \n", " self.im = im\n", " return im\n", " \n", " def updateAnim(self, frame):\n", " \"\"\"\n", " for FuncAnimation\n", " call showGrid before updateAnim\n", " \n", " frame: number of frame\n", " return: im\n", " \"\"\"\n", " self.im.set_array(self.getGrid().ravel())\n", " self.step() # This is here (after set_array), to show the first state\n", " return self.im\n", " " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Initialize Grid\n", "\n", "net = Net(3.)\n", "\n", "gridsize = (200, 300)\n", "\n", "ini = np.zeros(gridsize)\n", "ini[:, :gridsize[1]//2] = 1.\n", "\n", "net.setGrid(ini)\n", "\n", "net.showGrid()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Weight\n", "\n", "net.setSigma(3.)\n", "\n", "plt.plot(net.getWeight()[net.m])\n", "plt.legend([\"$\\sigma=$\" + str(net.getSigma())])\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 591 ms, sys: 209 ms, total: 800 ms\n", "Wall time: 695 ms\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%time\n", "\n", "# Diffusion\n", "\n", "numLoop = 100\n", "\n", "for _ in range(numLoop):\n", " net.step()\n", "\n", "net.showGrid(autoscale=True) # Comment-out when benchmark" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "
\n", " \n", "
\n", " \n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Once \n", " Loop \n", " Reflect \n", "
\n", "
\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Animation\n", "\n", "net = Net(10)\n", "\n", "gridsize = (200, 300)\n", "\n", "ini = np.zeros(gridsize)\n", "ini[:, :gridsize[1]//2] = 1.\n", "net.setGrid(ini)\n", "\n", "im = net.showGrid(nocbtick=True)\n", "anim = FuncAnimation(net.fig, net.updateAnim,\n", " blit=False, interval=100, frames=3) #frames=30\n", "\n", "HTML(anim.to_jshtml())\n", "\n", "#anim.save(\"anim.gif\", writer=\"imagemagick\", fps=10)\n", "#anim.save(\"anim.mp4\", writer=\"ffmpeg\", fps=10)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.4" } }, "nbformat": 4, "nbformat_minor": 2 }