\n",
+ "Copyright (c) 2024 Bálint Gyires-Tóth - All Rights Reserved\n",
+ "You may use and modify this code for research and development purpuses.\n",
+ "Using this code for educational purposes (self-paced or instructor led) without the permission of the author is prohibited.\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# Example of data exploration, modeling, regulartion and prediction\n",
+ "Our exercise today involves loading a standard dataset using TensorFlow Keras API, exploring the data, building a simple neural network, and evaluating the effects of basic methods (activation functions, regularization, weight initialization, etc.). We then perform predictions on the test set and inspect the results."
+ ],
+ "metadata": {
+ "id": "3EX4cCa4WKJu"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# 1. Data\n",
+ "The dataset we will use is the well-known CIFAR10 (Canadian Institute For Advanced Research). Explore the details on the Keras website first: https://keras.io/api/datasets/cifar10/\n",
+ "\n",
+ "After you explored the basic features of the data, let's load it into the memory and explore the shapes:"
+ ],
+ "metadata": {
+ "id": "yY9fztIeWIKt"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "from tensorflow.keras.datasets import cifar10\n",
+ "from tensorflow.keras.utils import to_categorical\n",
+ "import numpy as np"
+ ],
+ "metadata": {
+ "id": "giRZKTjzX_7l"
+ },
+ "execution_count": 1,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "(X_train, Y_train), (X_test, Y_test) = cifar10.load_data()"
+ ],
+ "metadata": {
+ "id": "bez7q0eiWQCK",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "dfec57e7-bb0d-4efa-f9d6-637eb3977c6b"
+ },
+ "execution_count": 2,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n",
+ "170498071/170498071 [==============================] - 3s 0us/step\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "print(X_train.shape)\n",
+ "print(X_test.shape)\n",
+ "print(Y_train.shape)\n",
+ "print(Y_test.shape)"
+ ],
+ "metadata": {
+ "id": "2tJoRq5wXywi",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "aedc692f-8b65-4fae-fa0f-7a494c0b6c0c"
+ },
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(50000, 32, 32, 3)\n",
+ "(10000, 32, 32, 3)\n",
+ "(50000, 1)\n",
+ "(10000, 1)\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 1.1. Exercise\n",
+ "Display the first ten images of the training data. Hints:\n",
+ "* Axis 0 refers to the separate images, e.g. X_train[0]\n",
+ "* You can use the [Matplotlib Pyplot imshow function](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.imshow.html) for displaying the image. Just don't forget to import Plotly first!\n",
+ "* A corresponding example, but you have to modify the code for your purpose: https://stackoverflow.com/questions/46615554/how-to-display-multiple-images-in-one-figure-correctly"
+ ],
+ "metadata": {
+ "id": "zTCSGFyDlNvf"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "plt.figure(figsize=(12,12))\n",
+ "for i in range(10):\n",
+ " plt.subplot(5,5,i+1)\n",
+ " plt.xticks([])\n",
+ " plt.yticks([])\n",
+ " plt.grid(False)\n",
+ " plt.imshow(X_train[i], cmap=plt.cm.binary)\n",
+ "plt.show()"
+ ],
+ "metadata": {
+ "id": "hIQhHTppmBdO",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 387
+ },
+ "outputId": "ff9044ec-3dbd-421c-b44b-2f676a6ac043"
+ },
+ "execution_count": 6,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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\n"
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Print the corresponding labels of the displayed images from the target variable (Y_train):"
+ ],
+ "metadata": {
+ "id": "FAQkUWlmm-bc"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "for i in range(10):\n",
+ " print(Y_train[i])"
+ ],
+ "metadata": {
+ "id": "AkOrWzghnJ78",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "6b8dcd9f-1dd6-4bfd-d4f9-52aebaad7bd2"
+ },
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[6]\n",
+ "[9]\n",
+ "[9]\n",
+ "[4]\n",
+ "[1]\n",
+ "[1]\n",
+ "[2]\n",
+ "[7]\n",
+ "[8]\n",
+ "[3]\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 1.2. Exercise\n",
+ "We will train a Multi-Layer Perceptron (MLP), which requires a 2 dimensional input: 0th axis refers to the datapoints (i.e. images), the 1th dimens to the input. As images are 3 dimensional (width, height, color channels), you have to reshape the images into vectors. We also call this flattening.\n",
+ "\n",
+ "In order to do so, calculate the size of the equivalent 1D vector of the image:"
+ ],
+ "metadata": {
+ "id": "VX24g5FstsRU"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "flattened_dim = X_train.shape[1] * X_train.shape[2] * X_train.shape[3]\n",
+ "print(flattened_dim)"
+ ],
+ "metadata": {
+ "id": "hdoMyxHzuXZG",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "3f7aa5ac-b067-4221-af76-850c0d4c7a24"
+ },
+ "execution_count": 8,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "3072\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "After you calculated it, we can reshape the images, and covert the integer arrays into float arrays -- which are needed for the neural networks as input. Hint:\n",
+ "* in the [reshape() function of Numpy](https://www.w3schools.com/python/numpy/numpy_array_reshape.asp) you can use -1 for one axis, to automatically calculate that value."
+ ],
+ "metadata": {
+ "id": "WbqXJUSFubeC"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# reshape 3D tensors to 2D tensors\n",
+ "X_train = X_train.reshape(-1,flattened_dim)\n",
+ "X_test = X_test.reshape(-1,flattened_dim)\n",
+ "\n",
+ "# it is in int8 format, the neural network requires float32\n",
+ "X_train = X_train.astype('float32')\n",
+ "X_test = X_test.astype('float32')\n",
+ "print(X_train)"
+ ],
+ "metadata": {
+ "id": "vukOcBM0XzSj",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "90b145c1-c490-4df4-fa4a-f6c818cdeb39"
+ },
+ "execution_count": 9,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[ 59. 62. 63. ... 123. 92. 72.]\n",
+ " [154. 177. 187. ... 143. 133. 144.]\n",
+ " [255. 255. 255. ... 80. 86. 84.]\n",
+ " ...\n",
+ " [ 35. 178. 235. ... 12. 31. 50.]\n",
+ " [189. 211. 240. ... 195. 190. 171.]\n",
+ " [229. 229. 239. ... 163. 163. 161.]]\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "print(X_train.shape)\n",
+ "print(X_train.dtype)"
+ ],
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "id": "UAWy7RnHQLZH",
+ "outputId": "fe1812ba-b07b-40aa-cbc3-a4716136bae5"
+ },
+ "execution_count": 10,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "(50000, 3072)\n",
+ "float32\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 1.3. Exercise\n",
+ "As the next step, let's split the training data into training and validation data. 80% of the original training data should be the final training data, and 20% the validation.\n",
+ "You should use Numpy indexing to select the first 80% of X_train as final X_train, and the last 20% as X_valid. Hints:\n",
+ "* https://datascienceparichay.com/article/numpy-array-first-n-rows/\n",
+ "* https://datascienceparichay.com/article/numpy-array-last-n-rows/"
+ ],
+ "metadata": {
+ "id": "DO79AdIdvVfD"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "train_ratio = 0.8\n",
+ "train_length = len(X_train) # length of the training data\n",
+ "train_split = int(train_length*train_ratio) # where to split the training and validation data\n",
+ "\n",
+ "X_valid, Y_valid = X_train[train_split:], Y_train[train_split:]\n",
+ "X_train, Y_train = X_train[0:train_split], Y_train[0:train_split]\n",
+ "\n",
+ "print(len(X_train), len(Y_train), len(X_valid), len(Y_valid))"
+ ],
+ "metadata": {
+ "id": "mRwuWxxIxLgN",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "1a98e616-d6ef-4e37-b3df-1a7bf570161f"
+ },
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "40000 40000 10000 10000\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 1.4. Exercise\n",
+ "As the last step of input data preparation, the data should be standardized. Calculate the mean and variance of the training data (elementvise -- so for each value of the flattened image you should get a mean and variance for the training data along 0th axis). Hint:\n",
+ "* https://stackoverflow.com/questions/70626231/how-to-calculate-mean-variance-standard-deviation-per-index-of-array"
+ ],
+ "metadata": {
+ "id": "z05y_QWDxWER"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "mean = np.mean(X_train, axis=0)\n",
+ "std = np.std(X_train, axis=0)\n",
+ "\n",
+ "print(mean)\n",
+ "print(std)"
+ ],
+ "metadata": {
+ "id": "TSZbvWCBx8Ea",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "58ca6bb4-6fdb-4f40-cc2d-6476277622b7"
+ },
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[130.89912 136.1391 132.54753 ... 126.86372 126.03545 114.5743 ]\n",
+ "[73.39984 72.94052 80.44044 ... 65.066635 62.781673 66.23674 ]\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Next, use the resulting values to standardize the training, validation and test data by substracting the mean and dividing the result with the standard deviation."
+ ],
+ "metadata": {
+ "id": "6WRHKkkjyN1S"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "X_train = (X_train-mean)/std\n",
+ "X_valid = (X_valid-mean)/std\n",
+ "X_test = (X_test-mean)/std\n",
+ "\n",
+ "print(X_train)\n",
+ "print(X_valid)\n",
+ "print(X_test)\n"
+ ],
+ "metadata": {
+ "id": "2ESLP1EIyB2J",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "a19b29e7-e9be-471a-8834-533714abbdb4"
+ },
+ "execution_count": 13,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "[[-0.97955424 -1.0164323 -0.8645842 ... -0.05938103 -0.54212403\n",
+ " -0.6427596 ]\n",
+ " [ 0.3147265 0.5601948 0.67692906 ... 0.24799617 0.11093279\n",
+ " 0.44425038]\n",
+ " [ 1.6907513 1.6295593 1.522275 ... -0.720242 -0.63769335\n",
+ " -0.4615913 ]\n",
+ " ...\n",
+ " [ 0.4918386 0.06664198 -0.28030095 ... 0.5246357 0.126861\n",
+ " 0.23288733]\n",
+ " [-1.1702904 -0.8244951 -0.06896446 ... -0.9968815 -1.1633245\n",
+ " -1.367433 ]\n",
+ " [ 1.4182712 1.5884298 1.4849803 ... 0.5553734 0.6843485\n",
+ " 0.8971712 ]]\n",
+ "[[ 1.6907513 1.6295593 1.5098435 ... 1.8463576 1.9426775\n",
+ " 2.014376 ]\n",
+ " [-0.0531217 0.12148119 0.42829788 ... -0.68950427 -0.4146983\n",
+ " -0.03886518]\n",
+ " [-0.20298578 -0.89304405 -1.3245518 ... -1.3657341 -1.7048837\n",
+ " -1.6542828 ]\n",
+ " ...\n",
+ " [-1.3065304 0.5739046 1.2736439 ... -1.7653245 -1.5137452\n",
+ " -0.97490156]\n",
+ " [ 0.7915668 1.026328 1.3358016 ... 1.0471768 1.018841\n",
+ " 0.8518791 ]\n",
+ " [ 1.3365271 1.2731044 1.3233701 ... 0.5553734 0.5887793\n",
+ " 0.7009055 ]]\n",
+ "[[ 0.36922255 -0.33094224 -1.0386261 ... -1.6270047 -0.94032943\n",
+ " -0.0690599 ]\n",
+ " [ 1.4182712 1.3553632 1.2736439 ... 0.90885717 1.1781232\n",
+ " 1.2746053 ]\n",
+ " [ 0.36922255 0.7384222 1.1120336 ... -1.8421688 -1.880094\n",
+ " -1.6240882 ]\n",
+ " ...\n",
+ " [-1.5108905 -1.660793 -1.4985937 ... -1.5655293 -1.6889555\n",
+ " -1.0201937 ]\n",
+ " [-1.4427705 -1.3180479 -1.4985937 ... -0.5358157 -0.09613401\n",
+ " -0.52198076]\n",
+ " [-0.7888181 -0.79707545 -0.7154055 ... -1.5347916 -1.5933862\n",
+ " -1.3372383 ]]\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 1.5. Exercise\n",
+ "And as the last step, convert the dense representation of the classes (i.e. 0,1,2,3...9) to one-hot encoding (0 = [1 0 0 0 0 0 0 0 0 0], 1 = [0 1 0 0 0 0 0 0 0 0] ... 9 = [0 0 0 0 0 0 0 0 0 1]). To do this, first, calculate the number of unique elements in the target training data. Hints:\n",
+ "* use the [unique() function](https://numpy.org/doc/stable/reference/generated/numpy.unique.html) of Numpy to list the unique elements\n",
+ "* you can count the number of elements in a list with the [len() function](https://www.w3schools.com/python/ref_func_len.asp)"
+ ],
+ "metadata": {
+ "id": "ooHCnUin7r4o"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "nb_classes = len(np.unique(Y_train))\n",
+ "print(nb_classes)"
+ ],
+ "metadata": {
+ "id": "i0LAO9cs8KEE",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "70ddb630-6cd6-4c9f-d927-9e21363b9b6b"
+ },
+ "execution_count": 14,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "10\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Doublecheck, if the same number of classes exists in the validation and test target data:"
+ ],
+ "metadata": {
+ "id": "BvM6XhGe8JU9"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "print(\"Validation data has the same number of classes, as the training data:\", nb_classes == len(np.unique(Y_valid)))\n",
+ "print(\"Test data has the same number of classes, as the training data:\", nb_classes == len(np.unique(Y_test)))"
+ ],
+ "metadata": {
+ "id": "eZFNSsyx_Py2",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "b696d8e6-a27f-45a9-8f6d-ed363a62aa0b"
+ },
+ "execution_count": 15,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Validation data has the same number of classes, as the training data: True\n",
+ "Test data has the same number of classes, as the training data: True\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "And convert the dense representation into one-hot encoding. Hint:\n",
+ "* use the [to_categorical function](https://www.tensorflow.org/api_docs/python/tf/keras/utils/to_categorical) with the calculated nb_classes\n"
+ ],
+ "metadata": {
+ "id": "mJM-iBmR8dLe"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "import tensorflow as tf\n",
+ "from tensorflow import keras\n",
+ "\n",
+ "Y_train = tf.keras.utils.to_categorical(Y_train, nb_classes)\n",
+ "Y_valid = tf.keras.utils.to_categorical(Y_valid, nb_classes)\n",
+ "Y_test = tf.keras.utils.to_categorical(Y_test, nb_classes)"
+ ],
+ "metadata": {
+ "id": "xwZ4OJ6I8lba"
+ },
+ "execution_count": 16,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## Final check of data preparation\n",
+ "Now, lets check the shapes and mean and standard deviation of the training, validation and test data."
+ ],
+ "metadata": {
+ "id": "LshN2OSsv3TZ"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "print(\"Shapes of the training, validation and test input data:\", X_train.shape, X_valid.shape, X_test.shape)\n",
+ "print(\"Shapes of the training, validation and test output data:\", Y_train.shape, Y_valid.shape, Y_test.shape)\n",
+ "print(\"Mean values of the training, validation and test input data:\", X_train.mean(), X_valid.mean(), X_test.mean())\n",
+ "print(\"Standard deviation of the training, validation and test input data:\", X_train.std(), X_valid.std(), X_test.std())"
+ ],
+ "metadata": {
+ "id": "O_jdJVcvX0vi",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "c3002f3b-8df8-430f-f69c-65be14b04ad5"
+ },
+ "execution_count": 17,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Shapes of the training, validation and test input data: (40000, 3072) (10000, 3072) (10000, 3072)\n",
+ "Shapes of the training, validation and test output data: (40000, 10) (10000, 10) (10000, 10)\n",
+ "Mean values of the training, validation and test input data: -2.4725992e-09 0.0023437182 0.013331188\n",
+ "Standard deviation of the training, validation and test input data: 1.0000038 0.99656224 0.9978297\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Don't worry, if the mean and standard deviation of the validation and test data are not exactly 0 and 1, but these might be very mear to it (e.g. 0.01 mean, 0.99 variance)."
+ ],
+ "metadata": {
+ "id": "5GtAOOoezmZY"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "cJ14oyZExpqj"
+ },
+ "source": [
+ "# 2. Training"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "s4ZXYRMBxpql"
+ },
+ "source": [
+ "Let us begin with a simple example of creating a small neural network without regularization and training it with actual data. The purpose of this is to provide you with an example as to how to proceed with the next exercise."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# imports\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "from tensorflow.keras.models import Sequential\n",
+ "from tensorflow.keras.layers import Dense, Embedding, Flatten, Dropout\n",
+ "from tensorflow.keras.initializers import HeNormal\n",
+ "from tensorflow.keras.callbacks import EarlyStopping"
+ ],
+ "metadata": {
+ "id": "6-8Q6ll7ZDgq"
+ },
+ "execution_count": 18,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# model definition\n",
+ "model = Sequential()\n",
+ "model.add(Dense(128, activation='tanh', input_shape=(flattened_dim,)))\n",
+ "model.add(Dense(128, activation='tanh'))\n",
+ "model.add(Dense(nb_classes, activation='softmax'))\n",
+ "\n",
+ "# loss function and optimizer\n",
+ "model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])"
+ ],
+ "metadata": {
+ "id": "pke6w3CD8DHp"
+ },
+ "execution_count": 19,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "CZbOR76QxprC",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "d09be631-222f-4b9c-9868-ba7f416bf867"
+ },
+ "source": [
+ "# training\n",
+ "network_history = model.fit(X_train, Y_train,\n",
+ " validation_data=(X_valid,Y_valid),\n",
+ " batch_size=128,\n",
+ " epochs=40,\n",
+ " verbose=1)"
+ ],
+ "execution_count": 20,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Epoch 1/40\n",
+ "313/313 [==============================] - 5s 12ms/step - loss: 1.8157 - accuracy: 0.3654 - val_loss: 1.7629 - val_accuracy: 0.3830\n",
+ "Epoch 2/40\n",
+ "313/313 [==============================] - 4s 14ms/step - loss: 1.6960 - accuracy: 0.4122 - val_loss: 1.7445 - val_accuracy: 0.3996\n",
+ "Epoch 3/40\n",
+ "313/313 [==============================] - 4s 11ms/step - loss: 1.6394 - accuracy: 0.4309 - val_loss: 1.6992 - val_accuracy: 0.4145\n",
+ "Epoch 4/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 1.5938 - accuracy: 0.4482 - val_loss: 1.6940 - val_accuracy: 0.4204\n",
+ "Epoch 5/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.5622 - accuracy: 0.4615 - val_loss: 1.6780 - val_accuracy: 0.4206\n",
+ "Epoch 6/40\n",
+ "313/313 [==============================] - 5s 14ms/step - loss: 1.5330 - accuracy: 0.4689 - val_loss: 1.6723 - val_accuracy: 0.4260\n",
+ "Epoch 7/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.5034 - accuracy: 0.4798 - val_loss: 1.6501 - val_accuracy: 0.4331\n",
+ "Epoch 8/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.4816 - accuracy: 0.4867 - val_loss: 1.6498 - val_accuracy: 0.4257\n",
+ "Epoch 9/40\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.4542 - accuracy: 0.4963 - val_loss: 1.6433 - val_accuracy: 0.4362\n",
+ "Epoch 10/40\n",
+ "313/313 [==============================] - 4s 11ms/step - loss: 1.4237 - accuracy: 0.5073 - val_loss: 1.6327 - val_accuracy: 0.4435\n",
+ "Epoch 11/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 1.4034 - accuracy: 0.5121 - val_loss: 1.6380 - val_accuracy: 0.4387\n",
+ "Epoch 12/40\n",
+ "313/313 [==============================] - 4s 14ms/step - loss: 1.3832 - accuracy: 0.5203 - val_loss: 1.6270 - val_accuracy: 0.4419\n",
+ "Epoch 13/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 1.3598 - accuracy: 0.5267 - val_loss: 1.6180 - val_accuracy: 0.4458\n",
+ "Epoch 14/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 1.3368 - accuracy: 0.5378 - val_loss: 1.6203 - val_accuracy: 0.4496\n",
+ "Epoch 15/40\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.3225 - accuracy: 0.5429 - val_loss: 1.6282 - val_accuracy: 0.4501\n",
+ "Epoch 16/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.2909 - accuracy: 0.5523 - val_loss: 1.6156 - val_accuracy: 0.4538\n",
+ "Epoch 17/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 1.2695 - accuracy: 0.5619 - val_loss: 1.6225 - val_accuracy: 0.4527\n",
+ "Epoch 18/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 1.2573 - accuracy: 0.5645 - val_loss: 1.6269 - val_accuracy: 0.4517\n",
+ "Epoch 19/40\n",
+ "313/313 [==============================] - 4s 14ms/step - loss: 1.2356 - accuracy: 0.5716 - val_loss: 1.6322 - val_accuracy: 0.4550\n",
+ "Epoch 20/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 1.2124 - accuracy: 0.5819 - val_loss: 1.6452 - val_accuracy: 0.4457\n",
+ "Epoch 21/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 1.2052 - accuracy: 0.5852 - val_loss: 1.6429 - val_accuracy: 0.4521\n",
+ "Epoch 22/40\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.1844 - accuracy: 0.5909 - val_loss: 1.6430 - val_accuracy: 0.4589\n",
+ "Epoch 23/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.1658 - accuracy: 0.5967 - val_loss: 1.6583 - val_accuracy: 0.4480\n",
+ "Epoch 24/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 1.1540 - accuracy: 0.6009 - val_loss: 1.6628 - val_accuracy: 0.4506\n",
+ "Epoch 25/40\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.1371 - accuracy: 0.6097 - val_loss: 1.6761 - val_accuracy: 0.4481\n",
+ "Epoch 26/40\n",
+ "313/313 [==============================] - 4s 14ms/step - loss: 1.1166 - accuracy: 0.6122 - val_loss: 1.6676 - val_accuracy: 0.4507\n",
+ "Epoch 27/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 1.0902 - accuracy: 0.6250 - val_loss: 1.6857 - val_accuracy: 0.4461\n",
+ "Epoch 28/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.0712 - accuracy: 0.6309 - val_loss: 1.7024 - val_accuracy: 0.4497\n",
+ "Epoch 29/40\n",
+ "313/313 [==============================] - 4s 14ms/step - loss: 1.0581 - accuracy: 0.6348 - val_loss: 1.7037 - val_accuracy: 0.4480\n",
+ "Epoch 30/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 1.0378 - accuracy: 0.6428 - val_loss: 1.7236 - val_accuracy: 0.4506\n",
+ "Epoch 31/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 1.0327 - accuracy: 0.6465 - val_loss: 1.7168 - val_accuracy: 0.4487\n",
+ "Epoch 32/40\n",
+ "313/313 [==============================] - 5s 15ms/step - loss: 1.0044 - accuracy: 0.6560 - val_loss: 1.7454 - val_accuracy: 0.4447\n",
+ "Epoch 33/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 0.9940 - accuracy: 0.6596 - val_loss: 1.7566 - val_accuracy: 0.4453\n",
+ "Epoch 34/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 0.9740 - accuracy: 0.6648 - val_loss: 1.7692 - val_accuracy: 0.4458\n",
+ "Epoch 35/40\n",
+ "313/313 [==============================] - 5s 15ms/step - loss: 0.9558 - accuracy: 0.6736 - val_loss: 1.7629 - val_accuracy: 0.4509\n",
+ "Epoch 36/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 0.9425 - accuracy: 0.6761 - val_loss: 1.7874 - val_accuracy: 0.4468\n",
+ "Epoch 37/40\n",
+ "313/313 [==============================] - 4s 11ms/step - loss: 0.9362 - accuracy: 0.6774 - val_loss: 1.7993 - val_accuracy: 0.4428\n",
+ "Epoch 38/40\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 0.9214 - accuracy: 0.6831 - val_loss: 1.7997 - val_accuracy: 0.4488\n",
+ "Epoch 39/40\n",
+ "313/313 [==============================] - 4s 11ms/step - loss: 0.9055 - accuracy: 0.6921 - val_loss: 1.8155 - val_accuracy: 0.4483\n",
+ "Epoch 40/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 0.8941 - accuracy: 0.6941 - val_loss: 1.8366 - val_accuracy: 0.4424\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "uFqhzV85xprJ"
+ },
+ "source": [
+ "Let's plot the training and validation loss and accuracy curves:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "BYmXGkLCxprK",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 881
+ },
+ "outputId": "1d08044b-f80b-455b-c9c0-298e90bf5ce0"
+ },
+ "source": [
+ "def plot_history(network_history):\n",
+ " plt.figure()\n",
+ " plt.xlabel('Epochs')\n",
+ " plt.ylabel('Loss')\n",
+ " plt.plot(network_history.history['loss'])\n",
+ " plt.plot(network_history.history['val_loss'])\n",
+ " plt.legend(['Training', 'Validation'])\n",
+ "\n",
+ " plt.figure()\n",
+ " plt.xlabel('Epochs')\n",
+ " plt.ylabel('Accuracy')\n",
+ " plt.plot(network_history.history['accuracy'])\n",
+ " plt.plot(network_history.history['val_accuracy'])\n",
+ " plt.legend(['Training', 'Validation'], loc='lower right')\n",
+ " plt.show()\n",
+ "\n",
+ "plot_history(network_history)"
+ ],
+ "execution_count": 21,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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1QvBMOCnLTF0n7SMUV9tYPvxBKtLvC4KN1djGJCRbM3jGtc0ve222wgODmbatGm5ticlJTFr1iz69u3LPffcQ4UKFfD29qZhw4bMmDEjz2P+/bbU3r176dChA56entSrV48FCxZc8p6nnnqKWrVq4e3tTbVq1Xj++efJzMwEYNq0abz88sts3rwZm82GzWbLqffvt6W2bt1K586d8fLyoly5cowcOZKkpItNpcOGDaNv37688847hIWFUa5cOUaPHp3zWSIikj8NKwbw6ZDm/Pp4e3o1DMNmg/nbY+n1wQpGfLmezUfirS4xXzSJ39VkpsDr4dZ89jPHwd3nqru5uroyZMgQpk2bxrPPPpszG+WsWbPIzs7mvvvuY9asWTz11FP4+/vz888/M3jwYKpXr07Lli2venyHw0H//v0JCQnhzz//JCEhIVf/nAv8/PyYNm0a4eHhbN26lQcffBA/Pz/++c9/MnDgQLZt28b8+fNZuHAhAAEBAZccIzk5me7du9O6dWvWrVtHXFwcI0aMYMyYMbnC2+LFiwkLC2Px4sXs27ePgQMH0rhxYx588MGrno+IiFxe3TB/PhrUlL0nzjF58T5+3HychTtPsHDnCeqE+nF743B6NwqnUtmiadm/Xmq5cRLDhw9n//79LF26NGfb1KlTGTBgAFWqVGH8+PE0btyYatWq8eijj9KjRw++++67azr2woUL2bVrF9OnTycyMpIOHTrw+uuvX7Lfc889R5s2bahatSq9e/dm/PjxOZ/h5eWFr68vrq6uhIaGEhoaipeX1yXH+Oabb0hLS2P69Ok0aNCAzp07M3nyZL766itOnDiRs1+ZMmWYPHkyderU4bbbbqNXr14sWrQov//ZRETkMmqG+PHvu5uwYFxH+jetgLuLnV2x53hr/m7av7WYAVNWMX31QU4lpVtd6mWp5eZq3LzNFhSrPvsa1alThzZt2vDFF19w8803s2/fPpYvX84rr7xCdnY2r7/+Ot999x3Hjh0jIyOD9PT0a+5Ts3PnTipVqkR4+MUWrNatW1+y37fffssHH3zA/v37SUpKIisrC3///C3etnPnTiIjI/Hxudhi1bZtWxwOB7t37yYkJASA+vXr4+LikrNPWFgYW7duzddniYhI3qoH+/LeXY158bb6zN8ew/dRx1l94DQbDp1lw6GzvPzjDtrVCKJP43C6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\n"
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ ""
+ ],
+ "image/png": "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\n"
+ },
+ "metadata": {}
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "What do you think? Does it overfit?"
+ ],
+ "metadata": {
+ "id": "tgG7QeXF-dx6"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Yes, it overfits because the accuracy of training is high but the accuracy of validation is low."
+ ],
+ "metadata": {
+ "id": "2rG-NZXIieOy"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "_Q9rIeBBxprO"
+ },
+ "source": [
+ "# Inspecting the model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "6r2AmmoMxprP",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "de07b870-fc6a-466b-9556-6543cb786507"
+ },
+ "source": [
+ "model.summary()"
+ ],
+ "execution_count": 22,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Model: \"sequential\"\n",
+ "_________________________________________________________________\n",
+ " Layer (type) Output Shape Param # \n",
+ "=================================================================\n",
+ " dense (Dense) (None, 128) 393344 \n",
+ " \n",
+ " dense_1 (Dense) (None, 128) 16512 \n",
+ " \n",
+ " dense_2 (Dense) (None, 10) 1290 \n",
+ " \n",
+ "=================================================================\n",
+ "Total params: 411146 (1.57 MB)\n",
+ "Trainable params: 411146 (1.57 MB)\n",
+ "Non-trainable params: 0 (0.00 Byte)\n",
+ "_________________________________________________________________\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "D3-bVDVuxprS",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "3531ffe3-e423-4115-b1dd-fcfb2418e8f7"
+ },
+ "source": [
+ "print('Input: ', model.input)"
+ ],
+ "execution_count": 23,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Input: KerasTensor(type_spec=TensorSpec(shape=(None, 3072), dtype=tf.float32, name='dense_input'), name='dense_input', description=\"created by layer 'dense_input'\")\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "Da2OJ3DmxprX",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "d985aad6-06fc-4b44-959c-5d3e3f5e8c97"
+ },
+ "source": [
+ "print('Layers:\\n')\n",
+ "for layer in model.layers:\n",
+ " print(\"Layer's name: \", layer.name, ', trainable: ', layer.trainable)\n",
+ " print(layer.get_config(),'\\n')"
+ ],
+ "execution_count": 24,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Layers:\n",
+ "\n",
+ "Layer's name: dense , trainable: True\n",
+ "{'name': 'dense', 'trainable': True, 'dtype': 'float32', 'batch_input_shape': (None, 3072), 'units': 128, 'activation': 'tanh', 'use_bias': True, 'kernel_initializer': {'module': 'keras.initializers', 'class_name': 'GlorotUniform', 'config': {'seed': None}, 'registered_name': None}, 'bias_initializer': {'module': 'keras.initializers', 'class_name': 'Zeros', 'config': {}, 'registered_name': None}, 'kernel_regularizer': None, 'bias_regularizer': None, 'activity_regularizer': None, 'kernel_constraint': None, 'bias_constraint': None} \n",
+ "\n",
+ "Layer's name: dense_1 , trainable: True\n",
+ "{'name': 'dense_1', 'trainable': True, 'dtype': 'float32', 'units': 128, 'activation': 'tanh', 'use_bias': True, 'kernel_initializer': {'module': 'keras.initializers', 'class_name': 'GlorotUniform', 'config': {'seed': None}, 'registered_name': None}, 'bias_initializer': {'module': 'keras.initializers', 'class_name': 'Zeros', 'config': {}, 'registered_name': None}, 'kernel_regularizer': None, 'bias_regularizer': None, 'activity_regularizer': None, 'kernel_constraint': None, 'bias_constraint': None} \n",
+ "\n",
+ "Layer's name: dense_2 , trainable: True\n",
+ "{'name': 'dense_2', 'trainable': True, 'dtype': 'float32', 'units': 10, 'activation': 'softmax', 'use_bias': True, 'kernel_initializer': {'module': 'keras.initializers', 'class_name': 'GlorotUniform', 'config': {'seed': None}, 'registered_name': None}, 'bias_initializer': {'module': 'keras.initializers', 'class_name': 'Zeros', 'config': {}, 'registered_name': None}, 'kernel_regularizer': None, 'bias_regularizer': None, 'activity_regularizer': None, 'kernel_constraint': None, 'bias_constraint': None} \n",
+ "\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "metadata": {
+ "id": "AtVX3M3lxprc",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "7774743e-a98f-435b-a5cd-ee5fd90f2a85"
+ },
+ "source": [
+ "print('Output: ', model.output)"
+ ],
+ "execution_count": 25,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Output: KerasTensor(type_spec=TensorSpec(shape=(None, 10), dtype=tf.float32, name=None), name='dense_2/Softmax:0', description=\"created by layer 'dense_2'\")\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 2.1. Exercise\n",
+ "Introduce [early stopping](https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/EarlyStopping) and [dropout](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dropout) with a rate between 0.1..0.5. Tips:\n",
+ "\n",
+ "* Insert the dropout layer between the two Dense layers.\n",
+ "* Set the patience of early stopping to 5.\n",
+ "* Set the number of epochs to a very high number.\n",
+ "* Don't forget to restore best weights after early stopping.\n",
+ "* And also set early stopping to monitor validation accuracy (the default value is validation loss -- which is categorical crossentropy now).\n",
+ "\n",
+ "Compile and train the model. Attempt to increase the validation accuracy as much as possible by making changes to the dropout rate. Inspect the effects of the modifications."
+ ],
+ "metadata": {
+ "id": "E-hHfs9qA_iO"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "es = keras.callbacks.EarlyStopping(monitor=\"val_accuracy\", patience=5, restore_best_weights=True)"
+ ],
+ "metadata": {
+ "id": "NwXrPzOgEBG-"
+ },
+ "execution_count": 26,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# model definition with dropout\n",
+ "model = Sequential()\n",
+ "model.add(Dense(128, activation='tanh', input_shape=(flattened_dim,)))\n",
+ "model.add(Dropout(0.1, input_shape=(flattened_dim,)))\n",
+ "model.add(Dense(128, activation='tanh'))\n",
+ "model.add(Dense(nb_classes, activation='softmax'))\n",
+ "\n",
+ "# loss function and optimizer\n",
+ "model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])"
+ ],
+ "metadata": {
+ "id": "7hZEGzj8GFwP"
+ },
+ "execution_count": 27,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# training with early stopping\n",
+ "network_history = model.fit(X_train, Y_train,\n",
+ " validation_data=(X_valid,Y_valid),\n",
+ " batch_size=128,\n",
+ " epochs=10000000,\n",
+ " verbose=1,\n",
+ " callbacks=[es])"
+ ],
+ "metadata": {
+ "id": "GCG54R-vGGWj",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "982fe331-bb70-4edf-adb4-46d4044837df"
+ },
+ "execution_count": 28,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Epoch 1/10000000\n",
+ "313/313 [==============================] - 6s 17ms/step - loss: 1.8402 - accuracy: 0.3544 - val_loss: 1.7630 - val_accuracy: 0.3858\n",
+ "Epoch 2/10000000\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.7177 - accuracy: 0.4012 - val_loss: 1.7273 - val_accuracy: 0.3988\n",
+ "Epoch 3/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.6726 - accuracy: 0.4164 - val_loss: 1.6981 - val_accuracy: 0.4133\n",
+ "Epoch 4/10000000\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.6343 - accuracy: 0.4308 - val_loss: 1.6812 - val_accuracy: 0.4186\n",
+ "Epoch 5/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.6055 - accuracy: 0.4434 - val_loss: 1.6651 - val_accuracy: 0.4238\n",
+ "Epoch 6/10000000\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.5739 - accuracy: 0.4532 - val_loss: 1.6537 - val_accuracy: 0.4305\n",
+ "Epoch 7/10000000\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.5534 - accuracy: 0.4588 - val_loss: 1.6313 - val_accuracy: 0.4340\n",
+ "Epoch 8/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.5251 - accuracy: 0.4684 - val_loss: 1.6431 - val_accuracy: 0.4270\n",
+ "Epoch 9/10000000\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.5047 - accuracy: 0.4771 - val_loss: 1.6285 - val_accuracy: 0.4328\n",
+ "Epoch 10/10000000\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.4789 - accuracy: 0.4830 - val_loss: 1.6145 - val_accuracy: 0.4399\n",
+ "Epoch 11/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.4640 - accuracy: 0.4902 - val_loss: 1.6061 - val_accuracy: 0.4511\n",
+ "Epoch 12/10000000\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.4485 - accuracy: 0.4933 - val_loss: 1.5821 - val_accuracy: 0.4523\n",
+ "Epoch 13/10000000\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.4300 - accuracy: 0.5018 - val_loss: 1.5815 - val_accuracy: 0.4535\n",
+ "Epoch 14/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.4120 - accuracy: 0.5076 - val_loss: 1.5747 - val_accuracy: 0.4527\n",
+ "Epoch 15/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.4006 - accuracy: 0.5126 - val_loss: 1.5607 - val_accuracy: 0.4617\n",
+ "Epoch 16/10000000\n",
+ "313/313 [==============================] - 5s 15ms/step - loss: 1.3827 - accuracy: 0.5144 - val_loss: 1.5581 - val_accuracy: 0.4612\n",
+ "Epoch 17/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.3654 - accuracy: 0.5264 - val_loss: 1.5547 - val_accuracy: 0.4577\n",
+ "Epoch 18/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.3544 - accuracy: 0.5263 - val_loss: 1.5463 - val_accuracy: 0.4632\n",
+ "Epoch 19/10000000\n",
+ "313/313 [==============================] - 5s 15ms/step - loss: 1.3427 - accuracy: 0.5309 - val_loss: 1.5557 - val_accuracy: 0.4571\n",
+ "Epoch 20/10000000\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.3289 - accuracy: 0.5349 - val_loss: 1.5531 - val_accuracy: 0.4628\n",
+ "Epoch 21/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.3056 - accuracy: 0.5434 - val_loss: 1.5411 - val_accuracy: 0.4608\n",
+ "Epoch 22/10000000\n",
+ "313/313 [==============================] - 5s 15ms/step - loss: 1.2988 - accuracy: 0.5457 - val_loss: 1.5394 - val_accuracy: 0.4643\n",
+ "Epoch 23/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.2897 - accuracy: 0.5491 - val_loss: 1.5518 - val_accuracy: 0.4646\n",
+ "Epoch 24/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.2770 - accuracy: 0.5519 - val_loss: 1.5453 - val_accuracy: 0.4650\n",
+ "Epoch 25/10000000\n",
+ "313/313 [==============================] - 5s 15ms/step - loss: 1.2647 - accuracy: 0.5567 - val_loss: 1.5424 - val_accuracy: 0.4750\n",
+ "Epoch 26/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.2572 - accuracy: 0.5598 - val_loss: 1.5381 - val_accuracy: 0.4707\n",
+ "Epoch 27/10000000\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.2473 - accuracy: 0.5643 - val_loss: 1.5409 - val_accuracy: 0.4688\n",
+ "Epoch 28/10000000\n",
+ "313/313 [==============================] - 4s 14ms/step - loss: 1.2369 - accuracy: 0.5671 - val_loss: 1.5521 - val_accuracy: 0.4666\n",
+ "Epoch 29/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.2204 - accuracy: 0.5729 - val_loss: 1.5488 - val_accuracy: 0.4684\n",
+ "Epoch 30/10000000\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 1.2130 - accuracy: 0.5748 - val_loss: 1.5609 - val_accuracy: 0.4652\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 2.2 Exercise\n",
+ "Change the [activation function of the dense layers (except the last one)](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dense) to rectified linear unit (ReLU) and the [weight initialization](https://www.tensorflow.org/api_docs/python/tf/keras/initializers) to the theoretically best one. Use the original model's code.\n",
+ "\n",
+ "Compile and train the model. Inspect the effects of the modifications."
+ ],
+ "metadata": {
+ "id": "zQCDM1o1BBtF"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# model definition with relu\n",
+ "model = Sequential()\n",
+ "model.add(Dense(128, activation='relu', kernel_initializer=tf.keras.initializers.HeNormal(), input_shape=(flattened_dim,)))\n",
+ "model.add(Dense(128, activation='relu', kernel_initializer=tf.keras.initializers.HeNormal()))\n",
+ "model.add(Dense(nb_classes, activation='softmax'))\n",
+ "\n",
+ "# loss function and optimizer\n",
+ "model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])"
+ ],
+ "metadata": {
+ "id": "YjHAAh-wGu9O"
+ },
+ "execution_count": 29,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# training\n",
+ "network_history = model.fit(X_train, Y_train,\n",
+ " validation_data=(X_valid,Y_valid),\n",
+ " batch_size=128,\n",
+ " epochs=40,\n",
+ " verbose=1)"
+ ],
+ "metadata": {
+ "id": "rarwKM1wGxMz",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "53e4ee74-532f-4ede-ab84-6f107c8b2832"
+ },
+ "execution_count": 30,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Epoch 1/40\n",
+ "313/313 [==============================] - 5s 15ms/step - loss: 1.8518 - accuracy: 0.3726 - val_loss: 1.6495 - val_accuracy: 0.4254\n",
+ "Epoch 2/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.5455 - accuracy: 0.4583 - val_loss: 1.6036 - val_accuracy: 0.4404\n",
+ "Epoch 3/40\n",
+ "313/313 [==============================] - 5s 15ms/step - loss: 1.4292 - accuracy: 0.4967 - val_loss: 1.5668 - val_accuracy: 0.4601\n",
+ "Epoch 4/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.3373 - accuracy: 0.5288 - val_loss: 1.5383 - val_accuracy: 0.4658\n",
+ "Epoch 5/40\n",
+ "313/313 [==============================] - 4s 11ms/step - loss: 1.2636 - accuracy: 0.5550 - val_loss: 1.5081 - val_accuracy: 0.4792\n",
+ "Epoch 6/40\n",
+ "313/313 [==============================] - 5s 15ms/step - loss: 1.2096 - accuracy: 0.5739 - val_loss: 1.5092 - val_accuracy: 0.4830\n",
+ "Epoch 7/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 1.1488 - accuracy: 0.5951 - val_loss: 1.5230 - val_accuracy: 0.4896\n",
+ "Epoch 8/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 1.1020 - accuracy: 0.6135 - val_loss: 1.5182 - val_accuracy: 0.4955\n",
+ "Epoch 9/40\n",
+ "313/313 [==============================] - 5s 15ms/step - loss: 1.0534 - accuracy: 0.6319 - val_loss: 1.5466 - val_accuracy: 0.4960\n",
+ "Epoch 10/40\n",
+ "313/313 [==============================] - 4s 11ms/step - loss: 1.0045 - accuracy: 0.6468 - val_loss: 1.5720 - val_accuracy: 0.4927\n",
+ "Epoch 11/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 0.9684 - accuracy: 0.6567 - val_loss: 1.5931 - val_accuracy: 0.4936\n",
+ "Epoch 12/40\n",
+ "313/313 [==============================] - 4s 14ms/step - loss: 0.9335 - accuracy: 0.6712 - val_loss: 1.6389 - val_accuracy: 0.4945\n",
+ "Epoch 13/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 0.8840 - accuracy: 0.6888 - val_loss: 1.6669 - val_accuracy: 0.5001\n",
+ "Epoch 14/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 0.8512 - accuracy: 0.6986 - val_loss: 1.6792 - val_accuracy: 0.4962\n",
+ "Epoch 15/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 0.8170 - accuracy: 0.7110 - val_loss: 1.7114 - val_accuracy: 0.4957\n",
+ "Epoch 16/40\n",
+ "313/313 [==============================] - 5s 14ms/step - loss: 0.7847 - accuracy: 0.7251 - val_loss: 1.7866 - val_accuracy: 0.4906\n",
+ "Epoch 17/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 0.7497 - accuracy: 0.7370 - val_loss: 1.8309 - val_accuracy: 0.4827\n",
+ "Epoch 18/40\n",
+ "313/313 [==============================] - 4s 11ms/step - loss: 0.7189 - accuracy: 0.7465 - val_loss: 1.8675 - val_accuracy: 0.4876\n",
+ "Epoch 19/40\n",
+ "313/313 [==============================] - 5s 14ms/step - loss: 0.6929 - accuracy: 0.7547 - val_loss: 1.9116 - val_accuracy: 0.4862\n",
+ "Epoch 20/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 0.6568 - accuracy: 0.7722 - val_loss: 1.9783 - val_accuracy: 0.4843\n",
+ "Epoch 21/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 0.6401 - accuracy: 0.7782 - val_loss: 2.0441 - val_accuracy: 0.4813\n",
+ "Epoch 22/40\n",
+ "313/313 [==============================] - 5s 15ms/step - loss: 0.6083 - accuracy: 0.7892 - val_loss: 2.1138 - val_accuracy: 0.4830\n",
+ "Epoch 23/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 0.5808 - accuracy: 0.7957 - val_loss: 2.1430 - val_accuracy: 0.4828\n",
+ "Epoch 24/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 0.5572 - accuracy: 0.8042 - val_loss: 2.2186 - val_accuracy: 0.4800\n",
+ "Epoch 25/40\n",
+ "313/313 [==============================] - 4s 14ms/step - loss: 0.5417 - accuracy: 0.8107 - val_loss: 2.2809 - val_accuracy: 0.4786\n",
+ "Epoch 26/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 0.5190 - accuracy: 0.8188 - val_loss: 2.3130 - val_accuracy: 0.4773\n",
+ "Epoch 27/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 0.4985 - accuracy: 0.8266 - val_loss: 2.3677 - val_accuracy: 0.4745\n",
+ "Epoch 28/40\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 0.4749 - accuracy: 0.8334 - val_loss: 2.4671 - val_accuracy: 0.4683\n",
+ "Epoch 29/40\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 0.4560 - accuracy: 0.8414 - val_loss: 2.5564 - val_accuracy: 0.4698\n",
+ "Epoch 30/40\n",
+ "313/313 [==============================] - 4s 11ms/step - loss: 0.4431 - accuracy: 0.8460 - val_loss: 2.5565 - val_accuracy: 0.4749\n",
+ "Epoch 31/40\n",
+ "313/313 [==============================] - 4s 11ms/step - loss: 0.4258 - accuracy: 0.8497 - val_loss: 2.6456 - val_accuracy: 0.4799\n",
+ "Epoch 32/40\n",
+ "313/313 [==============================] - 5s 14ms/step - loss: 0.4165 - accuracy: 0.8545 - val_loss: 2.7054 - val_accuracy: 0.4742\n",
+ "Epoch 33/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 0.4122 - accuracy: 0.8547 - val_loss: 2.7834 - val_accuracy: 0.4704\n",
+ "Epoch 34/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 0.3820 - accuracy: 0.8675 - val_loss: 2.8804 - val_accuracy: 0.4772\n",
+ "Epoch 35/40\n",
+ "313/313 [==============================] - 4s 14ms/step - loss: 0.3685 - accuracy: 0.8701 - val_loss: 2.9357 - val_accuracy: 0.4687\n",
+ "Epoch 36/40\n",
+ "313/313 [==============================] - 4s 11ms/step - loss: 0.3691 - accuracy: 0.8686 - val_loss: 3.0045 - val_accuracy: 0.4712\n",
+ "Epoch 37/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 0.3487 - accuracy: 0.8781 - val_loss: 3.0370 - val_accuracy: 0.4714\n",
+ "Epoch 38/40\n",
+ "313/313 [==============================] - 4s 13ms/step - loss: 0.3386 - accuracy: 0.8816 - val_loss: 3.1675 - val_accuracy: 0.4710\n",
+ "Epoch 39/40\n",
+ "313/313 [==============================] - 4s 12ms/step - loss: 0.3232 - accuracy: 0.8875 - val_loss: 3.1902 - val_accuracy: 0.4734\n",
+ "Epoch 40/40\n",
+ "313/313 [==============================] - 3s 11ms/step - loss: 0.3228 - accuracy: 0.8880 - val_loss: 3.2384 - val_accuracy: 0.4670\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# 2.3. Exercise\n",
+ "Based on the modifications above, and by any further modifications (e.g. more layers, less layers, more neurons/layer, etc.) to the model design, find a combination that is able to achieve **validation accuracy, that is higher than 53%**.\n"
+ ],
+ "metadata": {
+ "id": "j1tGVPdD-pp3"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "es = keras.callbacks.EarlyStopping(monitor=\"val_accuracy\", patience=5, restore_best_weights=True)"
+ ],
+ "metadata": {
+ "id": "5dBQxJHIHrbd"
+ },
+ "execution_count": 31,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# model definition\n",
+ "model = Sequential()\n",
+ "model.add(Dense(128, activation='relu', kernel_initializer=tf.keras.initializers.HeUniform(seed = 2), input_shape=(flattened_dim,)))\n",
+ "model.add(Dropout(0.2))\n",
+ "model.add(Dense(512, activation='relu', kernel_initializer=tf.keras.initializers.HeUniform()))\n",
+ "model.add(Dropout(0.2))\n",
+ "model.add(Dense(128, activation='relu', kernel_initializer=tf.keras.initializers.HeUniform()))\n",
+ "model.add(Dense(nb_classes, activation='softmax'))\n",
+ "\n",
+ "# loss function and optimizer\n",
+ "model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])"
+ ],
+ "metadata": {
+ "id": "PuxHOqLt-3Nd"
+ },
+ "execution_count": 39,
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "# training\n",
+ "network_history = model.fit(X_train, Y_train,\n",
+ " validation_data=(X_valid,Y_valid),\n",
+ " batch_size=128,\n",
+ " epochs=50,\n",
+ " verbose=1,\n",
+ " callbacks=[es])"
+ ],
+ "metadata": {
+ "id": "u8tFNCNVHyt9",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "1eb56789-83a0-4fda-d0d5-143faf3e8abb"
+ },
+ "execution_count": 40,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Epoch 1/50\n",
+ "313/313 [==============================] - 7s 20ms/step - loss: 1.9678 - accuracy: 0.3125 - val_loss: 1.7093 - val_accuracy: 0.3969\n",
+ "Epoch 2/50\n",
+ "313/313 [==============================] - 5s 17ms/step - loss: 1.7063 - accuracy: 0.3930 - val_loss: 1.6044 - val_accuracy: 0.4282\n",
+ "Epoch 3/50\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.6156 - accuracy: 0.4273 - val_loss: 1.5557 - val_accuracy: 0.4459\n",
+ "Epoch 4/50\n",
+ "313/313 [==============================] - 6s 19ms/step - loss: 1.5541 - accuracy: 0.4487 - val_loss: 1.5294 - val_accuracy: 0.4636\n",
+ "Epoch 5/50\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.5080 - accuracy: 0.4638 - val_loss: 1.4872 - val_accuracy: 0.4778\n",
+ "Epoch 6/50\n",
+ "313/313 [==============================] - 5s 17ms/step - loss: 1.4710 - accuracy: 0.4802 - val_loss: 1.4593 - val_accuracy: 0.4848\n",
+ "Epoch 7/50\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.4327 - accuracy: 0.4930 - val_loss: 1.4529 - val_accuracy: 0.4923\n",
+ "Epoch 8/50\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.4033 - accuracy: 0.5019 - val_loss: 1.4288 - val_accuracy: 0.5032\n",
+ "Epoch 9/50\n",
+ "313/313 [==============================] - 6s 18ms/step - loss: 1.3737 - accuracy: 0.5104 - val_loss: 1.4122 - val_accuracy: 0.5129\n",
+ "Epoch 10/50\n",
+ "313/313 [==============================] - 5s 15ms/step - loss: 1.3474 - accuracy: 0.5232 - val_loss: 1.3992 - val_accuracy: 0.5156\n",
+ "Epoch 11/50\n",
+ "313/313 [==============================] - 6s 18ms/step - loss: 1.3279 - accuracy: 0.5304 - val_loss: 1.4149 - val_accuracy: 0.5088\n",
+ "Epoch 12/50\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.3058 - accuracy: 0.5371 - val_loss: 1.3829 - val_accuracy: 0.5121\n",
+ "Epoch 13/50\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.2799 - accuracy: 0.5429 - val_loss: 1.3849 - val_accuracy: 0.5242\n",
+ "Epoch 14/50\n",
+ "313/313 [==============================] - 6s 18ms/step - loss: 1.2678 - accuracy: 0.5508 - val_loss: 1.3689 - val_accuracy: 0.5246\n",
+ "Epoch 15/50\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.2421 - accuracy: 0.5566 - val_loss: 1.3617 - val_accuracy: 0.5271\n",
+ "Epoch 16/50\n",
+ "313/313 [==============================] - 6s 19ms/step - loss: 1.2348 - accuracy: 0.5598 - val_loss: 1.3693 - val_accuracy: 0.5269\n",
+ "Epoch 17/50\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.2069 - accuracy: 0.5728 - val_loss: 1.3595 - val_accuracy: 0.5349\n",
+ "Epoch 18/50\n",
+ "313/313 [==============================] - 6s 19ms/step - loss: 1.2006 - accuracy: 0.5723 - val_loss: 1.3544 - val_accuracy: 0.5306\n",
+ "Epoch 19/50\n",
+ "313/313 [==============================] - 6s 18ms/step - loss: 1.1848 - accuracy: 0.5815 - val_loss: 1.3359 - val_accuracy: 0.5359\n",
+ "Epoch 20/50\n",
+ "313/313 [==============================] - 5s 15ms/step - loss: 1.1646 - accuracy: 0.5856 - val_loss: 1.3403 - val_accuracy: 0.5369\n",
+ "Epoch 21/50\n",
+ "313/313 [==============================] - 6s 19ms/step - loss: 1.1559 - accuracy: 0.5870 - val_loss: 1.3496 - val_accuracy: 0.5420\n",
+ "Epoch 22/50\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.1460 - accuracy: 0.5882 - val_loss: 1.3411 - val_accuracy: 0.5416\n",
+ "Epoch 23/50\n",
+ "313/313 [==============================] - 6s 19ms/step - loss: 1.1287 - accuracy: 0.5975 - val_loss: 1.3475 - val_accuracy: 0.5332\n",
+ "Epoch 24/50\n",
+ "313/313 [==============================] - 5s 16ms/step - loss: 1.1140 - accuracy: 0.6050 - val_loss: 1.3443 - val_accuracy: 0.5367\n",
+ "Epoch 25/50\n",
+ "313/313 [==============================] - 6s 18ms/step - loss: 1.0997 - accuracy: 0.6073 - val_loss: 1.3540 - val_accuracy: 0.5335\n",
+ "Epoch 26/50\n",
+ "313/313 [==============================] - 6s 18ms/step - loss: 1.0900 - accuracy: 0.6115 - val_loss: 1.3315 - val_accuracy: 0.5391\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "# 3. Evaluation on test data and inference\n",
+ "At this point, we will perform a basic evaluation and inference. With the model.evaluate function, the same metrics are calculated, that were used during training:"
+ ],
+ "metadata": {
+ "id": "2FtKp-a2-A9m"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "print(model.evaluate(X_test, Y_test))"
+ ],
+ "metadata": {
+ "id": "I3_9wgDREUna",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "8ae37a47-d09e-4599-97e2-a3987a64a300"
+ },
+ "execution_count": 41,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "313/313 [==============================] - 1s 3ms/step - loss: 1.3322 - accuracy: 0.5330\n",
+ "[1.3322027921676636, 0.5329999923706055]\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "we would like to see similar values, as in the validation set. If those are close to each other, then the generalization ability of the model is good (in case of an independent test-set)."
+ ],
+ "metadata": {
+ "id": "ECHguBFtGL7f"
+ }
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 3.1. Exercise\n",
+ "Predict the class of the first 10 elements in the test set, and compare the predicted values with the actual, target values in the test set. Hints:\n",
+ "* you can use [model.predict](https://www.activestate.com/resources/quick-reads/how-to-use-a-model-to-do-predictions-with-keras/) for prediction\n",
+ "* from the output you can select the largest value with the [argmax() function of Numpy](https://stackoverflow.com/questions/62358642/convert-one-hot-encoding-back-to-number-label). As there are multiple values, you have to call it with axis=1 parameter.\n",
+ "* it is enought to compare the predictions and the targets by printing the values out and inspecting them."
+ ],
+ "metadata": {
+ "id": "0Io4zYJeHjz6"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "preds = model.predict(X_test[:10])\n",
+ "\n",
+ "#prediction = model.predict(x_test[:1])\n",
+ "preds_dense = np.argmax(preds,axis=1)"
+ ],
+ "metadata": {
+ "id": "XEEyU7exILqF",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "36c670c1-35f1-42d2-d0a6-34a7f1f80d32"
+ },
+ "execution_count": 52,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "1/1 [==============================] - 0s 35ms/step\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "Before comparision, you have to convert back the one-hot encoded target values the same way, as you converted the output of the neural network to class values with argmax() function."
+ ],
+ "metadata": {
+ "id": "seZTEFI-I5cZ"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "print(\"Target labels:\", np.argmax(Y_test[:10],axis=1))\n",
+ "print(\"Predicted labels:\", preds_dense)"
+ ],
+ "metadata": {
+ "id": "PHLvoMuIIkJ6",
+ "colab": {
+ "base_uri": "https://localhost:8080/"
+ },
+ "outputId": "ac21d72b-fc1a-4b30-97a7-d7ead86ea34a"
+ },
+ "execution_count": 53,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "name": "stdout",
+ "text": [
+ "Target labels: [3 8 8 0 6 6 1 6 3 1]\n",
+ "Predicted labels: [3 9 0 8 4 6 3 6 4 1]\n"
+ ]
+ }
+ ]
+ },
+ {
+ "cell_type": "code",
+ "source": [],
+ "metadata": {
+ "id": "hSNWs51pm8F-"
+ },
+ "execution_count": null,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/text1.txt b/text1.txt
deleted file mode 100644
index 9cdd5be..0000000
--- a/text1.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-October arrived, spreading a damp chill over the grounds and into the castle. Madam Pomfrey, the nurse, was kept busy by a sudden
-spate of colds among the staff and students. Her Pepperup potion worked instantly, though it left the drinker smoking at the ears
-for several hours afterward. Ginny Weasley, who had been looking pale, was bullied into taking some by Percy. The steam pouring from
-under her vivid hair gave the impression that her whole head was on fire.
-
-Raindrops the size of bullets thundered on the castle windows for days on end; the lake rose, the flower beds turned into muddy streams,
-and Hagrid's pumpkins swelled to the size of garden sheds. Oliver Wood's enthusiasm for regular training sessions, however, was not
-dampened, which was why Harry was to be found, late one stormy Saturday afternoon a few days before Halloween, returning to Gryffindor
-Tower, drenched to the skin and splattered with mud.
-
-Even aside from the rain and wind it hadn't been a happy practice session. Fred and George, who had been spying on the Slytherin team,
-had seen for themselves the speed of those new Nimbus Two Thousand and Ones. They reported that the Slytherin team was no more than seven
-greenish blurs, shooting through the air like missiles.
-
-As Harry squelched along the deserted corridor he came across somebody who looked just as preoccupied as he was. Nearly Headless Nick,
-the ghost of Gryffindor Tower, was staring morosely out of a window, muttering under his breath, ". . . don't fulfill their
-requirements . . . half an inch, if that . . ."
-
-"Hello, Nick," said Harry.
-
-"Hello, hello," said Nearly Headless Nick, starting and looking round. He wore a dashing, plumed hat on his long curly hair,
-and a tunic with a ruff, which concealed the fact that his neck was almost completely severed. He was pale as smoke, and Harry
-could see right through him to the dark sky and torrential rain outside.
-
-"You look troubled, young Potter," said Nick, folding a transparent letter as he spoke and tucking it inside his doublet.
-
-"So do you," said Harry.
-
-"Ah," Nearly Headless Nick waved an elegant hand, "a matter of no importance. . . . It's not as though I really wanted to join. . . .
-Thought I'd apply, but apparently I 'don't fulfill requirements' -"
-
-In spite of his airy tone, there was a look of great bitterness on his face.
-
-"But you would think, wouldn't you," he erupted suddenly, pulling the letter back out of his pocket, "that getting hit forty-five
-times in the neck with a blunt axe would qualify you to join the Headless Hunt?"
-
-"Oh - yes," said Harry, who was obviously supposed to agree.
-
-"I mean, nobody wishes more than I do that it had all been quick and clean, and my head had come off properly, I mean,
-it would have saved me a great deal of pain and ridicule. However -" Nearly Headless Nick shook his letter open and read
-furiously: "'We can only accept huntsmen whose heads have parted company with their bodies. You will appreciate that it would be
-impossible otherwise for members to participate in hunt activities such as Horseback Head-Juggling and Head Polo. It is with the
-greatest regret, therefore, that I must inform you that you do not fulfill our requirements. With very best wishes,
-Sir Patrick Delaney-Podmore.'"
-
-Fuming, Nearly Headless Nick stuffed the letter away.
-
-"Half an inch of skin and sinew holding my neck on, Harry! Most people would think that's good and beheaded, but oh, no,
-it's not enough for Sir Properly Decapitated-Podmore."
diff --git a/text2.txt b/text2.txt
deleted file mode 100644
index d247cd8..0000000
--- a/text2.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-Quotes from The Fresh Prince of Bel-Air:
-
-Uncle Phil: "We Eat Here Later. You Eat Here Never.
-Jazz: "Looks Like You Eat Here Often."
-
-Geoffrey: "Quite Right Sir. You Threw Him On The Lawn, He ROLLED Into The Street."
-
-Geoffrey: "Correct, But You Overlooked One Fact. I Have No Life."
-
-Uncle Phil: "You Find Geoffrey And You Bring Him Back Or They'll Never Find Your Bodies. I'm A Judge, I Can Make It Happen."
-
-Geoffrey: "Ou Ou Ou, Can I Get It For You?"
-
-Girl: "Excuse Me, What's A Nine-Letter Word For Terrific?"
-Will: "That's Easy: Will Smith."
-
-Uncle Phil: "This Fat-Free Cake Isn't Bad, Geoffrey."
-Geoffrey: "Sir, That's A Sponge."
-
-Vivian: "That Man Is On Thin Ice!"
-Geoffrey: "I'll Alert The Fish."
-
-Carlton: "I Thought Ashley Was In Bed."
-Will: "Yeah, And You Also Thought Tupac Shakur Was A Jewish Holiday."
-
-Carlton: "Dad, Don't Do Anything Stupid! You Haven't Updated Your Will Yet."
-
-Will: "So You're Saying The Only Reason I Loved Her Is Cause She's Rich And Let Me Sponge Off Of Her?"
-Phil: "Yes."
-Will: "Then, I Love You Too, Uncle Phil."
-
-Carlton: "Big Poopie."
-Uncle Phil: "What Did You Say?"
-Carlton: "I Say... Uh... Beg, Puppy. To My Pretend Dog, Ernie. Fetch, Ernie. He's Gone Now."
-
-Carlton: "Steffi, Go Home. You're Not Age-Appropriate For This Party. (Carlton Puts On A Duck Floatie) I'm Going Swimming."
-
-Vivian: "How Was The Flight, Honey?"
-Will: "Yo, The Plane Ride Was Stupid. I Was Up In The First-Class."
-Phil: "Excuse Me?" Will: "No, I'm Saying The Plane Ride Was Dope."
-Philip: "Excuse Me?"
-Will: "No... Stupid, Dope, It's Not What You Think. How Would I Say This... [In A Nerdy Voice] The Flight Was Really Neat."
-
-Will: "Oh My God, Carlton! What's That Hideous Thing Growing Out Of Your Neck?... Ah, Never Mind. It's Just Your Head."