diff --git a/tensorflow_addons/examples/layers_weightnormalization.ipynb b/tensorflow_addons/examples/layers_weightnormalization.ipynb new file mode 100644 index 0000000000..261bcbc2b5 --- /dev/null +++ b/tensorflow_addons/examples/layers_weightnormalization.ipynb @@ -0,0 +1,333 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "layers_weightnormalization.ipynb", + "version": "0.3.2", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "metadata": { + "colab_type": "text", + "id": "Tce3stUlHN0L" + }, + "cell_type": "markdown", + "source": [ + "##### Copyright 2019 The TensorFlow Authors.\n", + "\n" + ] + }, + { + "metadata": { + "colab_type": "code", + "id": "tuOe1ymfHZPu", + "cellView": "form", + "colab": {} + }, + "cell_type": "code", + "source": [ + "#@title Licensed under the Apache License, Version 2.0\n", + "# you may not use this file except in compliance with the License.\n", + "# You may obtain a copy of the License at\n", + "#\n", + "# https://www.apache.org/licenses/LICENSE-2.0\n", + "#\n", + "# Unless required by applicable law or agreed to in writing, software\n", + "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "# See the License for the specific language governing permissions and\n", + "# limitations under the License." + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "colab_type": "text", + "id": "MfBg1C5NB3X0" + }, + "cell_type": "markdown", + "source": [ + "# TensorFlow Addons Layers: WeightNormalization\n", + "\n", + "\n", + " \n", + " \n", + "
\n", + " Run in Google Colab\n", + " \n", + " View source on GitHub\n", + "
" + ] + }, + { + "metadata": { + "colab_type": "text", + "id": "xHxb-dlhMIzW" + }, + "cell_type": "markdown", + "source": [ + "# Overview\n", + "\n", + "This notebook will demonstrate how to use the Weight Normalization layer and how it can improve convergence.\n" + ] + }, + { + "metadata": { + "id": "KR01t9v_fxbT", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "# WeightNormalization\n", + "\n", + "A Simple Reparameterization to Accelerate Training of Deep Neural Networks:\n", + "\n", + "Tim Salimans, Diederik P. Kingma (2016)\n", + "\n", + "> By reparameterizing the weights in this way we improve the conditioning of the optimization problem and we speed up convergence of stochastic gradient descent. Our reparameterization is inspired by batch normalization but does not introduce any dependencies between the examples in a minibatch. This means that our method can also be applied successfully to recurrent models such as LSTMs and to noise-sensitive applications such as deep reinforcement learning or generative models, for which batch normalization is less well suited. Although our method is much simpler, it still provides much of the speed-up of full batch normalization. In addition, the computational overhead of our method is lower, permitting more optimization steps to be taken in the same amount of time.\n", + "\n", + "> https://arxiv.org/abs/1602.07868 \n", + "\n", + "

\n" + ] + }, + { + "metadata": { + "colab_type": "text", + "id": "MUXex9ctTuDB" + }, + "cell_type": "markdown", + "source": [ + "## Setup" + ] + }, + { + "metadata": { + "colab_type": "code", + "id": "IqR2PQG4ZaZ0", + "colab": {} + }, + "cell_type": "code", + "source": [ + "!pip install tensorflow-gpu==2.0.0.a0\n", + "!pip install tensorflow-addons\n", + "from __future__ import absolute_import, division, print_function, unicode_literals\n", + "\n", + "import tensorflow as tf\n", + "import tensorflow_addons as tfa\n", + "import numpy as np\n", + "from matplotlib import pyplot as plt" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "ULWHqMAnTVZD", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# Hyper Parameters\n", + "batch_size = 32\n", + "epochs = 10\n", + "num_classes=10" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "fhM0ieDpSnKh", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "# Build Models" + ] + }, + { + "metadata": { + "id": "7XZXnBYgRPSk", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# Standard ConvNet\n", + "reg_model = tf.keras.Sequential([\n", + " tf.keras.layers.Conv2D(6, 5, activation='relu'),\n", + " tf.keras.layers.MaxPooling2D(2, 2),\n", + " tf.keras.layers.Conv2D(16, 5, activation='relu'),\n", + " tf.keras.layers.MaxPooling2D(2, 2),\n", + " tf.keras.layers.Flatten(),\n", + " tf.keras.layers.Dense(120, activation='relu'),\n", + " tf.keras.layers.Dense(84, activation='relu'),\n", + " tf.keras.layers.Dense(num_classes, activation='softmax'),\n", + "])" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "UZd6V90eR4Gm", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "# WeightNorm ConvNet\n", + "wn_model = tf.keras.Sequential([\n", + " tfa.layers.WeightNormalization(tf.keras.layers.Conv2D(6, 5, activation='relu')),\n", + " tf.keras.layers.MaxPooling2D(2, 2),\n", + " tfa.layers.WeightNormalization(tf.keras.layers.Conv2D(16, 5, activation='relu')),\n", + " tf.keras.layers.MaxPooling2D(2, 2),\n", + " tf.keras.layers.Flatten(),\n", + " tfa.layers.WeightNormalization(tf.keras.layers.Dense(120, activation='relu')),\n", + " tfa.layers.WeightNormalization(tf.keras.layers.Dense(84, activation='relu')),\n", + " tfa.layers.WeightNormalization(tf.keras.layers.Dense(num_classes, activation='softmax')),\n", + "])" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "AA5dti8AS2Y7", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "# Load Data" + ] + }, + { + "metadata": { + "id": "L8Isjc7W8MEn", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()\n", + "\n", + "# Convert class vectors to binary class matrices.\n", + "y_train = tf.keras.utils.to_categorical(y_train, num_classes)\n", + "y_test = tf.keras.utils.to_categorical(y_test, num_classes)\n", + "\n", + "x_train = x_train.astype('float32')\n", + "x_test = x_test.astype('float32')\n", + "x_train /= 255\n", + "x_test /= 25" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "cH1CG9E7S34C", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "# Train Models" + ] + }, + { + "metadata": { + "id": "EvNKxfaI7vSm", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "reg_model.compile(optimizer='adam', \n", + " loss='categorical_crossentropy',\n", + " metrics=['accuracy'])\n", + "\n", + "reg_history = reg_model.fit(x_train, y_train,\n", + " batch_size=batch_size,\n", + " epochs=epochs,\n", + " validation_data=(x_test, y_test),\n", + " shuffle=True)" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "esmMh-5g7wmp", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "wn_model.compile(optimizer='adam', \n", + " loss='categorical_crossentropy',\n", + " metrics=['accuracy'])\n", + "\n", + "wn_history = wn_model.fit(x_train, y_train,\n", + " batch_size=batch_size,\n", + " epochs=epochs,\n", + " validation_data=(x_test, y_test),\n", + " shuffle=True)" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "yujf2YRbwX55", + "colab_type": "code", + "outputId": "54c4f830-6409-43fb-acd8-2f12f04f8dc8", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 281 + } + }, + "cell_type": "code", + "source": [ + "reg_accuracy = reg_history.history['accuracy']\n", + "wn_accuracy = wn_history.history['accuracy']\n", + "\n", + "plt.plot(np.linspace(0, epochs, epochs), reg_accuracy,\n", + " color='red', label='Regular ConvNet')\n", + "\n", + "plt.plot(np.linspace(0, epochs, epochs), wn_accuracy,\n", + " color='blue', label='WeightNorm ConvNet')\n", + "\n", + "plt.title('WeightNorm Accuracy Comparison')\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.show()" + ], + "execution_count": 0, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEICAYAAACzliQjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xd4VNXWwOHfoqMgVRCBC4gISJFQ\npRelWC6KIALqBSzotSKK93JtfIJiLyCKiIgNBCmKgA0k0quC0puUUJQqzQBJ1vfHPglDTMgMKdPW\n+zzzMHPq3pNhzZ599llbVBVjjDHRIVewC2CMMSbnWNA3xpgoYkHfGGOiiAV9Y4yJIhb0jTEmiljQ\nN8aYKGJBP4KJyAgRecrPbceIyODsLpMxIvIPETkqIrmDXZZoZEE/hIjIABH5OtWyjeks65bR8VT1\nXlUdlEVlUxG51Od1K2/Z26m2mycivbLinOdKRHp5ZbslmOXIbiLSUERmiMghETkgIktEpHewy5UR\nVd2uqoVUNTHYZYlGFvRDyxygSXILSETKAHmBmFTLLvW2DbZjwO0iUjGzBxKRPJkuzWk9gQPAv7Lw\nmH7JqdariDQGfgB+xH0eSgD/Bq7JifOfqyz+O5tzYEE/tCzFBfk63uvmwGxgfaplm1V1F4CIVBOR\n772W3noR6Zp8sNRdNiLyuIjsFpFdInJX6tY7UExEpovIERFZLCKVvf2Sv2BWej/Lk1vQh4AxwDNp\nVUZEconIkyKyTUT+EJGPRKSIt66id/47RWQ78IPPst4iskNEDorIvSLSQER+8Vq0b53tDRSRCkBL\noA/QXkQuSrX+BhFZISKHRWSziHTwlhcXkQ+89+agiHzhLe8lIvNSHSPlffPe43e8FvcxoLWIXCci\nP3vn2CEiA1Pt30xEFnj12eGdo4GI/O77pSEiN4nIynSq+jLwoaq+qKr71Fmuqr5//7tFZJP32Zgq\nIhenqsN93q/GIyIySEQqe+U6LCITRCSft20rEYkTkf+JyD4R2Soit/ocK936ZvB3zuPzHm/xyvFb\n8rH9/Pz0FJHtXrmeOMtHwyRTVXuE0AMX5B/xnr8F3AE8l2rZaO/5+cAOoDeQB4gB9gGXe+vHAIO9\n5x2APUAN4DzgE0CBS3223Q809I71KfCZT7lStvVetwLigIuAw0BVb/k8oJf3/A5gE3AJUAiYDHzs\nravoHfMjrx4FfZaNAAoA7YB44AugFFAW+ANoeZb37ylgiff8V+BRn3UNgT+BtrgGT1mgmrduOjAe\nKIb74m3pLe8FzEt1jtTv259AU++YBbz3ppb3ujbwO3Cjt30F4AjQ3TtPCaCOt24NcI3Peab4lt9n\n+XlAItD6LO9DG++zUBfIDwwD5qSqw5fABd5n4gQwy/tbFfHK0tPnb50AvOYdqyXuV15Vn/Xp1fds\nf+c83jLfz08ZoEYAn5/3vGNe4dWherD/D4f6I+gFsEeqPwgMBKZ4z1cCVXAB23dZT+/5LcDcVPu/\nCzzjPR/D6aA/Ghjis92laQSvUT7rrwXW+bxOM+h7z18CxnvPfYP+LOA+n32qAqe8/+zJ/2kv8Vmf\nvKysz7L9wC0+rycBfc/y/m1MXg8MAFamem9eT2OfMkASUCyNdb3IOOh/lMHf9I3k83plmpLOdv8B\nPvWeFweOA2XS2K6sV4ZqZznn+8BLPq8Lee99RZ86NPVZvxz4j8/rV4E3fP7WCcD5PusnAE/5Ud+z\n/Z2Tg/4hoDNQMNVx/Pn8lPNZvwToltP/Z8PtYd07oWcO0ExEigMXqupGYAGur784UJPT/fkVgEZe\nN8EhETkE3Iprfad2Me5XQbIdaWyzx+f5cVyg8MeLuK6UK9I45zaf19tw/2FLZ1CO332e/5XG6zTL\nJSJNgUrAZ96isUAtEUnuGisPbE5j1/LAAVU9mNZx/XBGHUSkkYjMFpG9IvIncC9QMoMygPv19U8R\nOR/oivtC353GdgdxX1JlzlKmM957VT2K+wIt67NNIO/zQVU95vN6m3eOjOqbLK2/M94xb/H22S2u\ne7FaWnUg7c/PuX5mo5YF/dCzEPfz+m5gPoCqHgZ2ect2qepv3rY7gB9VtajPo5Cq/juN4+4Gyvm8\nLp9VBVbV/bjWXeqRQrtwX0zJ/oFrMfoGl6xM89oTEGCFiOwBFvssB/d+VU5jvx1AcREpmsa6Y7ju\nFABSXyPwpK7DWGAqUF5Vi+C6qySDMqCqO3F//5uA24GP09nuuLdd57TWe854770vkhLAzrPsczbF\nvGMk+4d3Djh7fVOKnd6BVfVbVW2L+xJbh+uy+VsdSPvzYwJkQT/EqOpfwDKgHzDXZ9U8b5nvqJ1p\nwGUicruI5PUeDUSkehqHngD0FpHqInIeru87EL/j+lbT8xrQBPA99zjgERGpJCKFgOdx3UAJAZ47\nQyJSANc67oO76J38eBDo4V00fB/3HlzlXSQsKyLVvNb018DbIlLMex9beIdeCdQQkTreOQb6UZzC\nuF8O8SLSEOjhs+5T4GoR6SoieUSkhM8vEXB934/j+sgnn+UcjwO9RKS/iJTw3oMrRCT5V844r651\nRCQ/7r1frKpb/Sh/ev5PRPKJSHPgeuBzP+p7ViJSWtzF9fNxffJHcb9ikuuQI5+faGJBPzT9iLtw\n6TtqZK63LCXoq+oR3MXObrhW0R5cV0v+1AdU1a+BobgLxZuARd6qE36WaSDwodeN1DX1Su/XyEu4\nvuhko3Gt1TnAb7iLsg/6eb5A3YjrkvhIVfckP7wy5AE6qOoS3EXv13EXX3/kdEvydlx/8TrcxeK+\nXr02AM8CM3HXC84YyZOO+4BnReQI8DTuCxfveNtx10sexQ0rXYG7CJlsilemKV6LPk2qugB3sbYN\nsEVEDgAjgRne+pm4L/ZJuF95lXGfk3O1B9ettAv3xXWvqq7LqL5+yIVrzOzCvR8tcUNPIWc/P1FD\nvAsgJsp4vwZWAfmt5RRaRGQzcI8XuINORFoBn6hquYy2NaHPWvpRREQ6iUh+ESmG+0XwlQX80CIi\nnXH93z8EuywmMlnQjy734LouNuPGead1wdcEiYjEAu8A96tqUgabG3NOrHvHGGOiiLX0jTEmioRc\n8qOSJUtqxYoVz3n/Y8eOcf7552e8YQSJtjpHW33B6hwtMlPn5cuX71PVCzPaLuSCfsWKFVm2bNk5\n7x8bG0urVq2yrkBhINrqHG31BatztMhMnUVkW8ZbWfeOMcZEFQv6xhgTRSzoG2NMFAm5Pv20nDp1\niri4OOLj4zPctkiRIqxduzYHShU6oq3Ogda3QIEClCtXjrx582ZjqYwJD34FfXGzC70J5MblXH8h\n1frXgdbey/OAUqpa1FvXE3jSWzdYVT8MtJBxcXEULlyYihUrIpI6ed+Zjhw5QuHChQM9RViLtjoH\nUl9VZf/+/cTFxVGpUqVsLpkxoS/DoC9u+rbhuNmG4oClIjJVVdckb6Oqj/hs/yBuBie8/O/PAPVx\nt5Yv9/YNKG95fHy8XwHfmNREhBIlSrB3795gF8WYkOBPn35DYJOqblHVk7gJKm44y/bdcSlRAdoD\n36tq8gQV3+NmgQqYBXxzruyzY8xp/nTvlOXMWW/igEZpbShuUupKnE4Wlda+ZdPYrw8uDzqlS5cm\nNjb2jPVFihThyJEjfhQVEhMT/d42UkRbnc+lvvHx8X/7XIWTo0ePhnX5z0W01FkV4uIKsmJFUeLj\niwOx2Xq+rL6Q2w2YqKqJgeykqiNxucCpX7++pr45Ye3atX734WZX/3bu3LmpVasWCQkJVKpUiY8/\n/piiRdOaaOncxcbG8sorrzBt2rSA9vOt8549e+jbty9Lly6laNGilC5dmjfeeIPLLrssy8pZsWJF\n6tWrx6RJkwCYOHEi06ZNY8yYMenus2LFCnbt2sW1116b6fOfy9+4QIECxMTEZPrcwWI3KkUOVdi0\nCWJjYfZs9+9ub1LMyy//k+HDa2fr+f3p3tnJmVPrlSP9Kde6cbprJ9B9Q1rBggVZsWIFq1atonjx\n4gwfPjzYRSIh4cysyKpKp06daNWqFZs3b2b58uUMGTKE33/P+tnlli9fzpo1azLe0LNixQpmzJiR\n5eUwJtQlB/lRo+DWW6FcObjsMujTxwX9li3h3Xdh/Xp4662fs708/gT9pUAVb8qyfLjAPjX1Rt5k\nxsVwc3cm+xZo501BVww3y9O3mS92cDVu3JidO09/d7388ss0aNCA2rVr88wzz6QsHzRoEFWrVqVZ\ns2Z0796dV155BYBWrVqlpJrYt28faeUaWrJkCY0bNyYmJoYmTZqwfv16AMaMGUPHjh1p06YNV111\n1Rn7zJ49m7x583LvvfemLLviiito3rw5qkr//v2pWbMmtWrVYvz48cDp1lSXLl2oVq0at956K6rK\nN998w80335xynNjYWK6//vqU148++ijPPffc38p97Ngx7rjjDho2bEhMTAxffvklJ0+e5Omnn2b8\n+PHUqVMn5dzGRCJV2LwZ3n8fbr8dypeHKlXg7rth1ixo3hzeeQfWrYNdu2DcOPcFcNllkBOXnzLs\n3lHVBBF5ABescwOjVXW1iDwLLFPV5C+AbsBn6pOrWVUPiMgg3BcHwLOqeiBTJe7bF1asSHd1wcRE\nyJ07sGPWqQNvvOHXpomJicyaNYs777wTgO+++46NGzeyZMkSVJWOHTsyZ84cChYsyKRJk1i5ciWn\nTp2ibt261KtXz+8iVatWjblz55InTx5mzpzJ//73v5TulJ9++olffvmF4sWLn7HPqlWr0j3H5MmT\nWbFiBStXrmTfvn00aNCAFi3cNLA///wzq1ev5uKLL6Zp06bMnz+fq6++mj59+qQkgBo/fjzdup2e\n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\nRl4AAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [] + } + } + ] + } + ] +} \ No newline at end of file