From b38aff05a36c6aa6ea8a3468e3bed6d968e0fb0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Geron?= Date: Wed, 15 Nov 2023 18:29:39 +1300 Subject: [PATCH] Reorganize the scheduler section to focus on Keras schedulers --- 11_training_deep_neural_networks.ipynb | 836 ++++++++++++++----------- 1 file changed, 461 insertions(+), 375 deletions(-) diff --git a/11_training_deep_neural_networks.ipynb b/11_training_deep_neural_networks.ipynb index 823936a..41b534f 100644 --- a/11_training_deep_neural_networks.ipynb +++ b/11_training_deep_neural_networks.ipynb @@ -1899,8 +1899,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "```lr = lr0 / (1 + steps / s)**c```\n", - "* Keras uses `c=1` and `s = 1 / decay`" + "```python\n", + "learning_rate = initial_learning_rate / (1 + step / decay_steps)**power\n", + "```\n", + "\n", + "Keras uses `power = 1`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**: The `decay` argument in optimizers is deprecated. The old optimizers which implement the `decay` argument are still available in `tf.keras.optimizers.legacy`, but you should use the schedulers in `tf.keras.optimizers.schedules` instead." ] }, { @@ -1909,38 +1919,62 @@ "metadata": {}, "outputs": [], "source": [ - "optimizer = tf.keras.optimizers.SGD(learning_rate=0.01, decay=1e-4)" + "# DEPRECATED:\n", + "optimizer = tf.keras.optimizers.legacy.SGD(learning_rate=0.01, decay=1e-4)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, + "outputs": [], + "source": [ + "# RECOMMENDED:\n", + "lr_schedule = tf.keras.optimizers.schedules.InverseTimeDecay(\n", + " initial_learning_rate=0.01,\n", + " decay_steps=10_000,\n", + " decay_rate=1.0,\n", + " staircase=False\n", + ")\n", + "optimizer = tf.keras.optimizers.SGD(learning_rate=lr_schedule)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `InverseTimeDecay` scheduler uses `learning_rate = initial_learning_rate / (1 + decay_rate * step / decay_steps)`. If you set `staircase=True`, then it replaces `step / decay_step` with `floor(step / decay_step)`." + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/10\n", - "1719/1719 [==============================] - 2s 915us/step - loss: 0.6818 - accuracy: 0.7678 - val_loss: 0.4840 - val_accuracy: 0.8276\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.7004 - accuracy: 0.7588 - val_loss: 0.4991 - val_accuracy: 0.8206\n", "Epoch 2/10\n", - "1719/1719 [==============================] - 2s 877us/step - loss: 0.4702 - accuracy: 0.8361 - val_loss: 0.4421 - val_accuracy: 0.8398\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.4781 - accuracy: 0.8316 - val_loss: 0.4477 - val_accuracy: 0.8372\n", "Epoch 3/10\n", - "1719/1719 [==============================] - 2s 886us/step - loss: 0.4242 - accuracy: 0.8491 - val_loss: 0.4110 - val_accuracy: 0.8534\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.4293 - accuracy: 0.8487 - val_loss: 0.4177 - val_accuracy: 0.8498\n", "Epoch 4/10\n", - "1719/1719 [==============================] - 2s 880us/step - loss: 0.4012 - accuracy: 0.8580 - val_loss: 0.3900 - val_accuracy: 0.8574\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.4053 - accuracy: 0.8563 - val_loss: 0.3987 - val_accuracy: 0.8602\n", "Epoch 5/10\n", - "1719/1719 [==============================] - 2s 894us/step - loss: 0.3821 - accuracy: 0.8636 - val_loss: 0.3835 - val_accuracy: 0.8626\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3864 - accuracy: 0.8633 - val_loss: 0.3859 - val_accuracy: 0.8612\n", "Epoch 6/10\n", - "1719/1719 [==============================] - 2s 927us/step - loss: 0.3685 - accuracy: 0.8687 - val_loss: 0.3836 - val_accuracy: 0.8614\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3720 - accuracy: 0.8675 - val_loss: 0.3942 - val_accuracy: 0.8584\n", "Epoch 7/10\n", - "1719/1719 [==============================] - 1s 854us/step - loss: 0.3580 - accuracy: 0.8706 - val_loss: 0.3709 - val_accuracy: 0.8646\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3616 - accuracy: 0.8709 - val_loss: 0.3706 - val_accuracy: 0.8670\n", "Epoch 8/10\n", - "1719/1719 [==============================] - 1s 851us/step - loss: 0.3490 - accuracy: 0.8756 - val_loss: 0.3736 - val_accuracy: 0.8614\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3529 - accuracy: 0.8741 - val_loss: 0.3758 - val_accuracy: 0.8638\n", "Epoch 9/10\n", - "1719/1719 [==============================] - 1s 852us/step - loss: 0.3413 - accuracy: 0.8786 - val_loss: 0.3536 - val_accuracy: 0.8698\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3452 - accuracy: 0.8765 - val_loss: 0.3587 - val_accuracy: 0.8680\n", "Epoch 10/10\n", - "1719/1719 [==============================] - 1s 844us/step - loss: 0.3343 - accuracy: 0.8801 - val_loss: 0.3546 - val_accuracy: 0.8698\n" + "1719/1719 [==============================] - 3s 1ms/step - loss: 0.3379 - accuracy: 0.8793 - val_loss: 0.3569 - val_accuracy: 0.8714\n" ] } ], @@ -1950,41 +1984,38 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 68, "metadata": {}, "outputs": [ { "data": { - "image/png": "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+0SCZBF57ImI5w5cE2/Z8PhhtRymiIhEqEhANrZwZqzziWzaEhGRRkiJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREakSJREREaiShicTMzjKzRWZWaGa3xDhvZvZYeH6umQ2urqyZtTWzyWa2JPzZJlHfR0REEphIzCwdGAeMBPoD3zWz/lGXjQR6h48xwONxlL0FeMfdewPvhK9FRCRBElkjORYodPel7r4beAEYFXXNKOBpD0wHcswst5qyo4C/hs//Coyu4+8hIiIRmiTws/KAlRGvVwFD47gmr5qyndx9LYC7rzWzjrE+3MzGENRyAHaZ2WcH8yUaufbAxmQHUc/onsSm+xJbY78vPWIdTGQisRjHPM5r4ilbJXd/EngSwMw+cfejD6R8KtB92Z/uSWy6L7Gl6n1JZNPWKqBbxOuuwJo4r6mq7Lqw+Yvw5/pajFlERKqRyEQyA+htZr3MLBO4GJgQdc0E4NJw9NYwYEvYbFVV2QnAZeHzy4A36vqLiIjINxLWtOXuZWZ2LTAJSAfGu/t8M7s6PP8EMBE4GygEdgBXVFU2fOv7gZfM7CpgBXBRHOE8WXvfrFHRfdmf7klsui+xpeR9MfcD6moQERHZh2a2i4hIjSiRiIhIjaRUIqluiZZUZWbLzGyemc0xs0+SHU+ymNl4M1sfOcdIS/BUel/uMLPV4e/MHDM7O5kxJpqZdTOzd81soZnNN7OfhsdT8vclZRJJnEu0pLJT3P2oVBwDH+Ep4KyoY1qCJ/Z9Afhd+DtzlLtPTHBMyVYGXO/u/YBhwDXh35OU/H1JmURCfEu0SApz9/eATVGHU34JnkruS0pz97XuPit8vg1YSLACR0r+vqRSIqls+RUJVgn4l5nNDJeSkW/sswQPEHMJnhR1bbhK9/hUacKJxcx6AoOAj0jR35dUSiQ1XmalETvB3QcTNPtdY2YnJzsgqfceBw4FjgLWAg8nNZokMbMWwKvAde6+NdnxJEsqJZJ4lmhJSe6+Jvy5Hvg7QTOgBLQETwzuvs7dy919D/BHUvB3xswyCJLIs+7+Wng4JX9fUimRxLNES8oxs+Zm1rLiOXAmoJWRv6EleGKo+GMZ+j+k2O+MmRnwZ2Chu/824lRK/r6k1Mz2cIjiI3yzzMqvkxtR8pnZIQS1EAiWzHkuVe+LmT0PDCdYCnwd8CvgdeAloDvhEjzunlIdz5Xcl+EEzVoOLAN+VNE3kArM7ETgfWAesCc8/AuCfpKU+31JqUQiIiK1L5WatkREpA4okYiISI0okYiISI0okYiISI0okYiISI0okYg0cGbmZnZhsuOQ1KVEIlIDZvZU+Ic8+jE92bGJJErC9mwXacSmAD+IOrY7GYGIJINqJCI1t8vdv4p6bIK9zU7XmtlbZrbDzJab2SWRhc1sgJlNMbMSM9sU1nJaR11zWbj52C4zW2dmT0XF0NbMXjaz7Wa2NPozROqSEolI3buTYA2mo4AngafN7GgAM2sGvA0UEyx8+H+A44HxFYXN7EfAH4C/AAOBs4H5UZ/xS4J1nY4EXgTGm1mPOvtGIhG0RIpIDYQ1g0uAnVGnxrn7zWbmwJ/c/YcRZaYAX7n7JWb2Q+AhoGu4QRJmNhx4F+jt7oVmtgr4m7vH3G0v/Iz73X1s+LoJsBUY4+5/q71vKxKb+khEau49IHpDsKKI5/+JOvcf4JzweT9gbkUSCX1IsBBgfzPbSrAB2zvVxDC34om7l5nZBlJkUyVJPiUSkZrb4e6FB1nWqHyDNSf2hmyxlMYoq6ZrSQj9oonUvWExXi8Mny8AjqzYEyZ0PMH/mwvdfR2wGjitzqMUOUiqkYjUXFMz6xx1rNzdN4TPzzezGUABcCFBUhgannuWoDP+aTP7JdCGoGP9tYhazq+B35nZOuAtoBlwmrun5Pa2Uv8okYjU3OkE+5ZHWk2wnTPAHcAFwGPABuAKd58B4O47zGwEwYZrHxN02r8B/LTijdz9cTPbDVwP/AbYBEyso+8icsA0akukDoUjqi5y91eSHYtIXVEfiYiI1IgSiYiI1IiatkREpEZUIxERkRpRIhERkRpRIhERkRpRIhERkRpRIhERkRr5/x62Q+98ej++AAAAAElFTkSuQmCC\n", + "image/png": "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HgBw5MZjLktARESkYxVKnGxsbF74FN2NGzfg5ORUoaDoH10a2kEmEXA/KRv3EpmIEhER6VKFEqdu3bph7969iI2NLXX7tWvXcPDgQfTu3fuVgiPATC5Fh3o2AICjVTlcx94tIiKiEiqUOH366acoKChA586d8b///Q+JiUWPy1+/fh2bNm1Cz549IZfL8fHHH2s12NqqV+N/huuIiIhId6QV2al58+bYsWMH3nvvPfj7+wMARFGEl5cXRFGEubk5du7ciYYNG2o12NqqZ2MHLNh3DeeiU5CWo4ClsazyTsZ31REREZWpQokTAAwZMgT37t3D1q1bcebMGSQnJ8PCwgLt27fHv/71L9ja2mozzlrNzcYEDe3NcDshE6G3nmBIS2ddh0RERFQrVThxAgBra2vMmDFDW7FQOXo2scfthEwcvf6YiRMREZGOVGiO07hx47B3795y6wQFBWHcuHEVCopK6t3EAQBw7NYTFBQqdRwNERFR7VShxGnLli2IjIwst87ly5exdevWihyeStHa1QpWJjKkZitwrkpWEedTdURERM+r8Et+XyQ3NxdS6SuNBNIzpBIDVa/TX1fjdRwNERFR7VThxEko4+krURTx4MEDBAUFwdmZc3G0aYCXIwDg4JV4KJWV1SPEp+qIiIjKonHiZGBgAIlEAolEAqDoRb/FPz/7JZVK4eHhgXPnzmHUqFGVFnht1LmBLUwNJYhPz8XFh6m6DoeIiKjW0XgsrVu3bqpepuPHj8PNzQ0eHh4l6kkkElhbW6Nnz554//33tRYoAUYyCXo2ccC+i49w8Eo8WrvV0XVIREREtYrGidOxY8dU3xsYGOBf//oXPv/888qIicrRv5ljUeJ0NR6zBzQuc8iUiIiItK9Cs7eVSj4OryvdX7ODXGqA+0nZuB6XgabOFpVzIr6rjoiIqIRKe6qOKoepXIpujewAAAf5dB0REVGVqvB6AYWFhdi5cycOHz6MR48eIS8vr0QdQRBw5MiRVwqQShrg5Yjga49x8EocAvo00u7BOfRHRERUpgolTllZWejbty9Onz4NURQhCALEZ4Z2in/m/JvK0auxA6QGAm49zsSdhAw0sDfXdUhERES1QoWG6r788kuEhYVh4cKFSExMhCiKWLBgAeLi4rBjxw54enpi5MiRpfZC0auzNJGphuv2XozTcTRERES1R4USp927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iY0bNwIAXFxcMHjwYFy8eLHikdIraehgjj5NHSCKwPehd3UdDhERUbVUocTp4cOHkMvl5dYxMjLCw4cPVT+7ubkhNze3IqcjLZnUvT6AogUxY1NzSq/EieNERERlqlDi5OLigj/++AN5eXmlbs/Ly8Mff/yh9iRdQkIC6tSpU7EoSStau9VBx3o2KFCK2Hicc52IiIheVoUSp/Hjx+POnTvw9fXF/v37kZycDABITk7Gn3/+iW7duuHu3btqyxacOHECLVu21E7UVGGTehT1Ov1yLgZJmaUnvkRERFS6Ck0OnzVrFq5fv46ffvoJQ4YMAVC0bpNSWbQytSiKeOeddzB79mwAwOPHjzFo0CD0799fS2FTRXVpYIvmLpa4HJuGLaei8VHf13QdEhERUbVRocRJIpFg27ZtGDNmDH766SdcunQJ6enpsLCwQMuWLfHOO++gV69eqvoODg74z3/+o7WgqeIEQcCk7vXxwc/h2HoqGv/uVg/mRrJSavKpOiIioudVKHEq1qtXL7UEiaqHfs0cUd/OFHefZOHHv6MxtVdDXYdERERULfBddbWQgYGAab0bAQA2nriHtBzFM1v5VB0REVFZXqnHKT4+HhcuXEBqaioKCwtLrfPee++9yimokgxu7oTVR2/j1uNMbDoZhYA+jXQdEhERkd6rUOKUm5uL999/H9u3by/1XXVA0QRxQRCYOOkpAwMBM3o3wgc/h2PzySj8q5MH6pga6josIiIivVahxOmTTz7Bzz//jEaNGmH06NGoW7cupNJX6rwiHejXzBFNnCxwPS4dG0/cw6z+jXUdEhERkV6rULbz66+/omnTprhw4cILVxAn/VXU69QQ//7vBWw5FY3xXTxhU7yR76ojIiIqoUKTw1NTU9G/f38mTTVAn6YOaO5iiez8Qqw7xnfYERERladCiVOTJk3w+PFjbcdCOiAIAj7qWzQxfFvYfcSnczVxIiKislQocfrkk0/wxx9/4M6dO9qOh3TAt5EdOtW3QX6hEtvConUdDhERkd6q0BwnR0dH9O/fH+3atcP06dPRunVrWFpallq3W7durxQgVT5BEDB3YBMMXnUSITefYBZHYImIiEpVocSpe/fuEAQBoihiwYIFEISyF00sa30n0i9eLpYY1soZNy/eB1D0whUuhUlERKSuQonT559/Xm6yRNXTR31fw4eXzwAA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RERERKQhJk5EREREGmLiRERERKQhJk5EREREGmLiRERERKQhJk5EREREGmLiRERERKQhJk5EREREGmLiRERERKQhJk5EREREGmLiRERERKQhJk5EREREGmLiRERERKQhJk5EREREGmLiRERERKQhJk5EREREGmLiRERERKQhvUyc1q5dC09PTxgZGcHb2xsnTpwot35oaCi8vb1hZGSEevXqYf369SXq7Nq1C02bNoVcLkfTpk3x+++/v/J5iYiIqHbRu8Rpx44dmD59Oj799FNERESga9euGDBgAGJiYkqtHxUVhYEDB6Jr166IiIjA3LlzMXXqVOzatUtVJywsDH5+fvD398fFixfh7++Pt956C2fOnKnweYmIiKj20bvEafny5Rg/fjwmTJiAJk2aIDAwEK6urli3bl2p9devXw83NzcEBgaiSZMmmDBhAsaNG4fvvvtOVScwMBB9+vTBnDlz0LhxY8yZMwe9evVCYGBghc9LREREtY9eJU75+fm4cOEC+vbtq1bet29fnDp1qtR9wsLCStTv168fzp8/D4VCUW6d4mNW5LxERERU+0h1HcCzEhMTUVhYCAcHB7VyBwcHxMfHl7pPfHx8qfULCgqQmJgIJyenMusUH7Mi5wWAvLw85OXlqX5OS0sDACQnJ7/gSqmyKRQKZGdnIykpCTKZTNfh1HpsD/3BttAfbAv9kZGRAQAQRfGFdfUqcSomCILaz6Iolih7Uf3nyzU55sued/HixVi4cGGJ8kaNGpW5DxEREemnjIwMWFpalltHrxInW1tbSCSSEr08CQkJJXqDijk6OpZaXyqVwsbGptw6xcesyHkBYM6cOQgICFD9nJqaCnd3d8TExLzwxlPlSk9Ph6urKx48eAALCwtdh1PrsT30B9tCf7At9IcoisjIyICzs/ML6+pV4mRoaAhvb28EBwdj+PDhqvLg4GAMHTq01H06duyIffv2qZUdOnQIPj4+qq7Pjh07Ijg4GDNmzFCr06lTpwqfFwDkcjnkcnmJcktLS34I9ISFhQXbQo+wPfQH20J/sC30g6YdHnqVOAFAQEAA/P394ePjg44dO2LDhg2IiYnBxIkTART18sTGxmLbtm0AgIkTJ2L16tUICAjA+++/j7CwMGzatAnbt29XHXPatGno1q0blixZgqFDh+KPP/7A4cOHcfLkSY3PS0RERKR3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", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], "source": [ - "# extra code – this cell plots power scheduling\n", + "# extra code – this cell plots power scheduling with staircase=True or False\n", "\n", - "import math\n", + "initial_learning_rate = 0.01\n", + "decay_rate = 1.0\n", + "decay_steps = 10_000\n", "\n", - "learning_rate = 0.01\n", - "decay = 1e-4\n", - "batch_size = 32\n", - "n_steps_per_epoch = math.ceil(len(X_train) / batch_size)\n", - "n_epochs = 25\n", + "steps = np.arange(100_000)\n", + "lrs = initial_learning_rate / (1 + decay_rate * steps / decay_steps)\n", + "lrs2 = initial_learning_rate / (1 + decay_rate * np.floor(steps / decay_steps))\n", "\n", - "epochs = np.arange(n_epochs)\n", - "lrs = learning_rate / (1 + decay * epochs * n_steps_per_epoch)\n", - "\n", - "plt.plot(epochs, lrs, \"o-\")\n", - "plt.axis([0, n_epochs - 1, 0, 0.01])\n", - "plt.xlabel(\"Epoch\")\n", + "plt.plot(steps, lrs, \"-\", label=\"staircase=False\")\n", + "plt.plot(steps, lrs2, \"-\", label=\"staircase=True\")\n", + "plt.axis([0, steps.max(), 0, 0.0105])\n", + "plt.xlabel(\"Step\")\n", "plt.ylabel(\"Learning Rate\")\n", "plt.title(\"Power Scheduling\", fontsize=14)\n", + "plt.legend()\n", "plt.grid(True)\n", "plt.show()" ] @@ -2000,12 +2031,110 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "```lr = lr0 * 0.1 ** (epoch / s)```" + "```python\n", + "learning_rate = initial_learning_rate * decay_rate ** (step / decay_steps)\n", + "```" ] }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 69, + "metadata": {}, + "outputs": [], + "source": [ + "lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(\n", + " initial_learning_rate=0.01,\n", + " decay_steps=20_000,\n", + " decay_rate=0.1,\n", + " staircase=False\n", + ")\n", + "optimizer = tf.keras.optimizers.SGD(learning_rate=lr_schedule)" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.6916 - accuracy: 0.7632 - val_loss: 0.5030 - val_accuracy: 0.8254\n", + "Epoch 2/10\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.4832 - accuracy: 0.8311 - val_loss: 0.4601 - val_accuracy: 0.8358\n", + "Epoch 3/10\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.4372 - accuracy: 0.8449 - val_loss: 0.4256 - val_accuracy: 0.8524\n", + "Epoch 4/10\n", + "1719/1719 [==============================] - 3s 1ms/step - loss: 0.4131 - accuracy: 0.8546 - val_loss: 0.4037 - val_accuracy: 0.8568\n", + "Epoch 5/10\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3952 - accuracy: 0.8596 - val_loss: 0.3950 - val_accuracy: 0.8598\n", + "Epoch 6/10\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3825 - accuracy: 0.8640 - val_loss: 0.4010 - val_accuracy: 0.8584\n", + "Epoch 7/10\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3739 - accuracy: 0.8667 - val_loss: 0.3851 - val_accuracy: 0.8650\n", + "Epoch 8/10\n", + "1719/1719 [==============================] - 3s 1ms/step - loss: 0.3664 - accuracy: 0.8696 - val_loss: 0.3811 - val_accuracy: 0.8616\n", + "Epoch 9/10\n", + "1719/1719 [==============================] - 3s 1ms/step - loss: 0.3606 - accuracy: 0.8720 - val_loss: 0.3749 - val_accuracy: 0.8662\n", + "Epoch 10/10\n", + "1719/1719 [==============================] - 3s 1ms/step - loss: 0.3555 - accuracy: 0.8743 - val_loss: 0.3706 - val_accuracy: 0.8662\n" + ] + } + ], + "source": [ + "history_exponential_scheduling = build_and_train_model(optimizer) # extra code" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# extra code – this cell plots exponential scheduling\n", + "\n", + "initial_learning_rate = 0.01\n", + "decay_rate = 0.1\n", + "decay_steps = 20_000\n", + "\n", + "steps = np.arange(100_000)\n", + "lrs = initial_learning_rate * decay_rate ** (steps / decay_steps)\n", + "lrs2 = initial_learning_rate * decay_rate ** np.floor(steps / decay_steps)\n", + "\n", + "plt.plot(steps, lrs, \"-\", label=\"staircase=False\")\n", + "plt.plot(steps, lrs2, \"-\", label=\"staircase=True\")\n", + "plt.axis([0, steps.max(), 0, 0.0105])\n", + "plt.xlabel(\"Step\")\n", + "plt.ylabel(\"Learning Rate\")\n", + "plt.title(\"Exponential Scheduling\", fontsize=14)\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Keras also provides a `LearningRateScheduler` callback class that lets you define your own scheduling function. Let's see how you could use it to implement exponential decay. Note that in this case the learning rate only changes at each epoch, not at each step:" + ] + }, + { + "cell_type": "code", + "execution_count": 72, "metadata": {}, "outputs": [], "source": [ @@ -2015,7 +2144,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 73, "metadata": {}, "outputs": [], "source": [ @@ -2029,7 +2158,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 74, "metadata": {}, "outputs": [], "source": [ @@ -2044,63 +2173,65 @@ }, { "cell_type": "code", - "execution_count": 71, - "metadata": {}, + "execution_count": 75, + "metadata": { + "scrolled": true + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/25\n", - "1719/1719 [==============================] - 2s 913us/step - loss: 0.6795 - accuracy: 0.7682 - val_loss: 0.4782 - val_accuracy: 0.8314\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.6905 - accuracy: 0.7643 - val_loss: 0.4814 - val_accuracy: 0.8330 - lr: 0.0100\n", "Epoch 2/25\n", - "1719/1719 [==============================] - 1s 869us/step - loss: 0.4656 - accuracy: 0.8376 - val_loss: 0.4407 - val_accuracy: 0.8404\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.4672 - accuracy: 0.8357 - val_loss: 0.4488 - val_accuracy: 0.8374 - lr: 0.0089\n", "Epoch 3/25\n", - "1719/1719 [==============================] - 2s 873us/step - loss: 0.4194 - accuracy: 0.8505 - val_loss: 0.4118 - val_accuracy: 0.8520\n", + "1719/1719 [==============================] - 3s 1ms/step - loss: 0.4212 - accuracy: 0.8503 - val_loss: 0.4118 - val_accuracy: 0.8532 - lr: 0.0079\n", "Epoch 4/25\n", - "1719/1719 [==============================] - 1s 857us/step - loss: 0.3953 - accuracy: 0.8601 - val_loss: 0.3850 - val_accuracy: 0.8616\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3975 - accuracy: 0.8593 - val_loss: 0.3884 - val_accuracy: 0.8636 - lr: 0.0071\n", "Epoch 5/25\n", - "1719/1719 [==============================] - 1s 868us/step - loss: 0.3754 - accuracy: 0.8667 - val_loss: 0.3769 - val_accuracy: 0.8620\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3781 - accuracy: 0.8657 - val_loss: 0.3772 - val_accuracy: 0.8642 - lr: 0.0063\n", "Epoch 6/25\n", - "1719/1719 [==============================] - 2s 878us/step - loss: 0.3611 - accuracy: 0.8717 - val_loss: 0.3782 - val_accuracy: 0.8630\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3634 - accuracy: 0.8710 - val_loss: 0.3779 - val_accuracy: 0.8662 - lr: 0.0056\n", "Epoch 7/25\n", - "1719/1719 [==============================] - 2s 895us/step - loss: 0.3501 - accuracy: 0.8743 - val_loss: 0.3665 - val_accuracy: 0.8690\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3530 - accuracy: 0.8744 - val_loss: 0.3674 - val_accuracy: 0.8652 - lr: 0.0050\n", "Epoch 8/25\n", - "1719/1719 [==============================] - 2s 883us/step - loss: 0.3407 - accuracy: 0.8785 - val_loss: 0.3694 - val_accuracy: 0.8638\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3437 - accuracy: 0.8771 - val_loss: 0.3616 - val_accuracy: 0.8686 - lr: 0.0045\n", "Epoch 9/25\n", - "1719/1719 [==============================] - 2s 879us/step - loss: 0.3328 - accuracy: 0.8814 - val_loss: 0.3477 - val_accuracy: 0.8708\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3359 - accuracy: 0.8801 - val_loss: 0.3509 - val_accuracy: 0.8728 - lr: 0.0040\n", "Epoch 10/25\n", - "1719/1719 [==============================] - 2s 895us/step - loss: 0.3259 - accuracy: 0.8834 - val_loss: 0.3495 - val_accuracy: 0.8728\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3290 - accuracy: 0.8826 - val_loss: 0.3504 - val_accuracy: 0.8720 - lr: 0.0035\n", "Epoch 11/25\n", - "1719/1719 [==============================] - 2s 884us/step - loss: 0.3200 - accuracy: 0.8855 - val_loss: 0.3483 - val_accuracy: 0.8722\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3236 - accuracy: 0.8844 - val_loss: 0.3458 - val_accuracy: 0.8736 - lr: 0.0032\n", "Epoch 12/25\n", - "1719/1719 [==============================] - 2s 903us/step - loss: 0.3148 - accuracy: 0.8877 - val_loss: 0.3459 - val_accuracy: 0.8772\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3186 - accuracy: 0.8869 - val_loss: 0.3459 - val_accuracy: 0.8752 - lr: 0.0028\n", "Epoch 13/25\n", - "1719/1719 [==============================] - 2s 894us/step - loss: 0.3107 - accuracy: 0.8892 - val_loss: 0.3366 - val_accuracy: 0.8766\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3147 - accuracy: 0.8878 - val_loss: 0.3359 - val_accuracy: 0.8770 - lr: 0.0025\n", "Epoch 14/25\n", - "1719/1719 [==============================] - 2s 885us/step - loss: 0.3068 - accuracy: 0.8904 - val_loss: 0.3409 - val_accuracy: 0.8772\n", + "1719/1719 [==============================] - 3s 1ms/step - loss: 0.3109 - accuracy: 0.8890 - val_loss: 0.3404 - val_accuracy: 0.8762 - lr: 0.0022\n", "Epoch 15/25\n", - "1719/1719 [==============================] - 1s 853us/step - loss: 0.3034 - accuracy: 0.8921 - val_loss: 0.3404 - val_accuracy: 0.8766\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3076 - accuracy: 0.8902 - val_loss: 0.3398 - val_accuracy: 0.8790 - lr: 0.0020\n", "Epoch 16/25\n", - "1719/1719 [==============================] - 2s 884us/step - loss: 0.3000 - accuracy: 0.8934 - val_loss: 0.3332 - val_accuracy: 0.8774\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3043 - accuracy: 0.8915 - val_loss: 0.3331 - val_accuracy: 0.8784 - lr: 0.0018\n", "Epoch 17/25\n", - "1719/1719 [==============================] - 2s 887us/step - loss: 0.2978 - accuracy: 0.8933 - val_loss: 0.3342 - val_accuracy: 0.8788\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3020 - accuracy: 0.8924 - val_loss: 0.3363 - val_accuracy: 0.8774 - lr: 0.0016\n", "Epoch 18/25\n", - "1719/1719 [==============================] - 2s 890us/step - loss: 0.2953 - accuracy: 0.8945 - val_loss: 0.3323 - val_accuracy: 0.8770\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2998 - accuracy: 0.8927 - val_loss: 0.3356 - val_accuracy: 0.8778 - lr: 0.0014\n", "Epoch 19/25\n", - "1719/1719 [==============================] - 2s 918us/step - loss: 0.2934 - accuracy: 0.8951 - val_loss: 0.3291 - val_accuracy: 0.8774\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2979 - accuracy: 0.8935 - val_loss: 0.3309 - val_accuracy: 0.8796 - lr: 0.0013\n", "Epoch 20/25\n", - "1719/1719 [==============================] - 2s 923us/step - loss: 0.2915 - accuracy: 0.8966 - val_loss: 0.3292 - val_accuracy: 0.8776\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2961 - accuracy: 0.8940 - val_loss: 0.3308 - val_accuracy: 0.8782 - lr: 0.0011\n", "Epoch 21/25\n", - "1719/1719 [==============================] - 2s 888us/step - loss: 0.2899 - accuracy: 0.8968 - val_loss: 0.3273 - val_accuracy: 0.8766\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2944 - accuracy: 0.8951 - val_loss: 0.3286 - val_accuracy: 0.8802 - lr: 0.0010\n", "Epoch 22/25\n", - "1719/1719 [==============================] - 2s 874us/step - loss: 0.2882 - accuracy: 0.8975 - val_loss: 0.3298 - val_accuracy: 0.8790\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2930 - accuracy: 0.8953 - val_loss: 0.3313 - val_accuracy: 0.8804 - lr: 8.9125e-04\n", "Epoch 23/25\n", - "1719/1719 [==============================] - 2s 879us/step - loss: 0.2870 - accuracy: 0.8978 - val_loss: 0.3287 - val_accuracy: 0.8780\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2916 - accuracy: 0.8957 - val_loss: 0.3285 - val_accuracy: 0.8796 - lr: 7.9433e-04\n", "Epoch 24/25\n", - "1719/1719 [==============================] - 2s 890us/step - loss: 0.2857 - accuracy: 0.8986 - val_loss: 0.3288 - val_accuracy: 0.8786\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2904 - accuracy: 0.8961 - val_loss: 0.3313 - val_accuracy: 0.8786 - lr: 7.0795e-04\n", "Epoch 25/25\n", - "1719/1719 [==============================] - 2s 877us/step - loss: 0.2849 - accuracy: 0.8985 - val_loss: 0.3285 - val_accuracy: 0.8792\n" + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2896 - accuracy: 0.8962 - val_loss: 0.3296 - val_accuracy: 0.8812 - lr: 6.3096e-04\n" ] } ], @@ -2111,46 +2242,16 @@ " callbacks=[lr_scheduler])" ] }, - { - "cell_type": "code", - "execution_count": 72, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# extra code – this cell plots exponential scheduling\n", - "\n", - "plt.plot(history.epoch, history.history[\"lr\"], \"o-\")\n", - "plt.axis([0, n_epochs - 1, 0, 0.011])\n", - "plt.xlabel(\"Epoch\")\n", - "plt.ylabel(\"Learning Rate\")\n", - "plt.title(\"Exponential Scheduling\", fontsize=14)\n", - "plt.grid(True)\n", - "plt.show()" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The schedule function can take the current learning rate as a second argument:" + "Alternatively, the schedule function can take the current learning rate as a second argument:" ] }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 76, "metadata": {}, "outputs": [], "source": [ @@ -2162,12 +2263,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**Extra material**: if you want to update the learning rate at each iteration rather than at each epoch, you can write your own callback class:" + "**Extra material**: if you want to use a custom scheduling function that updates the learning rate at each iteration rather than at each epoch, you can write your own callback class like this:" ] }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 77, "metadata": {}, "outputs": [], "source": [ @@ -2191,7 +2292,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 78, "metadata": {}, "outputs": [], "source": [ @@ -2204,7 +2305,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 79, "metadata": {}, "outputs": [ { @@ -2212,103 +2313,68 @@ "output_type": "stream", "text": [ "Epoch 1/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.6804 - accuracy: 0.7679 - val_loss: 0.4803 - val_accuracy: 0.8276\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.6947 - accuracy: 0.7635 - val_loss: 0.5014 - val_accuracy: 0.8224 - lr: 0.0091\n", "Epoch 2/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.4683 - accuracy: 0.8361 - val_loss: 0.4410 - val_accuracy: 0.8412\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.4718 - accuracy: 0.8349 - val_loss: 0.4530 - val_accuracy: 0.8382 - lr: 0.0083\n", "Epoch 3/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.4216 - accuracy: 0.8493 - val_loss: 0.4108 - val_accuracy: 0.8536\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.4255 - accuracy: 0.8500 - val_loss: 0.4216 - val_accuracy: 0.8526 - lr: 0.0076\n", "Epoch 4/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3974 - accuracy: 0.8591 - val_loss: 0.3858 - val_accuracy: 0.8584\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.4025 - accuracy: 0.8587 - val_loss: 0.3954 - val_accuracy: 0.8618 - lr: 0.0069\n", "Epoch 5/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3770 - accuracy: 0.8657 - val_loss: 0.3784 - val_accuracy: 0.8624\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3840 - accuracy: 0.8643 - val_loss: 0.3847 - val_accuracy: 0.8612 - lr: 0.0063\n", "Epoch 6/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3625 - accuracy: 0.8713 - val_loss: 0.3784 - val_accuracy: 0.8626\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3696 - accuracy: 0.8689 - val_loss: 0.3908 - val_accuracy: 0.8558 - lr: 0.0058\n", "Epoch 7/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3512 - accuracy: 0.8736 - val_loss: 0.3662 - val_accuracy: 0.8674\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.3590 - accuracy: 0.8722 - val_loss: 0.3744 - val_accuracy: 0.8670 - lr: 0.0052\n", "Epoch 8/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3414 - accuracy: 0.8779 - val_loss: 0.3699 - val_accuracy: 0.8638\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3498 - accuracy: 0.8749 - val_loss: 0.3754 - val_accuracy: 0.8640 - lr: 0.0048\n", "Epoch 9/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3333 - accuracy: 0.8810 - val_loss: 0.3470 - val_accuracy: 0.8714\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3415 - accuracy: 0.8783 - val_loss: 0.3592 - val_accuracy: 0.8700 - lr: 0.0044\n", "Epoch 10/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3260 - accuracy: 0.8827 - val_loss: 0.3463 - val_accuracy: 0.8718\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3340 - accuracy: 0.8803 - val_loss: 0.3575 - val_accuracy: 0.8724 - lr: 0.0040\n", "Epoch 11/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3197 - accuracy: 0.8852 - val_loss: 0.3509 - val_accuracy: 0.8718\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3281 - accuracy: 0.8833 - val_loss: 0.3573 - val_accuracy: 0.8718 - lr: 0.0036\n", "Epoch 12/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3140 - accuracy: 0.8877 - val_loss: 0.3463 - val_accuracy: 0.8764\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3228 - accuracy: 0.8847 - val_loss: 0.3579 - val_accuracy: 0.8688 - lr: 0.0033\n", "Epoch 13/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3093 - accuracy: 0.8893 - val_loss: 0.3345 - val_accuracy: 0.8762\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3182 - accuracy: 0.8865 - val_loss: 0.3421 - val_accuracy: 0.8756 - lr: 0.0030\n", "Epoch 14/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3049 - accuracy: 0.8907 - val_loss: 0.3397 - val_accuracy: 0.8778\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3138 - accuracy: 0.8882 - val_loss: 0.3468 - val_accuracy: 0.8766 - lr: 0.0028\n", "Epoch 15/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3010 - accuracy: 0.8925 - val_loss: 0.3400 - val_accuracy: 0.8788\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3101 - accuracy: 0.8889 - val_loss: 0.3471 - val_accuracy: 0.8766 - lr: 0.0025\n", "Epoch 16/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2969 - accuracy: 0.8934 - val_loss: 0.3318 - val_accuracy: 0.8792\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3064 - accuracy: 0.8898 - val_loss: 0.3386 - val_accuracy: 0.8752 - lr: 0.0023\n", "Epoch 17/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2942 - accuracy: 0.8939 - val_loss: 0.3337 - val_accuracy: 0.8780\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3035 - accuracy: 0.8903 - val_loss: 0.3417 - val_accuracy: 0.8758 - lr: 0.0021\n", "Epoch 18/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2913 - accuracy: 0.8960 - val_loss: 0.3290 - val_accuracy: 0.8766\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3005 - accuracy: 0.8919 - val_loss: 0.3398 - val_accuracy: 0.8768 - lr: 0.0019\n", "Epoch 19/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2889 - accuracy: 0.8962 - val_loss: 0.3264 - val_accuracy: 0.8778\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2983 - accuracy: 0.8929 - val_loss: 0.3357 - val_accuracy: 0.8766 - lr: 0.0017\n", "Epoch 20/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2865 - accuracy: 0.8970 - val_loss: 0.3262 - val_accuracy: 0.8794\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2959 - accuracy: 0.8939 - val_loss: 0.3370 - val_accuracy: 0.8752 - lr: 0.0016\n", "Epoch 21/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2845 - accuracy: 0.8980 - val_loss: 0.3226 - val_accuracy: 0.8798\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2940 - accuracy: 0.8938 - val_loss: 0.3346 - val_accuracy: 0.8782 - lr: 0.0014\n", "Epoch 22/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2822 - accuracy: 0.8985 - val_loss: 0.3262 - val_accuracy: 0.8814\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2917 - accuracy: 0.8949 - val_loss: 0.3361 - val_accuracy: 0.8766 - lr: 0.0013\n", "Epoch 23/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2807 - accuracy: 0.8998 - val_loss: 0.3254 - val_accuracy: 0.8790\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2902 - accuracy: 0.8955 - val_loss: 0.3349 - val_accuracy: 0.8796 - lr: 0.0012\n", "Epoch 24/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2788 - accuracy: 0.9006 - val_loss: 0.3258 - val_accuracy: 0.8816\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2884 - accuracy: 0.8959 - val_loss: 0.3364 - val_accuracy: 0.8796 - lr: 0.0011\n", "Epoch 25/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2776 - accuracy: 0.9008 - val_loss: 0.3249 - val_accuracy: 0.8808\n" + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2871 - accuracy: 0.8969 - val_loss: 0.3352 - val_accuracy: 0.8802 - lr: 1.0000e-03\n" ] } ], "source": [ "n_epochs = 25\n", "batch_size = 32\n", - "n_steps = n_epochs * math.ceil(len(X_train) / batch_size)\n", + "n_steps = n_epochs * np.ceil(len(X_train) / batch_size)\n", "exp_decay = ExponentialDecay(n_steps)\n", "history = model.fit(X_train, y_train, epochs=n_epochs,\n", " validation_data=(X_valid, y_valid),\n", " callbacks=[exp_decay])" ] }, - { - "cell_type": "code", - "execution_count": 77, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "n_steps = n_epochs * math.ceil(len(X_train) / batch_size)\n", - "steps = np.arange(n_steps)\n", - "decay_rate = 0.1\n", - "lrs = lr0 * decay_rate ** (steps / n_steps)\n", - "\n", - "plt.plot(steps, lrs, \"-\", linewidth=2)\n", - "plt.axis([0, n_steps - 1, 0, lr0 * 1.1])\n", - "plt.xlabel(\"Batch\")\n", - "plt.ylabel(\"Learning Rate\")\n", - "plt.title(\"Exponential Scheduling (per batch)\", fontsize=14)\n", - "plt.grid(True)\n", - "plt.show()" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -2318,7 +2384,102 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 80, + "metadata": {}, + "outputs": [], + "source": [ + "lr_schedule = tf.keras.optimizers.schedules.PiecewiseConstantDecay(\n", + " boundaries=[50_000, 80_000],\n", + " values=[0.01, 0.005, 0.001]\n", + ")\n", + "optimizer = tf.keras.optimizers.SGD(learning_rate=lr_schedule)" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.6942 - accuracy: 0.7617 - val_loss: 0.4892 - val_accuracy: 0.8318\n", + "Epoch 2/10\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.4751 - accuracy: 0.8340 - val_loss: 0.4603 - val_accuracy: 0.8346\n", + "Epoch 3/10\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.4280 - accuracy: 0.8500 - val_loss: 0.4245 - val_accuracy: 0.8542\n", + "Epoch 4/10\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.4035 - accuracy: 0.8581 - val_loss: 0.3867 - val_accuracy: 0.8626\n", + "Epoch 5/10\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3828 - accuracy: 0.8650 - val_loss: 0.3827 - val_accuracy: 0.8634\n", + "Epoch 6/10\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3665 - accuracy: 0.8700 - val_loss: 0.3880 - val_accuracy: 0.8608\n", + "Epoch 7/10\n", + "1719/1719 [==============================] - 3s 1ms/step - loss: 0.3539 - accuracy: 0.8730 - val_loss: 0.3669 - val_accuracy: 0.8688\n", + "Epoch 8/10\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3423 - accuracy: 0.8773 - val_loss: 0.3583 - val_accuracy: 0.8708\n", + "Epoch 9/10\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3322 - accuracy: 0.8807 - val_loss: 0.3447 - val_accuracy: 0.8758\n", + "Epoch 10/10\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3218 - accuracy: 0.8832 - val_loss: 0.3488 - val_accuracy: 0.8716\n" + ] + } + ], + "source": [ + "history_piecewise_scheduling = build_and_train_model(optimizer) # extra code" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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wYMHY9u2bdi9ezcOHjwIAGjYsCE8PDzU+lG/fn1YW1trtBMREVHdpdMRp9OnT+Pll1/G5cuXMXXqVPTt21fteV9fX9jY2OD777+v9LaDgoIQFRWFBQsWoEOHDti/fz/i4+Ph5OQEAMjKylJb08nFxQXx8fHYt28fOnTogH//+99YsWKF2hV93bp1w+bNm7Fu3Tq8+OKLWL9+PeLi4tClSxdd3j4REdFTqWDaLhk4nY44zZ07F8CjuUGtW7fG/PnzsWPHDul5hUIBb2/vSl2h9rjQ0FCEhoZqfW79+vUabf7+/khNTa1wm8OGDavUHKx9+/bJriUiIqK6QacjTklJSRg6dChat25dbo2joyOysrJ07hgRERGRodEpON27dw/NmjWrsObhw4coKSnRqVNERER1BeeG1yw6BScHBwf88ccfFdakpKSgVatWOnWKiIiIyBDpFJwGDBiAXbt2Ye/evVqf/+6773DkyBEMGTLkafpGRERUK3FueM2l0+TwmTNn4ocffkDfvn0xevRoaS5TdHQ0kpOTsWnTJjg7O6utqk1ERERU0+kUnJo2bYqkpCQEBwfjiy++kNonTpwIAOjSpQs2bdoEKyurquklERFRbcUVMGsUnRfAdHV1xaFDh5Ceno4jR47g9u3bsLS0RJcuXdC5c+eq7CMRERGRQXjqe9V16NABHTp00Gj/7LPPkJiYiK1btz7tLoiIiGqVim5cT4btqe9VV57U1FRs27btWW2eiIiIqNo9s+BEREREVNswOBEREekRp4bXLAxORERERDIxOBEREVUzTg2vuRiciIiIiGSSvRxBv379KrXhU6dOVbozRERERIZMdnDauXNnpTfOdSqIiIgqxoXDaxbZweny5cvPsh9EREREBk92cHJycnqW/SAiIqozeEKm5uLkcCIiIiKZGJyIiIiIZGJwIiIi0iPBtcNrFAYnIiIiIpkYnIiIiKqZgmuH11gMTkREREQyMTgRERERycTgREREpEdcObxmYXAiIiIikonBiYiIqJpx5fCai8GJiIiISCYGJyIiIiKZGJyIiIj0iHPDaxYGJyIiIiKZGJyIiIiIZGJwIiIiIpKJwYmIiEiPuABmzcLgRERERCQTgxMREVE14wKYNReDExEREZFMDE5EREREMjE4ERER6RVnh9ckDE5EREREMjE4ERERVTMFODu8pmJwIiIiIpKJwYmIiIhIJgYnIiIiPeLK4TULgxMRERGRTAxORERE1Ywrh9dcDE5EREREMjE4EREREcnE4ERERKRHnBteszA4EREREcnE4ERERFTNODe85mJwIiIiIpKJwYmIiIhIJgYnIiIiPeLK4TULgxMRERGRTAxORERE1UzBpcNrLAYnIiIiIpkYnIiIiPRIcAnMGsUgg1N0dDRcXFxgZmYGT09PHDhwoML6pKQkeHp6wszMDK6uroiJidGo2bJlC9zd3aFUKuHu7o4ff/xR7fnIyEh07twZDRs2RLNmzTBkyBCcP3++St8XERER1WwGF5zi4uIwZcoUzJo1C2lpafD19UXfvn2RkZGhtf7y5cvo168ffH19kZaWhpkzZ2Ly5MnYsmWLVJOcnIygoCAEBwfj5MmTCA4OxvDhw3H06FGpJikpCe+99x6OHDmChIQEFBcXIzAwEA8ePHjm75mIiOoWznCquRRCGNaFkF26dEGnTp2wevVqqc3NzQ1DhgxBZGSkRv306dOxfft2nD17VmoLCQnByZMnkZycDAAICgpCfn4+duzYIdX06dMHjRs3xqZNm7T24+bNm2jWrBmSkpLg5+cnq+/5+fmwsrJCbm4urK2tZb2Gng2VSoX4+Hj069cPJiYm+u5OncfxMBwcC8NQWirgOjMeAHAsogeaWdXXc4/qtrLf33l5ebC0tKyw1ria+iRLUVERUlJSMGPGDLX2wMBAHD58WOtrkpOTERgYqNbWu3dvxMbGQqVSwcTEBMnJyZg6dapGTVRUVLl9ycvLAwA0adKk3JrCwkIUFhZKj/Pz8wE8+odJpVKV+zp69so+f46DYeB4GA6OhWEoLf3fMYtiVTHHQ88q8/kbVHDKzc1FSUkJbG1t1dptbW2RnZ2t9TXZ2dla64uLi5Gbm4vmzZuXW1PeNoUQCA8Ph4+PDzw8PMrtb2RkJObPn6/RnpiYCAsLi3JfR9UnISFB312gx3A8DAfHQr8e5aZHv4IT9+1DAx7806uCggLZtQYVnMr8c30LIUSFa15oq/9ne2W2OXHiRPz+++84ePBghf2MiIhAeHi49Dg/Px8ODg7o2bMnT9XpmUqlQkJCAnr16sXTEQaA42E4OBaGobRUYOqRR+G1Rw9/nqrTs7IzRnIYVHCysbGBkZGRxpGgnJwcjSNGZezs7LTWGxsbS+GlvBpt25w0aRK2b9+O/fv3o2XLlhX2V6lUQqlUarSbmJjwHyQDwbEwLBwPw8Gx0K/HpxcbG3Ms9K0yn79BXVVnamoKT09PjUPICQkJ6Natm9bXeHt7a9Tv2rULXl5e0gdRXs3j2xRCYOLEidi6dSv27t0LFxeXqnhLREREVIsY1BEnAAgPD0dwcDC8vLzg7e2NNWvWICMjAyEhIQAenR7LzMzExo0bATy6gm7lypUIDw/HhAkTkJycjNjYWLWr5cLCwuDn54fFixdj8ODB2LZtG3bv3q12Ku69997Dt99+i23btqFhw4bSESorKyuYm5tX4ydAREREhsrgglNQUBBu3bqFBQsWICsrCx4eHoiPj4eTkxMAICsrS21NJxcXF8THx2Pq1KlYtWoV7O3tsWLFCgwdOlSq6datGzZv3ozZs2djzpw5aNWqFeLi4tClSxeppmz5gx49eqj1Z926dRgzZsyze8NERFSnGdSaQPREBhecACA0NBShoaFan1u/fr1Gm7+/P1JTUyvc5rBhwzBs2LBynzew5ayIiIjIABnUHCciIqK6oKIrxcmwMTgRERERycTgRERERCQTgxMREZE+cY5tjcLgRERERCQTgxMRERGRTAxORERERDIxOBERERHJxOBERESkR5waXrMwOBERERHJxOBERESkB1w8vGZicCIiIiKSicGJiIiISCYGJyIiIj3iwuE1C4MTERERkUwMTkRERHrAueE1E4MTERERkUwMTkRERHrEKU41C4MTERERkUwMTkRERHqg4AqYNRKDExEREZFMDE5EREREMjE4ERER6ZHgCpg1CoMTERERkUwMTkRERHrAqeE1E4MTERERkUwMTkREREQyGeu7A0RERHXZ5weuwNLcRN/dqNMePrgvu5bBiYiISA8sTI2Q/7AYXx3J0HdX6rzSwgLZtQxOREREevCf4S9i464TcHZxRr16nDmjTw8L7uNjmbUMTkRERHrg18YG9/9bin792sHEhKfq9Ck/P192cGLEJSIiIpKJwYmIiIhIJgYnIiIiIpkYnIiIiIhkYnAiIiIikonBiYiIiEgmBiciIiIimRiciIiIiGRicCIiIiKSicGJiIiISCYGJyIiIiKZGJyIiIiIZGJwIiIiIpKJwYmIiIhIJgYnIiIiIpkYnIiIiIhkYnAiIiIikonBiYiIiEgmBiciIiIimRiciIiIiGRicCIi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upSengyA1j/r1q2TakpLS8XcuXOFnZ2dUCqVws/PT5w6dUptO3///beYOHGiaNKkiTA3NxcDBgwQGRkZajW3bt0So0aNEg0bNhQNGzYUo0aNEnfu3FGruXr1qujfv78wNzcXTZo0ERMnThQPHz58Vm/f4P0zOHEsqtfPP/8sPDw8hFKpFO3atRNr1qxRe57jUT3y8/NFWFiYcHR0FGZmZsLV1VXMmjVLFBYWSjUci9pPIYQQ+jziRURERFRTcI4TERERkUwMTkREREQyMTgRERERycTgRERERCQTgxMRERGRTAxORERERDIxOBERERHJxOBEREREJBODExHVWgUFBVi0aBE6deqEBg0awMzMDC1btoSvry8iIiJw6dIlqdbZ2RnOzs766ywR1QjG+u4AEdGzcO/ePfj4+OD3339H69at8eabb6JRo0a4du0aTp8+jY8//hitWrVCq1at9N1VIqpBGJyIqFaKiorC77//jnHjxmHt2rVQKBRqz1++fBmFhYV66h0R1VQ8VUdEtVJycjIAYOLEiRqhCQBcXFzQrl07XLlyBQqFAlevXsXVq1ehUCikP/PmzVN7zf79+zFw4EDY2NhAqVSiTZs2mD17NgoKCtTq9u3bJ71+//798Pf3R4MGDdCkSROMHDkS169ff2bvm4ieLQYnIqqVmjRpAgC4ePFihXWNGjXC3LlzYWVlBSsrK8ydO1f606NHD6kuJiYGPXr0wOHDhzFgwABMnjwZLVq0wMKFC9GrVy8UFRVpbPvIkSPo1asXrK2tMXnyZLz00kvYtGkTunXrhhs3blTp+yWiaiKIiGqhn376SQAQlpaWYvr06WLPnj3i9u3b5dY7OTkJJycnrc+dPn1aGBsbi44dO4pbt26pPRcZGSkAiKVLl0ptiYmJAoAAIL744gu1+vnz5wsAYuzYsbq/OSLSG4UQQug1uRERPSNLlizBggULcP/+famtVatW6NOnD8LCwtCmTRupveyKuitXrmhsJywsDCtWrMCBAwfg4+Oj9lxpaSns7Ozg6OiIEydOAHh0qq5nz5547rnncPbsWbVThX///TecnJxw//593L17F6amplX4jonoWePkcCKqtaZNm4aQkBDs3LkThw8fxokTJ3D06FGsWrUKsbGxiIuLw6BBg564nSNHjgAAdu7cid27d2s8b2JignPnzmm0d+/eXWN+lbm5OTw9PbFz505cuHABHh4eOr47ItIHBiciqtUaNmyI119/Ha+//joAIC8vDzNnzkR0dDTGjRuHzMzMJx71uX37NgBg4cKFldp3s2bNtLbb2tpKfSGimoWTw4moTrGyssLKlSvh5OSE3NxcnDp16omvsbS0BADk5+dDCFHun3/KycnRur2yieFWVlZP8U6ISB8YnIiozlEoFLCwsFBrMzIyQklJidb6Ll26APjfKTu5Dh06pBGo/v77b6SkpMDc3Bxt27at1PaISP8YnIioVvr8889x/Phxrc9t3boV586dQ6NGjaQ5Rk2aNEFubi4ePnyoUR8aGgpjY2NMmjQJ165d03j+7t27SEtL02g/f/48vvzyS7W2JUuW4ObNmxgxYgQnhhPVQJzjRES10o4dOxASEoLWrVuje/fusLe3x/3795Geno4DBw6gXr16iI6OhlKpBAC8/PLLOHHiBAYOHAhfX1+YmprCx8cHPj4+8PDwQHR0NN59910899xz6NevH1q1aoX8/Hz8+eefSEpKwpgxYxATE6PWh8DAQISGhuLXX39Fu3btkJqait9++w0ODg5YtGiRPj4WInpKXI6AiGql8+fPY/v27UhISMDFixeRlZUFAGjRogV8fHwwadIkeHp6SvX3799HeHg4fvnlF9y4cQOlpaWYO3eu2urhx48fx/Lly7F//37cvHkTVlZWcHR0RGBgIEaPHo127doB+N9yBHPnzsXLL7+M2bNnIyUlBaampujTpw8++eQTODg4VOvnQURVg8GJiKiKPR6c/nnbFiKq2TjHiYiIiEgmBiciIiIimRiciIiIiGTiHCciIiIimXjEiYiIiEgmBiciIiIimRiciIiIiGRicCIiIiKSicGJiIiISCYGJyIiIiKZGJyIiIiIZGJwIiIiIpKJwYmIiIhIpv8HdbIvqflshwgAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# extra code – this cell plots piecewise constant scheduling\n", + "\n", + "boundaries = [50_000, 80_000]\n", + "values = [0.01, 0.005, 0.001]\n", + "\n", + "steps = np.arange(100_000)\n", + "\n", + "lrs = np.full(len(steps), values[0])\n", + "for boundary, value in zip(boundaries, values[1:]):\n", + " lrs[boundary:] = value\n", + "\n", + "plt.plot(steps, lrs, \"-\")\n", + "plt.axis([0, steps.max(), 0, 0.0105])\n", + "plt.xlabel(\"Step\")\n", + "plt.ylabel(\"Learning Rate\")\n", + "plt.title(\"Piecewise Constant Scheduling\", fontsize=14)\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just like we did with exponential scheduling, we could also implement piecewise constant scheduling manually:" + ] + }, + { + "cell_type": "code", + "execution_count": 83, "metadata": {}, "outputs": [], "source": [ @@ -2333,7 +2494,7 @@ }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 84, "metadata": {}, "outputs": [], "source": [ @@ -2352,7 +2513,7 @@ }, { "cell_type": "code", - "execution_count": 80, + "execution_count": 85, "metadata": {}, "outputs": [ { @@ -2360,55 +2521,55 @@ "output_type": "stream", "text": [ "Epoch 1/25\n", - "1719/1719 [==============================] - 3s 1ms/step - loss: 0.5745 - accuracy: 0.7963 - val_loss: 0.4856 - val_accuracy: 0.8256\n", + "1719/1719 [==============================] - 5s 2ms/step - loss: 0.5433 - accuracy: 0.8087 - val_loss: 0.4586 - val_accuracy: 0.8288 - lr: 0.0100\n", "Epoch 2/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.4472 - accuracy: 0.8424 - val_loss: 0.4418 - val_accuracy: 0.8372\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.4487 - accuracy: 0.8439 - val_loss: 0.4608 - val_accuracy: 0.8350 - lr: 0.0100\n", "Epoch 3/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.4216 - accuracy: 0.8505 - val_loss: 0.4162 - val_accuracy: 0.8588\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.4263 - accuracy: 0.8502 - val_loss: 0.4234 - val_accuracy: 0.8568 - lr: 0.0100\n", "Epoch 4/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.4104 - accuracy: 0.8569 - val_loss: 0.4027 - val_accuracy: 0.8592\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.4241 - accuracy: 0.8537 - val_loss: 0.4359 - val_accuracy: 0.8490 - lr: 0.0100\n", "Epoch 5/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3949 - accuracy: 0.8614 - val_loss: 0.4276 - val_accuracy: 0.8510\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.4080 - accuracy: 0.8584 - val_loss: 0.4165 - val_accuracy: 0.8560 - lr: 0.0100\n", "Epoch 6/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3483 - accuracy: 0.8747 - val_loss: 0.3907 - val_accuracy: 0.8676\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3544 - accuracy: 0.8738 - val_loss: 0.3830 - val_accuracy: 0.8662 - lr: 0.0050\n", "Epoch 7/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3336 - accuracy: 0.8783 - val_loss: 0.3981 - val_accuracy: 0.8628\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3464 - accuracy: 0.8761 - val_loss: 0.4026 - val_accuracy: 0.8652 - lr: 0.0050\n", "Epoch 8/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3261 - accuracy: 0.8815 - val_loss: 0.4098 - val_accuracy: 0.8574\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3426 - accuracy: 0.8772 - val_loss: 0.4212 - val_accuracy: 0.8544 - lr: 0.0050\n", "Epoch 9/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3241 - accuracy: 0.8818 - val_loss: 0.4197 - val_accuracy: 0.8514\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3417 - accuracy: 0.8793 - val_loss: 0.4116 - val_accuracy: 0.8612 - lr: 0.0050\n", "Epoch 10/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3183 - accuracy: 0.8833 - val_loss: 0.3668 - val_accuracy: 0.8736\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3339 - accuracy: 0.8804 - val_loss: 0.4090 - val_accuracy: 0.8618 - lr: 0.0050\n", "Epoch 11/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3147 - accuracy: 0.8856 - val_loss: 0.3936 - val_accuracy: 0.8698\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.3309 - accuracy: 0.8819 - val_loss: 0.4033 - val_accuracy: 0.8746 - lr: 0.0050\n", "Epoch 12/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3111 - accuracy: 0.8864 - val_loss: 0.3854 - val_accuracy: 0.8702\n", + "1719/1719 [==============================] - 5s 3ms/step - loss: 0.3270 - accuracy: 0.8826 - val_loss: 0.4518 - val_accuracy: 0.8630 - lr: 0.0050\n", "Epoch 13/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3117 - accuracy: 0.8868 - val_loss: 0.4126 - val_accuracy: 0.8718\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.3270 - accuracy: 0.8837 - val_loss: 0.3714 - val_accuracy: 0.8674 - lr: 0.0050\n", "Epoch 14/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3052 - accuracy: 0.8896 - val_loss: 0.3997 - val_accuracy: 0.8722\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3247 - accuracy: 0.8844 - val_loss: 0.4026 - val_accuracy: 0.8652 - lr: 0.0050\n", "Epoch 15/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3018 - accuracy: 0.8905 - val_loss: 0.4556 - val_accuracy: 0.8678\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.3204 - accuracy: 0.8852 - val_loss: 0.3993 - val_accuracy: 0.8724 - lr: 0.0050\n", "Epoch 16/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2640 - accuracy: 0.9022 - val_loss: 0.4124 - val_accuracy: 0.8782\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2859 - accuracy: 0.8963 - val_loss: 0.3930 - val_accuracy: 0.8736 - lr: 0.0010\n", "Epoch 17/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2567 - accuracy: 0.9040 - val_loss: 0.4121 - val_accuracy: 0.8804\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2781 - accuracy: 0.8978 - val_loss: 0.4021 - val_accuracy: 0.8714 - lr: 0.0010\n", "Epoch 18/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2525 - accuracy: 0.9053 - val_loss: 0.4173 - val_accuracy: 0.8776\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2743 - accuracy: 0.8984 - val_loss: 0.3955 - val_accuracy: 0.8754 - lr: 0.0010\n", "Epoch 19/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2497 - accuracy: 0.9065 - val_loss: 0.4279 - val_accuracy: 0.8816\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2704 - accuracy: 0.8999 - val_loss: 0.4015 - val_accuracy: 0.8756 - lr: 0.0010\n", "Epoch 20/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2478 - accuracy: 0.9066 - val_loss: 0.4330 - val_accuracy: 0.8774\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2683 - accuracy: 0.9015 - val_loss: 0.4161 - val_accuracy: 0.8756 - lr: 0.0010\n", "Epoch 21/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2452 - accuracy: 0.9086 - val_loss: 0.4400 - val_accuracy: 0.8816\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2655 - accuracy: 0.9020 - val_loss: 0.4207 - val_accuracy: 0.8740 - lr: 0.0010\n", "Epoch 22/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2430 - accuracy: 0.9099 - val_loss: 0.4522 - val_accuracy: 0.8796\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.2646 - accuracy: 0.9020 - val_loss: 0.4497 - val_accuracy: 0.8746 - lr: 0.0010\n", "Epoch 23/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2405 - accuracy: 0.9096 - val_loss: 0.4538 - val_accuracy: 0.8812\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2626 - accuracy: 0.9032 - val_loss: 0.4429 - val_accuracy: 0.8762 - lr: 0.0010\n", "Epoch 24/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2390 - accuracy: 0.9102 - val_loss: 0.4929 - val_accuracy: 0.8830\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.2608 - accuracy: 0.9038 - val_loss: 0.4566 - val_accuracy: 0.8748 - lr: 0.0010\n", "Epoch 25/25\n", - "1719/1719 [==============================] - 2s 1ms/step - loss: 0.2377 - accuracy: 0.9105 - val_loss: 0.4720 - val_accuracy: 0.8802\n" + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.2587 - accuracy: 0.9038 - val_loss: 0.4726 - val_accuracy: 0.8770 - lr: 0.0010\n" ] } ], @@ -2428,34 +2589,38 @@ " callbacks=[lr_scheduler])" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We've looked at `InverseTimeDecay`, `ExponentialDecay`, and `PiecewiseConstantDecay`. A few more schedulers are available in `tf.keras.optimizers.schedules`, here is the full list:" + ] + }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 86, "metadata": {}, "outputs": [ { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" + "name": "stdout", + "output_type": "stream", + "text": [ + "• CosineDecay – A LearningRateSchedule that uses a cosine decay with optional warmup.\n", + "• CosineDecayRestarts – A LearningRateSchedule that uses a cosine decay schedule with restarts.\n", + "• ExponentialDecay – A LearningRateSchedule that uses an exponential decay schedule.\n", + "• InverseTimeDecay – A LearningRateSchedule that uses an inverse time decay schedule.\n", + "• LearningRateSchedule – The learning rate schedule base class.\n", + "• PiecewiseConstantDecay – A LearningRateSchedule that uses a piecewise constant decay schedule.\n", + "• PolynomialDecay – A LearningRateSchedule that uses a polynomial decay schedule.\n" + ] } ], "source": [ - "# extra code – this cell plots piecewise constant scheduling\n", - "\n", - "plt.plot(history.epoch, history.history[\"lr\"], \"o-\")\n", - "plt.axis([0, n_epochs - 1, 0, 0.011])\n", - "plt.xlabel(\"Epoch\")\n", - "plt.ylabel(\"Learning Rate\")\n", - "plt.title(\"Piecewise Constant Scheduling\", fontsize=14)\n", - "plt.grid(True)\n", - "plt.show()" + "for name in sorted(dir(tf.keras.optimizers.schedules)):\n", + " if name[0] == name[0].lower(): # must start with capital letter\n", + " continue\n", + " scheduler_class = getattr(tf.keras.optimizers.schedules, name)\n", + " print(f\"• {name} – {scheduler_class.__doc__.splitlines()[0]}\")" ] }, { @@ -2467,7 +2632,7 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 87, "metadata": {}, "outputs": [], "source": [ @@ -2481,7 +2646,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 88, "metadata": {}, "outputs": [ { @@ -2489,55 +2654,55 @@ "output_type": "stream", "text": [ "Epoch 1/25\n", - "1719/1719 [==============================] - 2s 889us/step - loss: 0.6795 - accuracy: 0.7682 - val_loss: 0.4782 - val_accuracy: 0.8314\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.6807 - accuracy: 0.7679 - val_loss: 0.4814 - val_accuracy: 0.8310 - lr: 0.0100\n", "Epoch 2/25\n", - "1719/1719 [==============================] - 1s 841us/step - loss: 0.4670 - accuracy: 0.8368 - val_loss: 0.4440 - val_accuracy: 0.8396\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.4659 - accuracy: 0.8343 - val_loss: 0.4615 - val_accuracy: 0.8306 - lr: 0.0100\n", "Epoch 3/25\n", - "1719/1719 [==============================] - 1s 843us/step - loss: 0.4191 - accuracy: 0.8506 - val_loss: 0.4155 - val_accuracy: 0.8522\n", + "1719/1719 [==============================] - 3s 1ms/step - loss: 0.4201 - accuracy: 0.8505 - val_loss: 0.4199 - val_accuracy: 0.8490 - lr: 0.0100\n", "Epoch 4/25\n", - "1719/1719 [==============================] - 1s 842us/step - loss: 0.3934 - accuracy: 0.8601 - val_loss: 0.3799 - val_accuracy: 0.8606\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3957 - accuracy: 0.8590 - val_loss: 0.3845 - val_accuracy: 0.8614 - lr: 0.0100\n", "Epoch 5/25\n", - "1719/1719 [==============================] - 1s 830us/step - loss: 0.3708 - accuracy: 0.8681 - val_loss: 0.3664 - val_accuracy: 0.8670\n", + "1719/1719 [==============================] - 2s 1ms/step - loss: 0.3754 - accuracy: 0.8658 - val_loss: 0.3742 - val_accuracy: 0.8614 - lr: 0.0100\n", "Epoch 6/25\n", - "1719/1719 [==============================] - 1s 824us/step - loss: 0.3541 - accuracy: 0.8730 - val_loss: 0.3752 - val_accuracy: 0.8654\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3588 - accuracy: 0.8709 - val_loss: 0.3853 - val_accuracy: 0.8628 - lr: 0.0100\n", "Epoch 7/25\n", - "1719/1719 [==============================] - 1s 831us/step - loss: 0.3416 - accuracy: 0.8762 - val_loss: 0.3545 - val_accuracy: 0.8716\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3469 - accuracy: 0.8740 - val_loss: 0.3627 - val_accuracy: 0.8690 - lr: 0.0100\n", "Epoch 8/25\n", - "1719/1719 [==============================] - 1s 832us/step - loss: 0.3300 - accuracy: 0.8807 - val_loss: 0.3597 - val_accuracy: 0.8678\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.3346 - accuracy: 0.8785 - val_loss: 0.3574 - val_accuracy: 0.8680 - lr: 0.0100\n", "Epoch 9/25\n", - "1719/1719 [==============================] - 1s 817us/step - loss: 0.3206 - accuracy: 0.8845 - val_loss: 0.3323 - val_accuracy: 0.8804\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.3244 - accuracy: 0.8828 - val_loss: 0.3410 - val_accuracy: 0.8748 - lr: 0.0100\n", "Epoch 10/25\n", - "1719/1719 [==============================] - 1s 859us/step - loss: 0.3108 - accuracy: 0.8869 - val_loss: 0.3406 - val_accuracy: 0.8766\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3149 - accuracy: 0.8850 - val_loss: 0.3410 - val_accuracy: 0.8720 - lr: 0.0100\n", "Epoch 11/25\n", - "1719/1719 [==============================] - 1s 849us/step - loss: 0.3033 - accuracy: 0.8893 - val_loss: 0.3551 - val_accuracy: 0.8696\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.3074 - accuracy: 0.8879 - val_loss: 0.3629 - val_accuracy: 0.8678 - lr: 0.0100\n", "Epoch 12/25\n", - "1719/1719 [==============================] - 1s 822us/step - loss: 0.2954 - accuracy: 0.8931 - val_loss: 0.3324 - val_accuracy: 0.8810\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2990 - accuracy: 0.8920 - val_loss: 0.3379 - val_accuracy: 0.8746 - lr: 0.0100\n", "Epoch 13/25\n", - "1719/1719 [==============================] - 1s 796us/step - loss: 0.2893 - accuracy: 0.8956 - val_loss: 0.3159 - val_accuracy: 0.8810\n", + "1719/1719 [==============================] - 3s 1ms/step - loss: 0.2929 - accuracy: 0.8938 - val_loss: 0.3223 - val_accuracy: 0.8808 - lr: 0.0100\n", "Epoch 14/25\n", - "1719/1719 [==============================] - 1s 806us/step - loss: 0.2826 - accuracy: 0.8969 - val_loss: 0.3435 - val_accuracy: 0.8792\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2867 - accuracy: 0.8947 - val_loss: 0.3405 - val_accuracy: 0.8754 - lr: 0.0100\n", "Epoch 15/25\n", - "1719/1719 [==============================] - 1s 830us/step - loss: 0.2762 - accuracy: 0.8995 - val_loss: 0.3470 - val_accuracy: 0.8792\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2807 - accuracy: 0.8972 - val_loss: 0.3480 - val_accuracy: 0.8730 - lr: 0.0100\n", "Epoch 16/25\n", - "1719/1719 [==============================] - 1s 813us/step - loss: 0.2701 - accuracy: 0.9019 - val_loss: 0.3276 - val_accuracy: 0.8794\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.2743 - accuracy: 0.8998 - val_loss: 0.3350 - val_accuracy: 0.8766 - lr: 0.0100\n", "Epoch 17/25\n", - "1719/1719 [==============================] - 1s 821us/step - loss: 0.2656 - accuracy: 0.9025 - val_loss: 0.3334 - val_accuracy: 0.8796\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2694 - accuracy: 0.9019 - val_loss: 0.3421 - val_accuracy: 0.8764 - lr: 0.0100\n", "Epoch 18/25\n", - "1719/1719 [==============================] - 1s 814us/step - loss: 0.2608 - accuracy: 0.9040 - val_loss: 0.3246 - val_accuracy: 0.8844\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2631 - accuracy: 0.9032 - val_loss: 0.3360 - val_accuracy: 0.8772 - lr: 0.0100\n", "Epoch 19/25\n", - "1719/1719 [==============================] - 1s 816us/step - loss: 0.2417 - accuracy: 0.9120 - val_loss: 0.3155 - val_accuracy: 0.8798\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2445 - accuracy: 0.9110 - val_loss: 0.3162 - val_accuracy: 0.8874 - lr: 0.0050\n", "Epoch 20/25\n", - "1719/1719 [==============================] - 1s 821us/step - loss: 0.2387 - accuracy: 0.9135 - val_loss: 0.3149 - val_accuracy: 0.8826\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2410 - accuracy: 0.9131 - val_loss: 0.3221 - val_accuracy: 0.8812 - lr: 0.0050\n", "Epoch 21/25\n", - "1719/1719 [==============================] - 1s 825us/step - loss: 0.2359 - accuracy: 0.9143 - val_loss: 0.3076 - val_accuracy: 0.8844\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2380 - accuracy: 0.9137 - val_loss: 0.3166 - val_accuracy: 0.8828 - lr: 0.0050\n", "Epoch 22/25\n", - "1719/1719 [==============================] - 1s 824us/step - loss: 0.2328 - accuracy: 0.9148 - val_loss: 0.3156 - val_accuracy: 0.8854\n", + "1719/1719 [==============================] - 4s 2ms/step - loss: 0.2351 - accuracy: 0.9148 - val_loss: 0.3146 - val_accuracy: 0.8854 - lr: 0.0050\n", "Epoch 23/25\n", - "1719/1719 [==============================] - 1s 821us/step - loss: 0.2304 - accuracy: 0.9157 - val_loss: 0.3225 - val_accuracy: 0.8808\n", + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2330 - accuracy: 0.9160 - val_loss: 0.3191 - val_accuracy: 0.8836 - lr: 0.0050\n", "Epoch 24/25\n", - "1719/1719 [==============================] - 1s 827us/step - loss: 0.2274 - accuracy: 0.9176 - val_loss: 0.3158 - val_accuracy: 0.8834\n", + "1719/1719 [==============================] - 3s 1ms/step - loss: 0.2300 - accuracy: 0.9161 - val_loss: 0.3175 - val_accuracy: 0.8878 - lr: 0.0050\n", "Epoch 25/25\n", - "1719/1719 [==============================] - 1s 825us/step - loss: 0.2249 - accuracy: 0.9183 - val_loss: 0.3144 - val_accuracy: 0.8852\n" + "1719/1719 [==============================] - 3s 2ms/step - loss: 0.2276 - accuracy: 0.9174 - val_loss: 0.3205 - val_accuracy: 0.8868 - lr: 0.0050\n" ] } ], @@ -2550,7 +2715,7 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 89, "metadata": {}, "outputs": [ { @@ -2585,85 +2750,6 @@ "plt.show()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### tf.keras schedulers" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": {}, - "outputs": [], - "source": [ - "import math\n", - "\n", - "batch_size = 32\n", - "n_epochs = 25\n", - "n_steps = n_epochs * math.ceil(len(X_train) / batch_size)\n", - "scheduled_learning_rate = tf.keras.optimizers.schedules.ExponentialDecay(\n", - " initial_learning_rate=0.01, decay_steps=n_steps, decay_rate=0.1)\n", - "optimizer = tf.keras.optimizers.SGD(learning_rate=scheduled_learning_rate)" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 1/10\n", - "1719/1719 [==============================] - 2s 864us/step - loss: 0.6808 - accuracy: 0.7683 - val_loss: 0.4806 - val_accuracy: 0.8268\n", - "Epoch 2/10\n", - "1719/1719 [==============================] - 1s 812us/step - loss: 0.4686 - accuracy: 0.8359 - val_loss: 0.4420 - val_accuracy: 0.8408\n", - "Epoch 3/10\n", - "1719/1719 [==============================] - 1s 809us/step - loss: 0.4221 - accuracy: 0.8494 - val_loss: 0.4108 - val_accuracy: 0.8530\n", - "Epoch 4/10\n", - "1719/1719 [==============================] - 1s 828us/step - loss: 0.3976 - accuracy: 0.8592 - val_loss: 0.3867 - val_accuracy: 0.8582\n", - "Epoch 5/10\n", - "1719/1719 [==============================] - 1s 825us/step - loss: 0.3775 - accuracy: 0.8655 - val_loss: 0.3784 - val_accuracy: 0.8620\n", - "Epoch 6/10\n", - "1719/1719 [==============================] - 1s 817us/step - loss: 0.3633 - accuracy: 0.8705 - val_loss: 0.3796 - val_accuracy: 0.8624\n", - "Epoch 7/10\n", - "1719/1719 [==============================] - 1s 843us/step - loss: 0.3518 - accuracy: 0.8737 - val_loss: 0.3662 - val_accuracy: 0.8662\n", - "Epoch 8/10\n", - "1719/1719 [==============================] - 1s 805us/step - loss: 0.3422 - accuracy: 0.8779 - val_loss: 0.3707 - val_accuracy: 0.8628\n", - "Epoch 9/10\n", - "1719/1719 [==============================] - 1s 821us/step - loss: 0.3339 - accuracy: 0.8809 - val_loss: 0.3475 - val_accuracy: 0.8696\n", - "Epoch 10/10\n", - "1719/1719 [==============================] - 1s 829us/step - loss: 0.3266 - accuracy: 0.8826 - val_loss: 0.3473 - val_accuracy: 0.8710\n" - ] - } - ], - "source": [ - "# extra code – build and train the model\n", - "model = build_and_train_model(optimizer)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For piecewise constant scheduling, try this:" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "metadata": {}, - "outputs": [], - "source": [ - "# extra code – shows how to use PiecewiseConstantDecay\n", - "scheduled_learning_rate = tf.keras.optimizers.schedules.PiecewiseConstantDecay(\n", - " boundaries=[5. * n_steps_per_epoch, 15. * n_steps_per_epoch],\n", - " values=[0.01, 0.005, 0.001])" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -2680,7 +2766,7 @@ }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 90, "metadata": {}, "outputs": [], "source": [ @@ -2715,7 +2801,7 @@ }, { "cell_type": "code", - "execution_count": 89, + "execution_count": 91, "metadata": {}, "outputs": [], "source": [ @@ -2743,7 +2829,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 92, "metadata": {}, "outputs": [], "source": [ @@ -2767,7 +2853,7 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 93, "metadata": {}, "outputs": [], "source": [ @@ -2786,7 +2872,7 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 94, "metadata": {}, "outputs": [ { @@ -2832,7 +2918,7 @@ }, { "cell_type": "code", - "execution_count": 93, + "execution_count": 95, "metadata": {}, "outputs": [], "source": [ @@ -2873,7 +2959,7 @@ }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 96, "metadata": {}, "outputs": [ { @@ -2962,7 +3048,7 @@ }, { "cell_type": "code", - "execution_count": 95, + "execution_count": 97, "metadata": {}, "outputs": [], "source": [ @@ -2980,7 +3066,7 @@ }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 98, "metadata": {}, "outputs": [], "source": [ @@ -2989,7 +3075,7 @@ }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 99, "metadata": {}, "outputs": [], "source": [ @@ -3010,7 +3096,7 @@ }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 100, "metadata": {}, "outputs": [ { @@ -3042,7 +3128,7 @@ }, { "cell_type": "code", - "execution_count": 99, + "execution_count": 101, "metadata": {}, "outputs": [], "source": [ @@ -3051,7 +3137,7 @@ }, { "cell_type": "code", - "execution_count": 100, + "execution_count": 102, "metadata": {}, "outputs": [], "source": [ @@ -3070,7 +3156,7 @@ }, { "cell_type": "code", - "execution_count": 101, + "execution_count": 103, "metadata": {}, "outputs": [ { @@ -3118,7 +3204,7 @@ }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 104, "metadata": {}, "outputs": [ { @@ -3134,7 +3220,7 @@ "[0.30816400051116943, 0.8849090933799744]" ] }, - "execution_count": 102, + "execution_count": 104, "metadata": {}, "output_type": "execute_result" } @@ -3145,7 +3231,7 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 105, "metadata": {}, "outputs": [ { @@ -3161,7 +3247,7 @@ "[0.3628920316696167, 0.8700000047683716]" ] }, - "execution_count": 103, + "execution_count": 105, "metadata": {}, "output_type": "execute_result" } @@ -3186,7 +3272,7 @@ }, { "cell_type": "code", - "execution_count": 104, + "execution_count": 106, "metadata": {}, "outputs": [], "source": [ @@ -3195,7 +3281,7 @@ }, { "cell_type": "code", - "execution_count": 105, + "execution_count": 107, "metadata": {}, "outputs": [], "source": [ @@ -3206,7 +3292,7 @@ }, { "cell_type": "code", - "execution_count": 106, + "execution_count": 108, "metadata": {}, "outputs": [ { @@ -3216,7 +3302,7 @@ " 0.844]], dtype=float32)" ] }, - "execution_count": 106, + "execution_count": 108, "metadata": {}, "output_type": "execute_result" } @@ -3227,7 +3313,7 @@ }, { "cell_type": "code", - "execution_count": 107, + "execution_count": 109, "metadata": {}, "outputs": [ { @@ -3237,7 +3323,7 @@ " 0.723], dtype=float32)" ] }, - "execution_count": 107, + "execution_count": 109, "metadata": {}, "output_type": "execute_result" } @@ -3248,7 +3334,7 @@ }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 110, "metadata": {}, "outputs": [ { @@ -3258,7 +3344,7 @@ " 0.183], dtype=float32)" ] }, - "execution_count": 108, + "execution_count": 110, "metadata": {}, "output_type": "execute_result" } @@ -3270,7 +3356,7 @@ }, { "cell_type": "code", - "execution_count": 109, + "execution_count": 111, "metadata": {}, "outputs": [ { @@ -3279,7 +3365,7 @@ "0.8717" ] }, - "execution_count": 109, + "execution_count": 111, "metadata": {}, "output_type": "execute_result" } @@ -3292,7 +3378,7 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 112, "metadata": {}, "outputs": [], "source": [ @@ -3303,7 +3389,7 @@ }, { "cell_type": "code", - "execution_count": 111, + "execution_count": 113, "metadata": {}, "outputs": [], "source": [ @@ -3318,7 +3404,7 @@ }, { "cell_type": "code", - "execution_count": 112, + "execution_count": 114, "metadata": {}, "outputs": [ { @@ -3363,7 +3449,7 @@ }, { "cell_type": "code", - "execution_count": 113, + "execution_count": 115, "metadata": {}, "outputs": [ { @@ -3373,7 +3459,7 @@ " dtype=float32)" ] }, - "execution_count": 113, + "execution_count": 115, "metadata": {}, "output_type": "execute_result" } @@ -3394,7 +3480,7 @@ }, { "cell_type": "code", - "execution_count": 114, + "execution_count": 116, "metadata": {}, "outputs": [], "source": [ @@ -3405,7 +3491,7 @@ }, { "cell_type": "code", - "execution_count": 115, + "execution_count": 117, "metadata": {}, "outputs": [ { @@ -3500,7 +3586,7 @@ }, { "cell_type": "code", - "execution_count": 116, + "execution_count": 118, "metadata": {}, "outputs": [], "source": [ @@ -3531,7 +3617,7 @@ }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 119, "metadata": {}, "outputs": [], "source": [ @@ -3547,7 +3633,7 @@ }, { "cell_type": "code", - "execution_count": 118, + "execution_count": 120, "metadata": {}, "outputs": [], "source": [ @@ -3566,7 +3652,7 @@ }, { "cell_type": "code", - "execution_count": 119, + "execution_count": 121, "metadata": {}, "outputs": [], "source": [ @@ -3588,7 +3674,7 @@ }, { "cell_type": "code", - "execution_count": 120, + "execution_count": 122, "metadata": {}, "outputs": [], "source": [ @@ -3604,7 +3690,7 @@ }, { "cell_type": "code", - "execution_count": 121, + "execution_count": 123, "metadata": {}, "outputs": [ { @@ -3641,7 +3727,7 @@ }, { "cell_type": "code", - "execution_count": 122, + "execution_count": 124, "metadata": {}, "outputs": [ { @@ -3727,7 +3813,7 @@ "" ] }, - "execution_count": 122, + "execution_count": 124, "metadata": {}, "output_type": "execute_result" } @@ -3740,7 +3826,7 @@ }, { "cell_type": "code", - "execution_count": 123, + "execution_count": 125, "metadata": {}, "outputs": [ { @@ -3756,7 +3842,7 @@ "[1.5061508417129517, 0.4675999879837036]" ] }, - "execution_count": 123, + "execution_count": 125, "metadata": {}, "output_type": "execute_result" } @@ -3793,7 +3879,7 @@ }, { "cell_type": "code", - "execution_count": 124, + "execution_count": 126, "metadata": {}, "outputs": [ { @@ -3879,7 +3965,7 @@ "[1.4236289262771606, 0.5073999762535095]" ] }, - "execution_count": 124, + "execution_count": 126, "metadata": {}, "output_type": "execute_result" } @@ -3936,7 +4022,7 @@ }, { "cell_type": "code", - "execution_count": 125, + "execution_count": 127, "metadata": { "scrolled": true }, @@ -4030,7 +4116,7 @@ "[1.4607702493667603, 0.5026000142097473]" ] }, - "execution_count": 125, + "execution_count": 127, "metadata": {}, "output_type": "execute_result" } @@ -4091,7 +4177,7 @@ }, { "cell_type": "code", - "execution_count": 126, + "execution_count": 128, "metadata": {}, "outputs": [ { @@ -4171,7 +4257,7 @@ "[1.4779616594314575, 0.498199999332428]" ] }, - "execution_count": 126, + "execution_count": 128, "metadata": {}, "output_type": "execute_result" } @@ -4232,7 +4318,7 @@ }, { "cell_type": "code", - "execution_count": 127, + "execution_count": 129, "metadata": {}, "outputs": [], "source": [ @@ -4250,7 +4336,7 @@ }, { "cell_type": "code", - "execution_count": 128, + "execution_count": 130, "metadata": {}, "outputs": [], "source": [ @@ -4273,7 +4359,7 @@ }, { "cell_type": "code", - "execution_count": 129, + "execution_count": 131, "metadata": {}, "outputs": [], "source": [ @@ -4295,7 +4381,7 @@ }, { "cell_type": "code", - "execution_count": 130, + "execution_count": 132, "metadata": {}, "outputs": [ { @@ -4304,7 +4390,7 @@ "0.4984" ] }, - "execution_count": 130, + "execution_count": 132, "metadata": {}, "output_type": "execute_result" } @@ -4336,7 +4422,7 @@ }, { "cell_type": "code", - "execution_count": 131, + "execution_count": 133, "metadata": {}, "outputs": [], "source": [ @@ -4360,7 +4446,7 @@ }, { "cell_type": "code", - "execution_count": 132, + "execution_count": 134, "metadata": {}, "outputs": [ { @@ -4392,7 +4478,7 @@ }, { "cell_type": "code", - "execution_count": 133, + "execution_count": 135, "metadata": {}, "outputs": [], "source": [ @@ -4416,7 +4502,7 @@ }, { "cell_type": "code", - "execution_count": 134, + "execution_count": 136, "metadata": {}, "outputs": [ {