{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "hide-cell", "hide-output" ] }, "outputs": [], "source": [ "# Install the necessary dependencies\n", "import os\n", "import sys \n", "!{sys.executable} -m pip install --quiet pandas scikit-learn numpy matplotlib jupyterlab_myst ipython imageio scikit-image requests\n", "# Convolutional Neural Networks " ] }, { "cell_type": "markdown", "metadata": { "tags": [ "remove-cell" ] }, "source": [ "---\n", "license:\n", " code: MIT\n", " content: CC-BY-4.0\n", "github: https://github.com/ocademy-ai/machine-learning\n", "venue: By Ocademy\n", "open_access: true\n", "bibliography:\n", " - https://raw.githubusercontent.com/ocademy-ai/machine-learning/main/open-machine-learning-jupyter-book/references.bib\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Convolutional Neural Networks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Convolutional Neural Networks (CNNs) are responsible for the latest major breakthroughs in image recognition in the past few years.\n", "\n", "In mathematics, a convolution is a function that is applied over the output of another function. In our case, we will consider applying a matrix multiplication (filter) across an image. See the below diagram for an example of how this may work.\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/html": [ "\n", "

\n", "\n", "A demo of convolution function. [source]\n", "

\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.display import HTML\n", "display(HTML(\"\"\"\n", "

\n", "\n", "A demo of convolution function. [source]\n", "

\n", "\"\"\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "CNNs generally follow a structure. The main convolutional setup is (input array) -> (convolutional filter layer) -> (Pooling) -> (Activation layer). The above diagram depicts how a convolutional layer may create one feature. Generally, filters are multidimensional and end up creating many features. It is also common to have a completely separate filter-feature creator of different sizes acting on the same layer. After this convolutional filter, it is common to apply a pooling layer. This pooling may be a max-pooling or an average pooling or another aggregation. One of the key concepts here is that the pooling layer has no parameters while decreasing the layer size. See the below diagram for an example of max-pooling.\n", "\n", "\n", "\n", "After the max pooling, there is generally an activation layer. One of the more common activation layers is the ReLU (Rectified Linear Unit)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## MNIST handwritten digits\n", "\n", "Here we illustrate how to use a simple CNN with three convolutional units to predict the MNIST handwritten digits. \n", "\n", "```{note}\n", "There is good reason why this dataset is used like the 'hello world' of image recognition, it is fairly compact while having a decent amount of training, test, and validation data. It only has one channel (black and white) and only ten possible outputs (0-9).\n", "```\n", "\n", "When the script is done training the model, you should see similar output to the following graphs.\n", "\n", "\n", "\n", "Training and test loss (left) and test batch accuracy (right).\n", "\n", "\n", "\n", "A random set of 6 digits with actual and predicted labels. You can see a prediction failure in the lower right box.\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/html": [ "\n", "

\n", "\n", "A demo of CNN. [source]\n", "

\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.display import HTML\n", "display(HTML(\"\"\"\n", "

\n", "\n", "A demo of CNN. [source]\n", "

\n", "\"\"\"))" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/html": [ "\n", "

\n", "\n", "A demo of CNN. [source]\n", "

\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.display import HTML\n", "display(HTML(\"\"\"\n", "

\n", "\n", "A demo of CNN. [source]\n", "

\n", "\"\"\")) " ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "text/html": [ "\n", "

\n", "\n", "A demo of CNN. [source]\n", "

\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.display import HTML\n", "display(HTML(\"\"\"\n", "

\n", "\n", "A demo of CNN. [source]\n", "

\n", "\"\"\")) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load dataset and data preprocessing" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", "from tensorflow.keras.datasets import mnist\n", "import matplotlib.pyplot as plt\n", "import warnings\n", "\n", "warnings.filterwarnings(\"ignore\")\n", "\n", "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n", "\n", "x_train = x_train.reshape(-1, 28, 28, 1).astype('float32') / 255.0\n", "x_test = x_test.reshape(-1, 28, 28, 1).astype('float32') / 255.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build model" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "warnings.filterwarnings(\"ignore\")\n", "\n", "model = tf.keras.Sequential([\n", " tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),\n", " tf.keras.layers.MaxPooling2D((2, 2)),\n", " tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),\n", " tf.keras.layers.MaxPooling2D((2, 2)),\n", " tf.keras.layers.Flatten(),\n", " tf.keras.layers.Dense(64, activation='relu'),\n", " tf.keras.layers.Dense(10, activation='softmax')\n", "])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Compile model" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "warnings.filterwarnings(\"ignore\")\n", "\n", "model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train model" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/5\n", "1875/1875 [==============================] - 16s 9ms/step - loss: 0.0866 - accuracy: 0.9734 - val_loss: 0.0454 - val_accuracy: 0.9839\n", "Epoch 2/5\n", "1875/1875 [==============================] - 16s 9ms/step - loss: 0.0430 - accuracy: 0.9865 - val_loss: 0.0362 - val_accuracy: 0.9872\n", "Epoch 3/5\n", "1875/1875 [==============================] - 16s 9ms/step - loss: 0.0298 - accuracy: 0.9904 - val_loss: 0.0351 - val_accuracy: 0.9878\n", "Epoch 4/5\n", "1875/1875 [==============================] - 16s 9ms/step - loss: 0.0228 - accuracy: 0.9926 - val_loss: 0.0283 - val_accuracy: 0.9902\n", "Epoch 5/5\n", "1875/1875 [==============================] - 17s 9ms/step - loss: 0.0164 - accuracy: 0.9946 - val_loss: 0.0291 - val_accuracy: 0.9912\n" ] } ], "source": [ "warnings.filterwarnings(\"ignore\")\n", "history = model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Test model" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "313/313 - 0s - loss: 0.0330 - accuracy: 0.9899 - 419ms/epoch - 1ms/step\n", "Test accuracy: 0.9898999929428101\n" ] } ], "source": [ "test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)\n", "print('Test accuracy:', test_acc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualizing the training process" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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jfXr1+Ozzz7Tbhs3bhzeeecdLFy4EFKpFKdOncLAgQO1Aelhubm5yMrKwtNPP23Q+egTEBCg831RUREWLlyIn376CVlZWSgrK8P9+/eRnp4OADh16hSkUimefPJJvZ/n4uKCYcOGITY2Fv3798dPP/2EkpISvPzyy49dKzVfuYUl2t6hC9nlA6pT84ug7xnJ1uam6Kqdbl8+fqiTozXMTDl6g1oehqSmIrMs79UR47gGmjp1KmbMmIFVq1YhLi4OXl5e2l/oy5Ytw4oVK7By5Ur06NEDVlZWiIyMRGlpaZ0+W9+T6at2vR89ehRjxozBwoULMWTIEG2PzLJlyww6D0EQauzWf3h71SAjkUig0VT/v+VKe/bsQWZmJkaPHq2zXa1WY+/evQgPD691ptujZsGZmJho669U0xipquH0//7v/7Bnzx7861//QseOHSGXy/HSSy9pr09dZuC99tprGD9+PFasWIG4uDiMHj0alpaG/z2i5qfycR0XqgyovlWo1Nveycb8wWDqijWI3O3kfDYZtRoMSU1FIjHotpeYXnnlFcycORP//e9/sX79erz++uvaUHHw4EGMHDkS48aNA1A+xujy5cvo2rVrnT67W7duSE9PR1ZWFlxdy28/HjlyRKfN4cOH4eXlhblz52q3paWl6bQxMzODWl3785e6deuG9evXo6ioSBsmDh8+DBMTE51bX4Zat24dxowZo1MfAHz88cdYt24dwsPD0bNnT6xfvx4qlapaCLO2toa3tzf279+vvaX5sMrZgNnZ2ejTpw8AVFvqoCYHDx7EpEmTMGrUKADAvXv3kJqaqn2/R48e0Gg0+O2337S326p67rnnYGVlhZiYGPzvf//D77//XqdjU/OiLFPj8s172kB0vpbHdUgkQAcHK3R7KBB1c7WBQxtzESonaj4YkqiaNm3aYPTo0fjggw9QUFCASZMmad/r2LEjtm7disTERNjZ2WH58uXIycmpc0h65pln4OvriwkTJmDZsmVQKBTVwkbHjh2Rnp6O+Ph49OvXD7t27cL27dt12nh7e+P69es4deoU3N3dYW1tDXNz3X/QX331VXz44YeYOHEiFixYgFu3buGtt97C+PHjtbfaDHXr1i38+OOP2LlzJ/z8/HTemzhxIoYNG4Zbt25hxowZ+PzzzzFmzBhERUXB1tYWR48eRf/+/eHr64sF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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(history.history['accuracy'], label='Training Accuracy')\n", "plt.plot(history.history['val_accuracy'], label='Validation Accuracy')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Accuracy')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load data" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import tensorflow as tf\n", "from tensorflow.keras.datasets import mnist\n", "\n", "(train_images, train_labels), (test_images, test_labels) = mnist.load_data()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Normalize pixel values to the range [0, 1]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "train_images = train_images / 255.0\n", "test_images = test_images / 255.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Convert images to 4D tensors (batch_size, height, width, channels)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "train_images = np.expand_dims(train_images, axis=-1)\n", "test_images = np.expand_dims(test_images, axis=-1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set model parameters" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "batch_size = 100\n", "learning_rate = 0.005\n", "evaluation_size = 500\n", "image_width = train_images.shape[1]\n", "image_height = train_images.shape[2]\n", "target_size = np.max(train_labels) + 1\n", "num_channels = 1 # greyscale = 1 channel\n", "generations = 500\n", "eval_every = 5\n", "conv1_features = 25\n", "conv2_features = 50\n", "max_pool_size1 = 2 # NxN window for 1st max pool layer\n", "max_pool_size2 = 2 # NxN window for 2nd max pool layer\n", "fully_connected_size1 = 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define the model" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "model = tf.keras.Sequential([\n", " tf.keras.layers.Conv2D(conv1_features, (4, 4), activation='relu', input_shape=(image_width, image_height, num_channels)),\n", " tf.keras.layers.MaxPooling2D((max_pool_size1, max_pool_size1)),\n", " tf.keras.layers.Conv2D(conv2_features, (4, 4), activation='relu'),\n", " tf.keras.layers.MaxPooling2D((max_pool_size2, max_pool_size2)),\n", " tf.keras.layers.Flatten(),\n", " tf.keras.layers.Dense(fully_connected_size1, activation='relu'),\n", " tf.keras.layers.Dense(target_size)\n", "])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Compile the model" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=learning_rate, momentum=0.9),\n", " loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", " metrics=['accuracy'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train the model" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Generation # 5. Train Loss: 2.29. Train Acc (Test Acc): 11.00% (10.00%)\n", "Generation # 10. Train Loss: 2.30. Train Acc (Test Acc): 8.00% (14.20%)\n", "Generation # 15. Train Loss: 2.25. Train Acc (Test Acc): 30.00% (31.80%)\n", "Generation # 20. Train Loss: 2.25. Train Acc (Test Acc): 33.00% (30.00%)\n", "Generation # 25. Train Loss: 2.22. Train Acc (Test Acc): 39.00% (38.20%)\n", "Generation # 30. Train Loss: 2.21. Train Acc (Test Acc): 37.00% (36.40%)\n", "Generation # 35. Train Loss: 2.15. Train Acc (Test Acc): 43.00% (48.60%)\n", "Generation # 40. Train Loss: 2.10. Train Acc (Test Acc): 50.00% (51.20%)\n", "Generation # 45. Train Loss: 2.05. Train Acc (Test Acc): 44.00% (51.40%)\n", "Generation # 50. Train Loss: 1.97. Train Acc (Test Acc): 52.00% (60.60%)\n", "Generation # 55. Train Loss: 1.84. Train Acc (Test Acc): 63.00% (59.20%)\n", "Generation # 60. Train Loss: 1.55. Train Acc (Test Acc): 69.00% (66.20%)\n", "Generation # 65. Train Loss: 1.40. Train Acc (Test Acc): 62.00% (62.40%)\n", "Generation # 70. Train Loss: 1.13. Train Acc (Test Acc): 75.00% (73.40%)\n", "Generation # 75. Train Loss: 0.95. Train Acc (Test Acc): 75.00% (74.40%)\n", "Generation # 80. Train Loss: 0.67. Train Acc (Test Acc): 81.00% (80.80%)\n", "Generation # 85. Train Loss: 0.74. Train Acc (Test Acc): 77.00% (80.40%)\n", "Generation # 90. Train Loss: 0.69. Train Acc (Test Acc): 84.00% (79.80%)\n", "Generation # 95. Train Loss: 0.57. Train Acc (Test Acc): 83.00% (83.40%)\n", "Generation # 100. Train Loss: 0.50. Train Acc (Test Acc): 86.00% (83.20%)\n", "Generation # 105. Train Loss: 0.44. Train Acc (Test Acc): 83.00% (88.80%)\n", "Generation # 110. Train Loss: 0.45. Train Acc (Test Acc): 84.00% (82.00%)\n", "Generation # 115. Train Loss: 0.47. Train Acc (Test Acc): 86.00% (86.60%)\n", "Generation # 120. Train Loss: 0.34. Train Acc (Test Acc): 92.00% (89.60%)\n", "Generation # 125. Train Loss: 0.39. Train Acc (Test Acc): 84.00% (85.40%)\n", "Generation # 130. Train Loss: 0.41. Train Acc (Test Acc): 85.00% (87.60%)\n", "Generation # 135. Train Loss: 0.42. Train Acc (Test Acc): 87.00% (89.60%)\n", "Generation # 140. Train Loss: 0.30. Train Acc (Test Acc): 90.00% (90.00%)\n", "Generation # 145. Train Loss: 0.43. Train Acc (Test Acc): 83.00% (90.40%)\n", "Generation # 150. Train Loss: 0.63. Train Acc (Test Acc): 86.00% (90.40%)\n", "Generation # 155. Train Loss: 0.34. Train Acc (Test Acc): 94.00% (90.80%)\n", "Generation # 160. Train Loss: 0.40. Train Acc (Test Acc): 89.00% (92.80%)\n", "Generation # 165. Train Loss: 0.35. Train Acc (Test Acc): 89.00% (93.80%)\n", "Generation # 170. Train Loss: 0.31. Train Acc (Test Acc): 89.00% (89.80%)\n", "Generation # 175. Train Loss: 0.32. Train Acc (Test Acc): 89.00% (92.60%)\n", "Generation # 180. Train Loss: 0.20. Train Acc (Test Acc): 97.00% (89.40%)\n", "Generation # 185. Train Loss: 0.30. Train Acc (Test Acc): 92.00% (92.40%)\n", "Generation # 190. Train Loss: 0.28. Train Acc (Test Acc): 92.00% (91.80%)\n", "Generation # 195. Train Loss: 0.28. Train Acc (Test Acc): 89.00% (91.80%)\n", "Generation # 200. Train Loss: 0.25. Train Acc (Test Acc): 93.00% (91.40%)\n", "Generation # 205. Train Loss: 0.17. Train Acc (Test Acc): 96.00% (91.60%)\n", "Generation # 210. Train Loss: 0.26. Train Acc (Test Acc): 91.00% (93.60%)\n", "Generation # 215. Train Loss: 0.29. Train Acc (Test Acc): 89.00% (91.60%)\n", "Generation # 220. Train Loss: 0.25. Train Acc (Test Acc): 92.00% (91.60%)\n", "Generation # 225. Train Loss: 0.28. Train Acc (Test Acc): 88.00% (92.00%)\n", "Generation # 230. Train Loss: 0.21. Train Acc (Test Acc): 91.00% (92.00%)\n", "Generation # 235. Train Loss: 0.33. Train Acc (Test Acc): 87.00% (91.20%)\n", "Generation # 240. Train Loss: 0.23. Train Acc (Test Acc): 95.00% (90.80%)\n", "Generation # 245. Train Loss: 0.21. Train Acc (Test Acc): 91.00% (92.20%)\n", "Generation # 250. Train Loss: 0.20. Train Acc (Test Acc): 94.00% (92.40%)\n", "Generation # 255. Train Loss: 0.27. Train Acc (Test Acc): 95.00% (91.80%)\n", "Generation # 260. Train Loss: 0.29. Train Acc (Test Acc): 94.00% (91.80%)\n", "Generation # 265. Train Loss: 0.25. Train Acc (Test Acc): 93.00% (91.80%)\n", "Generation # 270. Train Loss: 0.38. Train Acc (Test Acc): 90.00% (93.40%)\n", "Generation # 275. Train Loss: 0.29. Train Acc (Test Acc): 92.00% (94.60%)\n", "Generation # 280. Train Loss: 0.31. Train Acc (Test Acc): 93.00% (95.00%)\n", "Generation # 285. Train Loss: 0.36. Train Acc (Test Acc): 90.00% (94.80%)\n", "Generation # 290. Train Loss: 0.15. Train Acc (Test Acc): 94.00% (93.00%)\n", "Generation # 295. Train Loss: 0.18. Train Acc (Test Acc): 95.00% (95.20%)\n", "Generation # 300. Train Loss: 0.32. Train Acc (Test Acc): 87.00% (93.00%)\n", "Generation # 305. Train Loss: 0.16. Train Acc (Test Acc): 94.00% (92.80%)\n", "Generation # 310. Train Loss: 0.09. Train Acc (Test Acc): 98.00% (94.60%)\n", "Generation # 315. Train Loss: 0.15. Train Acc (Test Acc): 95.00% (96.20%)\n", "Generation # 320. Train Loss: 0.16. Train Acc (Test Acc): 94.00% (94.40%)\n", "Generation # 325. Train Loss: 0.32. Train Acc (Test Acc): 92.00% (94.00%)\n", "Generation # 330. Train Loss: 0.24. Train Acc (Test Acc): 90.00% (95.80%)\n", "Generation # 335. Train Loss: 0.16. Train Acc (Test Acc): 94.00% (94.60%)\n", "Generation # 340. Train Loss: 0.17. Train Acc (Test Acc): 96.00% (95.60%)\n", "Generation # 345. Train Loss: 0.10. Train Acc (Test Acc): 99.00% (92.40%)\n", "Generation # 350. Train Loss: 0.13. Train Acc (Test Acc): 95.00% (95.00%)\n", "Generation # 355. Train Loss: 0.14. Train Acc (Test Acc): 97.00% (95.80%)\n", "Generation # 360. Train Loss: 0.24. Train Acc (Test Acc): 93.00% (95.20%)\n", "Generation # 365. Train Loss: 0.30. Train Acc (Test Acc): 92.00% (93.80%)\n", "Generation # 370. Train Loss: 0.13. Train Acc (Test Acc): 96.00% (94.20%)\n", "Generation # 375. Train Loss: 0.19. Train Acc (Test Acc): 94.00% (95.20%)\n", "Generation # 380. Train Loss: 0.20. Train Acc (Test Acc): 94.00% (95.20%)\n", "Generation # 385. Train Loss: 0.33. Train Acc (Test Acc): 93.00% (94.00%)\n", "Generation # 390. Train Loss: 0.10. Train Acc (Test Acc): 97.00% (93.00%)\n", "Generation # 395. Train Loss: 0.25. Train Acc (Test Acc): 93.00% (93.20%)\n", "Generation # 400. Train Loss: 0.17. Train Acc (Test Acc): 95.00% (94.40%)\n", "Generation # 405. Train Loss: 0.25. Train Acc (Test Acc): 90.00% (94.80%)\n", "Generation # 410. Train Loss: 0.13. Train Acc (Test Acc): 97.00% (95.00%)\n", "Generation # 415. Train Loss: 0.20. Train Acc (Test Acc): 94.00% (92.40%)\n", "Generation # 420. Train Loss: 0.16. Train Acc (Test Acc): 95.00% (95.20%)\n", "Generation # 425. Train Loss: 0.27. Train Acc (Test Acc): 92.00% (94.80%)\n", "Generation # 430. Train Loss: 0.07. Train Acc (Test Acc): 99.00% (96.60%)\n", "Generation # 435. Train Loss: 0.20. Train Acc (Test Acc): 94.00% (96.60%)\n", "Generation # 440. Train Loss: 0.11. Train Acc (Test Acc): 97.00% (96.60%)\n", "Generation # 445. Train Loss: 0.13. Train Acc (Test Acc): 94.00% (95.80%)\n", "Generation # 450. Train Loss: 0.06. Train Acc (Test Acc): 99.00% (96.40%)\n", "Generation # 455. Train Loss: 0.09. Train Acc (Test Acc): 99.00% (95.60%)\n", "Generation # 460. Train Loss: 0.13. Train Acc (Test Acc): 96.00% (95.80%)\n", "Generation # 465. Train Loss: 0.13. Train Acc (Test Acc): 96.00% (95.60%)\n", "Generation # 470. Train Loss: 0.14. Train Acc (Test Acc): 96.00% (96.20%)\n", "Generation # 475. Train Loss: 0.15. Train Acc (Test Acc): 97.00% (96.80%)\n", "Generation # 480. Train Loss: 0.19. Train Acc (Test Acc): 95.00% (97.00%)\n", "Generation # 485. Train Loss: 0.22. Train Acc (Test Acc): 91.00% (95.80%)\n", "Generation # 490. Train Loss: 0.11. Train Acc (Test Acc): 97.00% (96.20%)\n", "Generation # 495. Train Loss: 0.20. Train Acc (Test Acc): 94.00% (96.60%)\n", "Generation # 500. Train Loss: 0.10. Train Acc (Test Acc): 98.00% (95.60%)\n" ] } ], "source": [ "train_loss = []\n", "train_acc = []\n", "test_acc = []\n", "for i in range(generations):\n", " rand_index = np.random.choice(len(train_images), size=batch_size)\n", " rand_x = train_images[rand_index]\n", " rand_y = train_labels[rand_index]\n", " \n", " history = model.train_on_batch(rand_x, rand_y)\n", " temp_train_loss, temp_train_acc = history[0], history[1]\n", " \n", " if (i+1) % eval_every == 0:\n", " eval_index = np.random.choice(len(test_images), size=evaluation_size)\n", " eval_x = test_images[eval_index]\n", " eval_y = test_labels[eval_index]\n", " \n", " test_loss, temp_test_acc = model.evaluate(eval_x, eval_y, verbose=0)\n", " \n", " # Record and print results\n", " train_loss.append(temp_train_loss)\n", " train_acc.append(temp_train_acc)\n", " test_acc.append(temp_test_acc)\n", " acc_and_loss = [(i+1), temp_train_loss, temp_train_acc * 100, temp_test_acc * 100]\n", " acc_and_loss = [np.round(x, 2) for x in acc_and_loss]\n", " print('Generation # {}. Train Loss: {:.2f}. Train Acc (Test Acc): {:.2f}% ({:.2f}%)'.format(*acc_and_loss))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot figures" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "1/1 [==============================] - 0s 74ms/step\n" ] }, { "data": { "image/png": "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Snh4OM8ZR4E5jiPp6ekSHR0tpUr5poeyduENrF0EKrdr11UZSE1NteaRjCh6x48fl5o1a/rkWqxdeBNrF4HqemvXVcUNDw/32kCAL9cTaxfexNpFoLreenJVBrhFBW/y5Xpi7cKbWLsIVNdbT2wgBADAcpQBAAAsRxkAAMBylAEAACxHGQAAwHKUAQAALEcZAADAcpQBAAAsRxkAAMBylAEAACxHGQAAwHKUAQAALEcZAADAcpQBAAAsRxkAAMBylAEAACxHGQAAwHJlinsAAP7pzjvvVFlcXJzx2M6dO6vs008/Vdm0adNUtnXr1vwPB8CruDMAAIDlKAMAAFiOMgAAgOUoAwAAWI4NhC6ULl1aZRUrVizw+Z599lljHhYWprLGjRur7L777lPZv//9b5XdcccdxutcuXJFZW+88YbKxo4da3w9Sp727durbP369SorW7as8fWO46isU6dOKmvXrp3Kypcv72ZEwO/cf//9Klu6dKnxWNOfsX379nl9poLizgAAAJajDAAAYDnKAAAAlqMMAABguRK3gTAmJkZlISEhKuvRo4fKunXrZjxnZGSkytq2bZv/4Qrg/PnzKlu1apXKWrdurbJLly4Zz3n8+HGVbd68uQDTIRB17dpVZQkJCSoLDg5WmWmjoIjI5cuXVXb16lWVlStXTmU9e/ZUmenphXldB/nTu3dvlVWuXFllS5Ys8cU4Ac3074Hvv/++GCYpPO4MAABgOcoAAACWowwAAGA5ygAAAJYL2A2EeT1db+PGjSozbYTyR6bNWaanFWZkZKjszTffVJlpo6CISFpamsr86UlYyL/Q0FBjbnoKoOlplaanX+bHTz/9pLIZM2aobOHChSpbt26dyubNm2e8zoQJEwowHX7LtFG6SZMmKmMDYW6lSun/dm7UqJHKqlWrZny9x+Px+kzexJ0BAAAsRxkAAMBylAEAACxHGQAAwHKUAQAALBewnyY4ePCgMc/MzFSZrz5NcPToUZWlp6er7Oabbza+3vT41rlz5xZ6LpR8H330kTHP61M33larVi2VhYeHq+zQoUMqa9iwocpuu+027wwGZeDAgSr75ptvimGSwGJa43/+859V9vnnnxtfn5iY6O2RvIo7AwAAWI4yAACA5SgDAABYjjIAAIDlAnYD4enTp435E088obL+/furbOfOnSqbMmWK6+ufOHFCZU2bNlWZ6dHBeW2OmjZtmuvrw1533nmnytq0aWM81u0jUJOSklS2Zs0alU2aNMn4etM6N/0ZO3PmjMri4+NV5u+Pbg1kpsfq4vo++OADV8ft37+/iCcpGqwKAAAsRxkAAMBylAEAACxHGQAAwHIBu4EwL6bNSKtXr1bZuXPnVJbXJqyePXuq7KWXXlKZaROVyZ49e4x5r169XL0e9mjfvr3K1q9fr7KyZcsaX+84jsr27dunso4dO6qsT58+KsvriZizZs1SWVpamsp27NihsiVLlqisVatWxut06NBBZVu3bjUeC5G2bduqLDQ0tBgmCXxhYWGujlu7dm0RT1I0uDMAAIDlKAMAAFiOMgAAgOUoAwAAWK7EbSA0OXv2rKvjTE9Hy8uYMWNU9vrrr6ssJyfH9Tlht1tuuUVlM2bMUJnpK7lNX90tYt4o+89//lNlpq/aXrZsmausKJQpY/5H0/Tp01Vm2vyI/3f//ferLK//bfE/0dHRKqtataqr15q+pjsQcGcAAADLUQYAALAcZQAAAMtRBgAAsBxlAAAAy7Gt9DdGjRplzFu2bKmyhg0bqqx///4qW7FiReEHQ4kSEhJizN966y2VNWvWTGWXLl1S2SOPPGI85+bNm1VWvnz5Px7Qj5l2eSNvTZs2dXXc3r17i3iSwPLOO++ozPQY59OnT6vM9AmeQMCdAQAALEcZAADAcpQBAAAsRxkAAMBybCD8jYyMDGN+7733quyrr75Smekxr6aNXdu2bTNeZ+rUqSozfR89Atudd95pzE2bBU0GDhyosjVr1hR8IFhv165dxT2CV0VGRqrM9OdGRGTEiBEqu/XWW11d57nnnlNZfh5r70+4MwAAgOUoAwAAWI4yAACA5SgDAABYjg2ELhw8eFBlY8eOVdlrr72msk6dOrnKRETCwsJUNm/ePJUdP37c+HoEhtdff92YezwelSUlJamspG0WNL1vbxwL9ypVquT1c7Zr105lpUuXVtndd99tfP2NN96osuDgYJX16NFDZaZ1cuXKFeN1TH/Grl69qrJSpfR/O2/dutV4zkDEnQEAACxHGQAAwHKUAQAALEcZAADAcmwgLKAlS5aobP/+/a6Oa9y4sfGcf/vb31RWv359lf31r39V2bFjx4znRPEaMmSIymrVqmU81vS0yYSEBK/P5G9M7zuvJ29+8803RT1OiXLhwgVXx7388ssqi4uLK9S13X7ddE5OjjHPzs5WWWpqqspMG2p37Nihsg8++MB4nZMnT6rs119/VVmZMvpfl4mJicZzBiLuDAAAYDnKAAAAlqMMAABgOcoAAACWYwOhF+3evVtlHTp0UJlpU5mIyJw5c1R2zz33qKxevXoqu/nmm92MCB8rX768ykxPYRMRyczMVNmiRYu8PpOvhISEqGzhwoWuXmt66qdI3n92YNa7d2+VzZ49W2V5fa12YaSlpals5cqVKvv666+Nr9+wYYPXZzJ56qmnVGb6c2vaVFiScGcAAADLUQYAALAcZQAAAMtRBgAAsBxlAAAAy/FpgiJ25swZlc2dO9d4rGmXr+l7uRs2bKiye++9V2WrV692MSH8hen71o8fP14Mk+Sf6ZMDr776qspMnwY4f/68yp5//nnjddLT0wswHX5r4sSJxT2CX7nrrrtcHbd27doinqR4cWcAAADLUQYAALAcZQAAAMtRBgAAsBwbCL2obdu2Khs6dKir40RESpVy181Mj/k0fac3AsumTZuKe4Trat++vTGfMWOGym6//XaVffnllyrL688D4E/efffd4h6hSHFnAAAAy1EGAACwHGUAAADLUQYAALAcGwhdaNq0qcqeffZZlXXp0kVlYWFhhbp2Tk6Oyk6fPu3qOBQ/0xMkTZmISLdu3Yp6nHx54YUXVPbYY48Zjw0ODlbZ559/rrJOnToVei4A3sedAQAALEcZAADAcpQBAAAsRxkAAMBy1m4grFGjhsrGjRtnPPbRRx9VWWRkpLdHkh9++EFlpo2Kb731ltevjaLhOI6rTMS82fS9995T2SuvvKKy1NRU4zl79OihskceeURldevWVVlERITKzp07Z7zOnj17VDZz5kzjsYC/M23yvemmm1T28ccf+2Icn+DOAAAAlqMMAABgOcoAAACWowwAAGC5EreBMDo6WmXt2rVT2WuvvaayqlWren2eo0ePqsz0da8iIkuXLlUZTxa0h2nTUt++fVXWvXt3lWVlZRnPWalSpQLPc+TIEZVt3rzZeKxpky0QqEybfN1+xXygKtnvDgAAXBdlAAAAy1EGAACwHGUAAADLUQYAALBcQHyaoHLlyir78MMPjcc2aNBAZRUrVvT6TMnJySozff/7ihUrVJaZmen1eeCfTI8rPXbsmPHY2rVruzqn6bHFoaGhrme6ePGiytavX6+y+++/3/U5gZKuc+fOKpszZ04xTFI0uDMAAIDlKAMAAFiOMgAAgOUoAwAAWK5YNxB269ZNZdOnT1eZ6Xukw8PDvT5Pdna2MV+2bJnKHnvsMZVlZGR4eyQEuJSUFJV17NjReOzkyZNVVtjH/K5cuVJlpsdh79+/v1DXAUoS06PBSzruDAAAYDnKAAAAlqMMAABgOcoAAACWK9YNhIMHD1ZZ69atC3XOn376SWWmp8BduXJFZZMmTTKe88yZM4WaCfit48ePG/MxY8a4ygB4z+rVq1UWGxtbDJMUL+4MAABgOcoAAACWowwAAGA5ygAAAJbzOI7jXO+g8+fPS4UKFXwxDyxw7tw5iYiI8Mm1WLvwJtYuAtX11i53BgAAsBxlAAAAy1EGAACwHGUAAADLUQYAALAcZQAAAMtRBgAAsBxlAAAAy1EGAACwHGUAAADLUQYAALAcZQAAAMtRBgAAsBxlAAAAy7kqAy6+5RhwzZfribULb2LtIlBdbz25KgPp6eleGQYQ8e16Yu3Cm1i7CFTXW08ex0X9zMnJkdTUVAkPDxePx+O14WAXx3EkPT1doqOjpVQp3/wNFWsX3sDaRaByu3ZdlQEAAFBysYEQAADLUQYAALAcZQAAAMtRBgAAsBxlAAAAy1EGAACwHGUAAADLUQYAALAcZQAAAMtRBgAAsBxlAAAAy1EGAACwHGUAAADLUQYAALAcZQAAAMtRBgAAsBxlAAAAy1EGAACwHGUAAADLUQYAALAcZQAAAMtRBgAAsBxlAAAAy1EGAACwHGUAAADLUQYAALAcZQAAAMtRBgAAsBxlAAAAy1EGAACwHGUAAADLUQYAALAcZQAAAMtRBgAAsBxlAAAAy1EGisizzz4rzZo1K+4xgAJh/SJQsXYLxqoy8PDDD4vH4xGPxyNBQUESExMjEydOlAsXLhT3aCIicuDAAenXr5/UqVNHPB6PzJ07t7hHgh/x9/WbnZ0t06ZNk7p160pISIg0bdpUPv744+IeC37A39fu4sWL5Y477pCKFStKxYoVpWvXrvLFF18U91g+ZVUZEBHp2bOn/Pjjj3LkyBF57rnnZMGCBTJx4kTjsdnZ2T6dLTMzU2JiYmTmzJkSFRXl02sjMPjz+o2Li5NFixbJ/Pnz5dtvv5VRo0ZJ37595auvvvLpHPBP/rx2t2zZIgMHDpTPPvtMdu7cKX/605+ke/fucvLkSZ/OUZysKwPBwcESFRUltWrVkkGDBsngwYNlzZo1IvK/20vx8fESExMjwcHB4jiOnDt3TkaOHClVq1aViIgI6dy5s+zbty/XeWfOnCnVqlWT8PBwGT58uGRlZeV7tlatWslLL70kDzzwgAQHB3vj7aKE8ef1u2zZMnnqqaekV69eEhMTI6NHj5YePXrInDlzvPHWEeD8ee0uX75cxowZI82aNZNGjRrJ4sWLJScnRzZv3uyNtx4QrCsDv1euXLlcLfTw4cOyatUqSUhIkMTERBERueuuuyQtLU3WrVsne/fulRYtWkiXLl3kzJkzIiKyatUqmTJlijz//POyZ88eqV69uixYsCDXdbZs2SIej0dSUlJ89dZgAX9av5cuXZKQkBA13/bt273zZlGi+NPa/b3MzEzJzs6WG264odDvM2A4FnnooYec3r17X/t59+7dTqVKlZz+/fs7juM4U6ZMcYKCgpxTp05dO2bz5s1ORESEk5WVletcdevWdRYtWuQ4juPExsY6o0aNyvX7bdq0cZo2bZrrWg0bNnROnDjhatbatWs7r7zySj7eHUo6f1+/AwcOdBo3buwcOnTIuXr1qrNx40anXLlyTtmyZQv6llFC+Pva/b0xY8Y4devWdS5evOj6NYHOujsDa9eulbCwMAkJCZHY2Fjp0KGDzJ8//9rv165dW6pUqXLt571790pGRoZUqlRJwsLCrv06evSoJCcni4jIwYMHJTY2Ntd1fv9z69at5bvvvpMaNWoU4btDSefP63fevHlSv359adSokZQtW1bGjRsnQ4cOldKlS3vjrSPA+fPa/a1Zs2bJu+++K6tXr1Z3ukqyMsU9gK916tRJFi5cKEFBQRIdHS1BQUG5fj80NDTXzzk5OVK9enXZsmWLOldkZGQRTgpo/rx+q1SpImvWrJGsrCz55ZdfJDo6Wp588km58cYbvXodBCZ/Xrv/NXv2bJkxY4Zs2rRJbr311iK5hr+yrgyEhoZKvXr1XB/fokULSUtLkzJlykidOnWMx9x0002ya9cuGTJkyLVs165dhR0VUAJh/YaEhEiNGjUkOztbEhISpH///gU+F0oOf1+7L730kjz33HOyYcMGue222wp0jkBm3V8T5FfXrl0lNjZW+vTpIxs2bJCUlBTZsWOHxMXFyZ49e0REZPz4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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot loss over time\n", "plt.plot(range(0, generations, eval_every), train_loss, 'k-')\n", "plt.title('Softmax Loss per Generation')\n", "plt.xlabel('Generation')\n", "plt.ylabel('Softmax Loss')\n", "plt.show()\n", "\n", "# Plot train and test accuracy\n", "plt.plot(range(0, generations, eval_every), train_acc, 'k-', label='Train Set Accuracy')\n", "plt.plot(range(0, generations, eval_every), test_acc, 'r--', label='Test Set Accuracy')\n", "plt.title('Train and Test Accuracy')\n", "plt.xlabel('Generation')\n", "plt.ylabel('Accuracy')\n", "plt.legend(loc='lower right')\n", "plt.show()\n", "\n", "# Plot some samples\n", "# Plot the 6 of the last batch results:\n", "predictions = model.predict(train_images[:6])\n", "predictions = np.argmax(predictions, axis=1)\n", "images = np.squeeze(train_images[:6])\n", "\n", "Nrows = 2\n", "Ncols = 3\n", "for i in range(6):\n", " plt.subplot(Nrows, Ncols, i+1)\n", " plt.imshow(np.reshape(images[i], [28, 28]), cmap='Greys_r')\n", " plt.title('Pred: ' + str(predictions[i]), fontsize=10)\n", " frame = plt.gca()\n", " frame.axes.get_xaxis().set_visible(False)\n", " frame.axes.get_yaxis().set_visible(False)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## CIFAR-10\n", "\n", "Here we will build a convolutional neural network to predict the `CIFAR-10` data.\n", "\n", "The script provided will download and unzip the `CIFAR-10` data. Then it will start training a CNN from scratch. You should see similar output at the end of the following two graphs.\n", "\n", "\n", "\n", "Here we see the training loss (left) and the test batch accuracy (right)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set model parameters" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import os\n", "import tensorflow as tf\n", "import matplotlib.pyplot as plt\n", "import urllib.request\n", "\n", "batch_size = 128\n", "data_dir = 'temp'\n", "output_every = 50\n", "generations = 20000\n", "eval_every = 500\n", "image_height = 32\n", "image_width = 32\n", "crop_height = 24\n", "crop_width = 24\n", "num_channels = 3\n", "num_targets = 10\n", "extract_folder = 'cifar-10-batches-bin'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "data_dir = 'temp'\n", "if not os.path.exists(data_dir):\n", " os.makedirs(data_dir)\n", "cifar10_url = 'http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Check if file exists, otherwise download it\n", "data_file = os.path.join(data_dir, 'cifar-10-binary.tar.gz')\n", "if os.path.isfile(data_file):\n", " pass\n", "else:\n", " # Download file\n", " def progress(block_num, block_size, total_size):\n", " progress_info = [cifar10_url, float(block_num * block_size) / float(total_size) * 100.0]\n", " print('\\r Downloading {} - {:.2f}%'.format(*progress_info), end=\"\")\n", " filepath, _ = urllib.request.urlretrieve(cifar10_url, data_file, progress)\n", " # Extract file\n", " tarfile.open(filepath, 'r:gz').extractall(data_dir)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load CIFAR-10 dataset" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.cifar10.load_data()\n", "\n", "# Preprocess the data\n", "train_images = train_images / 255.0\n", "test_images = test_images / 255.0\n", "\n", "# Crop images\n", "train_images = tf.image.crop_to_bounding_box(train_images, 4, 4, 24, 24)\n", "test_images = tf.image.crop_to_bounding_box(test_images, 4, 4, 24, 24)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Convert labels to integers" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "train_labels = train_labels.flatten()\n", "test_labels = test_labels.flatten()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define the model architecture" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "model = tf.keras.Sequential([\n", " tf.keras.layers.Conv2D(64, (5, 5), activation='relu', input_shape=(crop_height, crop_width, num_channels)),\n", " tf.keras.layers.MaxPooling2D(pool_size=(3, 3), strides=(2, 2)),\n", " tf.keras.layers.Conv2D(64, (5, 5), activation='relu'),\n", " tf.keras.layers.MaxPooling2D(pool_size=(3, 3), strides=(2, 2)),\n", " tf.keras.layers.Flatten(),\n", " tf.keras.layers.Dense(384, activation='relu'),\n", " tf.keras.layers.Dense(192, activation='relu'),\n", " tf.keras.layers.Dense(num_targets)\n", "])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define loss function" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)\n", "\n", "# Create accuracy metric\n", "accuracy_metric = tf.keras.metrics.SparseCategoricalAccuracy()\n", "\n", "# Create optimizer\n", "optimizer = tf.keras.optimizers.SGD(learning_rate=0.1, momentum=0.9)\n", "\n", "# Compile the model\n", "model.compile(optimizer=optimizer, loss=loss_fn, metrics=[accuracy_metric])\n", "\n", "# Train the model\n", "history = model.fit(train_images, train_labels, batch_size=batch_size, epochs=generations, \n", " validation_data=(test_images, test_labels), verbose=1)\n", "\n", "# Evaluate the model\n", "test_loss, test_accuracy = model.evaluate(test_images, test_labels, verbose=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Print loss and accuracy" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print('Test Loss:', test_loss)\n", "print('Test Accuracy:', test_accuracy)\n", "\n", "# Plot loss over time\n", "plt.plot(history.history['loss'], 'k-')\n", "plt.title('Softmax Loss per Generation')\n", "plt.xlabel('Generation')\n", "plt.ylabel('Softmax Loss')\n", "plt.show()\n", "\n", "# Plot accuracy over time\n", "plt.plot(history.history['sparse_categorical_accuracy'], 'k-')\n", "plt.title('Test Accuracy')\n", "plt.xlabel('Generation')\n", "plt.ylabel('Accuracy')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## How to fine-tune current CNN architectures?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The purpose of the script provided in this section is to download the CIFAR-10 data and sort it out in the proper folder structure for running it through the TensorFlow fine-tuning tutorial. The script should create the following folder structure.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this script, we download the CIFAR-10 images and\n", "transform/save them in the Inception Retraining Format\n", "The end purpose of the files is for re-training the\n", "Google Inception tensorflow model to work on the CIFAR-10.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import os\n", "import tarfile\n", "import pickle as cPickle\n", "import numpy as np\n", "import urllib.request\n", "import imageio\n", "from tensorflow.python.framework import ops\n", "ops.reset_default_graph()\n", "\n", "cifar_link = 'https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz'\n", "data_dir = 'temp'\n", "if not os.path.isdir(data_dir):\n", " os.makedirs(data_dir)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Download tar file" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "target_file = os.path.join(data_dir, 'cifar-10-python.tar.gz')\n", "if not os.path.isfile(target_file):\n", " print('CIFAR-10 file not found. Downloading CIFAR data (Size = 163MB)')\n", " print('This may take a few minutes, please wait.')\n", " filename, headers = urllib.request.urlretrieve(cifar_link, target_file)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Extract into memory" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tar = tarfile.open(target_file)\n", "tar.extractall(path=data_dir)\n", "tar.close()\n", "objects = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n", "\n", "# Create train image folders\n", "train_folder = 'train_dir'\n", "if not os.path.isdir(os.path.join(data_dir, train_folder)):\n", " for i in range(10):\n", " folder = os.path.join(data_dir, train_folder, objects[i])\n", " os.makedirs(folder)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create test image folders" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_folder = 'validation_dir'\n", "if not os.path.isdir(os.path.join(data_dir, test_folder)):\n", " for i in range(10):\n", " folder = os.path.join(data_dir, test_folder, objects[i])\n", " os.makedirs(folder)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Extract images accordingly\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "data_location = os.path.join(data_dir, 'cifar-10-batches-py')\n", "train_names = ['data_batch_' + str(x) for x in range(1,6)]\n", "test_names = ['test_batch']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define functions" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def load_batch_from_file(file):\n", " file_conn = open(file, 'rb')\n", " image_dictionary = cPickle.load(file_conn, encoding='latin1')\n", " file_conn.close()\n", " return image_dictionary" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def save_images_from_dict(image_dict, folder='data_dir'):\n", " # image_dict.keys() = 'labels', 'filenames', 'data', 'batch_label'\n", " for ix, label in enumerate(image_dict['labels']):\n", " folder_path = os.path.join(data_dir, folder, objects[label])\n", " filename = image_dict['filenames'][ix]\n", " # Transform image data\n", " image_array = image_dict['data'][ix]\n", " image_array.resize([3, 32, 32])\n", " # Save image using imageio\n", " output_location = os.path.join(folder_path, filename)\n", " # Ensure the pixel values are in the range [0, 255]\n", " image_array = np.clip(image_array, 0, 255).astype(np.uint8)\n", " imageio.imwrite(output_location, image_array.transpose(1, 2, 0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sort train images and sort test images" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for file in train_names:\n", " print('Saving images from file: {}'.format(file))\n", " file_location = os.path.join(data_dir, 'cifar-10-batches-py', file)\n", " image_dict = load_batch_from_file(file_location)\n", " save_images_from_dict(image_dict, folder=train_folder)\n", "\n", "for file in test_names:\n", " print('Saving images from file: {}'.format(file))\n", " file_location = os.path.join(data_dir, 'cifar-10-batches-py', file)\n", " image_dict = load_batch_from_file(file_location)\n", " save_images_from_dict(image_dict, folder=test_folder)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create labels file" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "cifar_labels_file = os.path.join(data_dir,'cifar10_labels.txt')\n", "print('Writing labels file, {}'.format(cifar_labels_file))\n", "with open(cifar_labels_file, 'w') as labels_file:\n", " for item in objects:\n", " labels_file.write(\"{}\\n\".format(item))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Your turn! 🚀\n", "\n", "You can practice your cnn skills by following the assignment [how to choose cnn architecture mnist](https://www.kaggle.com/code/cdeotte/how-to-choose-cnn-architecture-mnist)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Self study\n", "\n", "You can refer to those YouTube videos for further study:\n", "\n", "- [Convolutional Neural Networks (CNNs) explained, by deeplizard](https://www.youtube.com/watch?v=YRhxdVk_sIs)\n", "- [Convolutional Neural Networks Explained (CNN Visualized), by Futurology](https://www.youtube.com/watch?v=pj9-rr1wDhM)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Research trend\n", "\n", "State of the Art Convolutional Neural Networks (CNNs) Explained | Deep Learning in 2020:\n", "\n", "
\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Acknowledgments\n", "\n", "Thanks to [Nick](https://github.com/nfmcclure) for creating the open-source course [tensorflow_cookbook](https://github.com/nfmcclure/tensorflow_cookbook). It inspires the majority of the content in this chapter.\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.18" } }, "nbformat": 4, "nbformat_minor": 4 }