Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save iamaziz/78529877fb79780f99049017c623d1f9 to your computer and use it in GitHub Desktop.

Select an option

Save iamaziz/78529877fb79780f99049017c623d1f9 to your computer and use it in GitHub Desktop.
tf_practice_MNIST_nn_normalized_vs._non-normalized-data
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "tf_practice_MNIST_nn_normalized_vs._non-normalized-data",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyM212CV8k2RhpEpPrsfStLj",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/iamaziz/78529877fb79780f99049017c623d1f9/tf_practice_mnist_nn_normalized_vs-_non-normalized-data.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "hvraLv15RwLM"
},
"source": [
"# Training Neural Network with: Normalized vs. Non-normalized data\n",
"\n",
"## An example network with MNIST dataset.\n",
"\n",
"In this example, the same model is trained twice on the same dataset. \n",
"In the first training, the dataset is normalized; while in the second training it is not."
]
},
{
"cell_type": "code",
"metadata": {
"id": "H02dBghtIjzd"
},
"source": [
"%%capture\n",
"import tensorflow as tf\n",
"from tensorflow import keras\n",
"\n",
"mnist = keras.datasets.mnist\n",
"(x_train, y_train), (x_test, y_test) = mnist.load_data()"
],
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "mH9KaGK3I8d7"
},
"source": [
"class EarlyStopping(keras.callbacks.Callback):\n",
" def on_epoch_end(self, epoch, logs={}):\n",
" if logs.get('accuracy') >= 0.99:\n",
" print('\\nReached enough accuracy %99 🥳 .. Stopping the training')\n",
" self.model.stop_training = True\n",
"\n",
"callback = EarlyStopping()"
],
"execution_count": 2,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Eath2-1_JRfh"
},
"source": [
"def train_fashion_mnist_model(x_train, y_train):\n",
" model = keras.models.Sequential(\n",
" [keras.layers.Flatten(),\n",
" keras.layers.Dense(units=500, activation=keras.activations.relu), # == tf.nn.relu\n",
" keras.layers.Dense(units=10, activation=keras.activations.softmax) # == tf.nn.softmax\n",
" ])\n",
" model.compile(optimizer=keras.optimizers.Adam(),\n",
" loss=keras.losses.sparse_categorical_crossentropy, \n",
" metrics=['accuracy']\n",
" )\n",
" history = model.fit(x_train, y_train, epochs=7, callbacks=[callback])\n",
" return model, history"
],
"execution_count": 3,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Nsll1gwSPmdJ"
},
"source": [
"# 1) Training with **normalized data** images\n",
"\n",
"Notice how normaizling the data enabled the network to reach %99 accuracy (pretty enough!) in just 5 epochs and took ~27seconds. And starting from %94 in the first epoch!!"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Err6hqmgMWwp",
"outputId": "14388cb6-c783-4985-ce16-f9474bdaaf3d",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"%%time\n",
"x_train_normalized = x_train / x_train.max()\n",
"x_test_normalized = x_test / x_test.max()\n",
"model, history = train_fashion_mnist_model(x_train_normalized, y_train)\n",
"print(model.evaluate(x_test_normalized, y_test))"
],
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/7\n",
"1875/1875 [==============================] - 5s 3ms/step - loss: 0.2001 - accuracy: 0.9406\n",
"Epoch 2/7\n",
"1875/1875 [==============================] - 5s 3ms/step - loss: 0.0812 - accuracy: 0.9753\n",
"Epoch 3/7\n",
"1875/1875 [==============================] - 5s 3ms/step - loss: 0.0514 - accuracy: 0.9839\n",
"Epoch 4/7\n",
"1875/1875 [==============================] - 5s 3ms/step - loss: 0.0362 - accuracy: 0.9891\n",
"Epoch 5/7\n",
"1874/1875 [============================>.] - ETA: 0s - loss: 0.0269 - accuracy: 0.9914\n",
"Reached enough accuracy %99 🥳 .. Stopping the training\n",
"1875/1875 [==============================] - 5s 3ms/step - loss: 0.0269 - accuracy: 0.9914\n",
"313/313 [==============================] - 0s 2ms/step - loss: 0.0768 - accuracy: 0.9780\n",
"[0.07679472118616104, 0.9779999852180481]\n",
"CPU times: user 39.3 s, sys: 3.36 s, total: 42.6 s\n",
"Wall time: 27.7 s\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "nKduCMAAQCIW"
},
"source": [
"# 2) Training **without** normalizing the images data\n",
"Notice the network completed all the (7) epochs while it is still at %95 accuracy."
]
},
{
"cell_type": "code",
"metadata": {
"id": "zHPeio0eLoJy",
"outputId": "d62aadb7-06bc-4d45-95ed-5bd9ab3eeef9",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"%%time\n",
"model, history = train_fashion_mnist_model(x_train, y_train)\n",
"print(model.evaluate(x_test, y_test))"
],
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/7\n",
"1875/1875 [==============================] - 5s 3ms/step - loss: 2.7264 - accuracy: 0.9076\n",
"Epoch 2/7\n",
"1875/1875 [==============================] - 5s 3ms/step - loss: 0.3410 - accuracy: 0.9372\n",
"Epoch 3/7\n",
"1875/1875 [==============================] - 5s 3ms/step - loss: 0.2963 - accuracy: 0.9412\n",
"Epoch 4/7\n",
"1875/1875 [==============================] - 5s 3ms/step - loss: 0.2804 - accuracy: 0.9457\n",
"Epoch 5/7\n",
"1875/1875 [==============================] - 5s 3ms/step - loss: 0.2461 - accuracy: 0.9493\n",
"Epoch 6/7\n",
"1875/1875 [==============================] - 5s 3ms/step - loss: 0.2355 - accuracy: 0.9546\n",
"Epoch 7/7\n",
"1875/1875 [==============================] - 5s 3ms/step - loss: 0.2077 - accuracy: 0.9585\n",
"313/313 [==============================] - 0s 1ms/step - loss: 0.2709 - accuracy: 0.9540\n",
"[0.2708840072154999, 0.9539999961853027]\n",
"CPU times: user 53.2 s, sys: 4.61 s, total: 57.8 s\n",
"Wall time: 37.5 s\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4y94jrB6Q2QA"
},
"source": [
"# Takeaway\n",
"\n",
"Normalizing the dataset makes the training converges faster 🚀. \n",
"**Always normalize the data!!**"
]
},
{
"cell_type": "code",
"metadata": {
"id": "xruwzwX6a7k3",
"outputId": "37dc6c43-5bed-4e82-ed27-9de744a251a5",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"!date"
],
"execution_count": 6,
"outputs": [
{
"output_type": "stream",
"text": [
"Sat Nov 14 02:36:57 UTC 2020\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Ipl6ljj7kNYO",
"outputId": "3b8fa88a-745e-4bb5-a4c8-809f8830fabf",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"model.summary()"
],
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"text": [
"Model: \"sequential_1\"\n",
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"flatten_1 (Flatten) (None, 784) 0 \n",
"_________________________________________________________________\n",
"dense_2 (Dense) (None, 500) 392500 \n",
"_________________________________________________________________\n",
"dense_3 (Dense) (None, 10) 5010 \n",
"=================================================================\n",
"Total params: 397,510\n",
"Trainable params: 397,510\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "HfONPELYkV_I",
"outputId": "0d67f024-4a25-4095-8a2e-3cf717348572",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 77
}
},
"source": [
"keras.utils.plot_model(model, rankdir='LR')"
],
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"data": {
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {
"tags": []
},
"execution_count": 8
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment