├── CNN_Tensorflow.ipynb ├── Load_model.ipynb └── README.md /CNN_Tensorflow.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "CNN_Tensorflow.ipynb", 7 | "provenance": [], 8 | "authorship_tag": "ABX9TyOXCKrHOZF+KrZ/Bc3D54EQ", 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | }, 15 | "language_info": { 16 | "name": "python" 17 | }, 18 | "accelerator": "GPU" 19 | }, 20 | "cells": [ 21 | { 22 | "cell_type": "markdown", 23 | "metadata": { 24 | "id": "view-in-github", 25 | "colab_type": "text" 26 | }, 27 | "source": [ 28 | "\"Open" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 1, 34 | "metadata": { 35 | "colab": { 36 | "base_uri": "https://localhost:8080/" 37 | }, 38 | "id": "K5G4uMuhUdlE", 39 | "outputId": "bb8ee729-eca4-40fb-995e-1c3b8533860e" 40 | }, 41 | "outputs": [ 42 | { 43 | "output_type": "stream", 44 | "name": "stdout", 45 | "text": [ 46 | "Found GPU at: /device:GPU:0\n" 47 | ] 48 | } 49 | ], 50 | "source": [ 51 | "%tensorflow_version 2.x\n", 52 | "import tensorflow as tf\n", 53 | "device_name = tf.test.gpu_device_name()\n", 54 | "if device_name != '/device:GPU:0':\n", 55 | " raise SystemError('GPU device not found')\n", 56 | "print('Found GPU at: {}'.format(device_name))\n" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "source": [ 62 | "from tensorflow import keras\n", 63 | "from tensorflow.keras import layers\n", 64 | "\n", 65 | "import matplotlib.pyplot as plt\n", 66 | "\n", 67 | "cifar10 = keras.datasets.cifar10\n", 68 | "\n", 69 | "(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()\n", 70 | "\n", 71 | "print(train_images.shape) # 50000, 32, 32, 3\n", 72 | "\n", 73 | "# Normalize: 0,255 -> 0,1\n", 74 | "train_images, test_images = train_images / 255.0, test_images / 255.0\n", 75 | "\n", 76 | "class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',\n", 77 | " 'dog', 'frog', 'horse', 'ship', 'truck']\n", 78 | "\n", 79 | "\n", 80 | "\n", 81 | "\n", 82 | "# model...\n", 83 | "model = keras.models.Sequential()\n", 84 | "model.add(layers.Conv2D(32, (3,3), strides=(1,1), padding=\"valid\", activation='relu', input_shape=(32,32,3)))\n", 85 | "model.add(layers.MaxPool2D((2,2)))\n", 86 | "model.add(layers.Conv2D(32, 3, activation='relu'))\n", 87 | "model.add(layers.MaxPool2D((2,2)))\n", 88 | "model.add(layers.Flatten())\n", 89 | "model.add(layers.Dense(64, activation='relu'))\n", 90 | "model.add(layers.Dense(10))\n", 91 | "print(model.summary())\n", 92 | "#import sys; sys.exit()\n", 93 | "\n", 94 | "# loss and optimizer\n", 95 | "loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)\n", 96 | "optim = keras.optimizers.Adam(lr=0.001)\n", 97 | "metrics = [\"accuracy\"]\n", 98 | "\n", 99 | "model.compile(optimizer=optim, loss=loss, metrics=metrics)\n", 100 | "\n", 101 | "# training\n", 102 | "batch_size = 64\n", 103 | "epochs = 30\n", 104 | "\n", 105 | "model.fit(train_images, train_labels, epochs=epochs,\n", 106 | " batch_size=batch_size, verbose=2)\n", 107 | "\n", 108 | "# evaulate\n", 109 | "model.evaluate(test_images, test_labels, batch_size=batch_size, verbose=2)\n" 110 | ], 111 | "metadata": { 112 | "colab": { 113 | "base_uri": "https://localhost:8080/" 114 | }, 115 | "id": "82HKXmuhVA23", 116 | "outputId": "29e52894-1778-4ce0-e0c6-1e0065e4e7ab" 117 | }, 118 | "execution_count": 4, 119 | "outputs": [ 120 | { 121 | "output_type": "stream", 122 | "name": "stdout", 123 | "text": [ 124 | "(50000, 32, 32, 3)\n", 125 | "Model: \"sequential_1\"\n", 126 | "_________________________________________________________________\n", 127 | " Layer (type) Output Shape Param # \n", 128 | "=================================================================\n", 129 | " conv2d_2 (Conv2D) (None, 30, 30, 32) 896 \n", 130 | " \n", 131 | " max_pooling2d_2 (MaxPooling (None, 15, 15, 32) 0 \n", 132 | " 2D) \n", 133 | " \n", 134 | " conv2d_3 (Conv2D) (None, 13, 13, 32) 9248 \n", 135 | " \n", 136 | " max_pooling2d_3 (MaxPooling (None, 6, 6, 32) 0 \n", 137 | " 2D) \n", 138 | " \n", 139 | " flatten_1 (Flatten) (None, 1152) 0 \n", 140 | " \n", 141 | " dense_2 (Dense) (None, 64) 73792 \n", 142 | " \n", 143 | " dense_3 (Dense) (None, 10) 650 \n", 144 | " \n", 145 | "=================================================================\n", 146 | "Total params: 84,586\n", 147 | "Trainable params: 84,586\n", 148 | "Non-trainable params: 0\n", 149 | "_________________________________________________________________\n", 150 | "None\n" 151 | ] 152 | }, 153 | { 154 | "output_type": "stream", 155 | "name": "stderr", 156 | "text": [ 157 | "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/adam.py:105: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", 158 | " super(Adam, self).__init__(name, **kwargs)\n" 159 | ] 160 | }, 161 | { 162 | "output_type": "stream", 163 | "name": "stdout", 164 | "text": [ 165 | "Epoch 1/30\n", 166 | "782/782 - 4s - loss: 1.5598 - accuracy: 0.4364 - 4s/epoch - 6ms/step\n", 167 | "Epoch 2/30\n", 168 | "782/782 - 4s - loss: 1.2366 - accuracy: 0.5617 - 4s/epoch - 5ms/step\n", 169 | "Epoch 3/30\n", 170 | "782/782 - 4s - loss: 1.0923 - accuracy: 0.6158 - 4s/epoch - 5ms/step\n", 171 | "Epoch 4/30\n", 172 | "782/782 - 4s - loss: 1.0094 - accuracy: 0.6468 - 4s/epoch - 5ms/step\n", 173 | "Epoch 5/30\n", 174 | "782/782 - 4s - loss: 0.9511 - accuracy: 0.6691 - 4s/epoch - 5ms/step\n", 175 | "Epoch 6/30\n", 176 | "782/782 - 4s - loss: 0.8981 - accuracy: 0.6894 - 4s/epoch - 5ms/step\n", 177 | "Epoch 7/30\n", 178 | "782/782 - 4s - loss: 0.8595 - accuracy: 0.7002 - 4s/epoch - 5ms/step\n", 179 | "Epoch 8/30\n", 180 | "782/782 - 4s - loss: 0.8200 - accuracy: 0.7164 - 4s/epoch - 5ms/step\n", 181 | "Epoch 9/30\n", 182 | "782/782 - 4s - loss: 0.7941 - accuracy: 0.7242 - 4s/epoch - 5ms/step\n", 183 | "Epoch 10/30\n", 184 | "782/782 - 4s - loss: 0.7642 - accuracy: 0.7346 - 4s/epoch - 5ms/step\n", 185 | "Epoch 11/30\n", 186 | "782/782 - 4s - loss: 0.7340 - accuracy: 0.7450 - 4s/epoch - 5ms/step\n", 187 | "Epoch 12/30\n", 188 | "782/782 - 4s - loss: 0.7077 - accuracy: 0.7535 - 4s/epoch - 5ms/step\n", 189 | "Epoch 13/30\n", 190 | "782/782 - 4s - loss: 0.6827 - accuracy: 0.7608 - 4s/epoch - 5ms/step\n", 191 | "Epoch 14/30\n", 192 | "782/782 - 4s - loss: 0.6680 - accuracy: 0.7671 - 4s/epoch - 5ms/step\n", 193 | "Epoch 15/30\n", 194 | "782/782 - 4s - loss: 0.6470 - accuracy: 0.7747 - 4s/epoch - 5ms/step\n", 195 | "Epoch 16/30\n", 196 | "782/782 - 4s - loss: 0.6267 - accuracy: 0.7819 - 4s/epoch - 5ms/step\n", 197 | "Epoch 17/30\n", 198 | "782/782 - 4s - loss: 0.6096 - accuracy: 0.7875 - 4s/epoch - 5ms/step\n", 199 | "Epoch 18/30\n", 200 | "782/782 - 4s - loss: 0.5853 - accuracy: 0.7955 - 4s/epoch - 5ms/step\n", 201 | "Epoch 19/30\n", 202 | "782/782 - 4s - loss: 0.5788 - accuracy: 0.7980 - 4s/epoch - 5ms/step\n", 203 | "Epoch 20/30\n", 204 | "782/782 - 4s - loss: 0.5612 - accuracy: 0.8024 - 4s/epoch - 5ms/step\n", 205 | "Epoch 21/30\n", 206 | "782/782 - 4s - loss: 0.5456 - accuracy: 0.8088 - 4s/epoch - 5ms/step\n", 207 | "Epoch 22/30\n", 208 | "782/782 - 4s - loss: 0.5270 - accuracy: 0.8162 - 4s/epoch - 5ms/step\n", 209 | "Epoch 23/30\n", 210 | "782/782 - 4s - loss: 0.5154 - accuracy: 0.8191 - 4s/epoch - 5ms/step\n", 211 | "Epoch 24/30\n", 212 | "782/782 - 4s - loss: 0.5005 - accuracy: 0.8233 - 4s/epoch - 5ms/step\n", 213 | "Epoch 25/30\n", 214 | "782/782 - 4s - loss: 0.4906 - accuracy: 0.8284 - 4s/epoch - 5ms/step\n", 215 | "Epoch 26/30\n", 216 | "782/782 - 4s - loss: 0.4731 - accuracy: 0.8340 - 4s/epoch - 5ms/step\n", 217 | "Epoch 27/30\n", 218 | "782/782 - 4s - loss: 0.4642 - accuracy: 0.8359 - 4s/epoch - 5ms/step\n", 219 | "Epoch 28/30\n", 220 | "782/782 - 4s - loss: 0.4493 - accuracy: 0.8421 - 4s/epoch - 5ms/step\n", 221 | "Epoch 29/30\n", 222 | "782/782 - 4s - loss: 0.4396 - accuracy: 0.8439 - 4s/epoch - 5ms/step\n", 223 | "Epoch 30/30\n", 224 | "782/782 - 4s - loss: 0.4317 - accuracy: 0.8474 - 4s/epoch - 5ms/step\n", 225 | "157/157 - 1s - loss: 1.1678 - accuracy: 0.6792 - 713ms/epoch - 5ms/step\n" 226 | ] 227 | }, 228 | { 229 | "output_type": "execute_result", 230 | "data": { 231 | "text/plain": [ 232 | "[1.1678192615509033, 0.6791999936103821]" 233 | ] 234 | }, 235 | "metadata": {}, 236 | "execution_count": 4 237 | } 238 | ] 239 | }, 240 | { 241 | "cell_type": "code", 242 | "source": [ 243 | "" 244 | ], 245 | "metadata": { 246 | "id": "6CI1cBIoV2_4" 247 | }, 248 | "execution_count": null, 249 | "outputs": [] 250 | } 251 | ] 252 | } -------------------------------------------------------------------------------- /Load_model.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "Load_model.ipynb", 7 | "provenance": [], 8 | "authorship_tag": "ABX9TyOC61EK6rIRkc8fwWMstF8k", 9 | "include_colab_link": true 10 | }, 11 | "kernelspec": { 12 | "name": "python3", 13 | "display_name": "Python 3" 14 | }, 15 | "language_info": { 16 | "name": "python" 17 | }, 18 | "accelerator": "GPU" 19 | }, 20 | "cells": [ 21 | { 22 | "cell_type": "markdown", 23 | "metadata": { 24 | "id": "view-in-github", 25 | "colab_type": "text" 26 | }, 27 | "source": [ 28 | "\"Open" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 1, 34 | "metadata": { 35 | "colab": { 36 | "base_uri": "https://localhost:8080/" 37 | }, 38 | "id": "NPUiENulmMVZ", 39 | "outputId": "d7ff31e9-8be1-4dfd-a016-d0e945f30db1" 40 | }, 41 | "outputs": [ 42 | { 43 | "output_type": "stream", 44 | "name": "stdout", 45 | "text": [ 46 | "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n", 47 | "11493376/11490434 [==============================] - 0s 0us/step\n", 48 | "11501568/11490434 [==============================] - 0s 0us/step\n" 49 | ] 50 | }, 51 | { 52 | "output_type": "stream", 53 | "name": "stderr", 54 | "text": [ 55 | "/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/adam.py:105: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n", 56 | " super(Adam, self).__init__(name, **kwargs)\n" 57 | ] 58 | }, 59 | { 60 | "output_type": "stream", 61 | "name": "stdout", 62 | "text": [ 63 | "Epoch 1/5\n", 64 | "938/938 - 5s - loss: 0.3046 - sparse_categorical_accuracy: 0.9139 - 5s/epoch - 5ms/step\n", 65 | "Epoch 2/5\n", 66 | "938/938 - 2s - loss: 0.1376 - sparse_categorical_accuracy: 0.9598 - 2s/epoch - 2ms/step\n", 67 | "Epoch 3/5\n", 68 | "938/938 - 2s - loss: 0.0963 - sparse_categorical_accuracy: 0.9722 - 2s/epoch - 3ms/step\n", 69 | "Epoch 4/5\n", 70 | "938/938 - 2s - loss: 0.0733 - sparse_categorical_accuracy: 0.9786 - 2s/epoch - 3ms/step\n", 71 | "Epoch 5/5\n", 72 | "938/938 - 2s - loss: 0.0579 - sparse_categorical_accuracy: 0.9832 - 2s/epoch - 2ms/step\n", 73 | "Evaluate:\n", 74 | "313/313 - 1s - loss: 0.0811 - sparse_categorical_accuracy: 0.9744 - 836ms/epoch - 3ms/step\n", 75 | "INFO:tensorflow:Assets written to: nn/assets\n" 76 | ] 77 | } 78 | ], 79 | "source": [ 80 | "import tensorflow as tf\n", 81 | "from tensorflow import keras\n", 82 | "import numpy as np\n", 83 | "\n", 84 | "mnist = keras.datasets.mnist\n", 85 | "\n", 86 | "(x_train, y_train), (x_test, y_test) = mnist.load_data()\n", 87 | "\n", 88 | "# normalize\n", 89 | "x_train, x_test = x_train / 255.0, x_test / 255.0\n", 90 | "\n", 91 | "\n", 92 | "# Feed forward neural network\n", 93 | "model = keras.models.Sequential([\n", 94 | " keras.layers.Flatten(input_shape=(28,28)),\n", 95 | " keras.layers.Dense(128, activation='relu'),\n", 96 | " keras.layers.Dense(10),\n", 97 | "])\n", 98 | "\n", 99 | "# config\n", 100 | "loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)\n", 101 | "optim = keras.optimizers.Adam(lr=0.001) # \"adam\"\n", 102 | "metrics = [keras.metrics.SparseCategoricalAccuracy()] # \"accuracy\"\n", 103 | "\n", 104 | "# compile\n", 105 | "model.compile(loss=loss, optimizer=optim, metrics=metrics)\n", 106 | "\n", 107 | "# fit/training\n", 108 | "model.fit(x_train, y_train, batch_size=64, epochs=5, shuffle=True, verbose=2)\n", 109 | "\n", 110 | "print(\"Evaluate:\")\n", 111 | "model.evaluate(x_test, y_test, verbose=2)\n", 112 | "\n", 113 | "# 1) Save whole model\n", 114 | "# two formats: SavedModel or HDF5\n", 115 | "model.save(\"nn\") # no file ending = SavedModel\n", 116 | "model.save(\"nn.h5\") # .h5 = HDF5\n", 117 | "\n", 118 | "new_model = keras.models.load_model(\"nn.h5\")\n", 119 | "\n" 120 | ] 121 | }, 122 | { 123 | "cell_type": "code", 124 | "source": [ 125 | "# 2) save only weights\n", 126 | "model.save_weights(\"nn_weights.h5\")\n", 127 | "\n", 128 | "# initilaize model first:\n", 129 | "# model = keras.Sequential([...])\n", 130 | "model.load_weights(\"nn_weights.h5\")\n", 131 | "\n" 132 | ], 133 | "metadata": { 134 | "id": "c2w7PmDamlXK" 135 | }, 136 | "execution_count": 2, 137 | "outputs": [] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "source": [ 142 | "# 3) save only architecture, to_json\n", 143 | "json_string = model.to_json()\n", 144 | "\n", 145 | "with open(\"nn_model.json\", \"w\") as f:\n", 146 | " f.write(json_string)\n", 147 | "\n", 148 | "with open(\"nn_model.json\", \"r\") as f:\n", 149 | " loaded_json_string = f.read()\n", 150 | "\n", 151 | "new_model = keras.models.model_from_json(loaded_json_string)\n", 152 | "print(new_model.summary())\n" 153 | ], 154 | "metadata": { 155 | "colab": { 156 | "base_uri": "https://localhost:8080/" 157 | }, 158 | "id": "XqiZXhWlmwbd", 159 | "outputId": "10d1612c-2dae-4276-c3a0-f905c7839ee8" 160 | }, 161 | "execution_count": 3, 162 | "outputs": [ 163 | { 164 | "output_type": "stream", 165 | "name": "stdout", 166 | "text": [ 167 | "Model: \"sequential\"\n", 168 | "_________________________________________________________________\n", 169 | " Layer (type) Output Shape Param # \n", 170 | "=================================================================\n", 171 | " flatten (Flatten) (None, 784) 0 \n", 172 | " \n", 173 | " dense (Dense) (None, 128) 100480 \n", 174 | " \n", 175 | " dense_1 (Dense) (None, 10) 1290 \n", 176 | " \n", 177 | "=================================================================\n", 178 | "Total params: 101,770\n", 179 | "Trainable params: 101,770\n", 180 | "Non-trainable params: 0\n", 181 | "_________________________________________________________________\n", 182 | "None\n" 183 | ] 184 | } 185 | ] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "source": [ 190 | "" 191 | ], 192 | "metadata": { 193 | "id": "uKan1yYemzZf" 194 | }, 195 | "execution_count": null, 196 | "outputs": [] 197 | } 198 | ] 199 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tensorflow 2 | Neural Network 3 | --------------------------------------------------------------------------------