{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"5-1 합성곱 신경망 소개.ipynb","provenance":[],"collapsed_sections":[]},"kernelspec":{"name":"python3","display_name":"Python 3"}},"cells":[{"cell_type":"code","metadata":{"id":"Iw2JNaKH5Q1E","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":226},"outputId":"8c3ebbfd-3f74-492a-e505-e30f515a0ef0","executionInfo":{"status":"ok","timestamp":1578400089995,"user_tz":-540,"elapsed":3077,"user":{"displayName":"Yoon Jack","photoUrl":"","userId":"04923927567667044980"}}},"source":["from keras import layers\n","from keras import models\n","\n","model = models.Sequential()\n","model.add(layers.Conv2D(32, (3, 3), activation = 'relu', input_shape = (28, 28, 1)))\n","model.add(layers.MaxPooling2D((2, 2)))\n","model.add(layers.Conv2D(64, (3, 3), activation = 'relu'))\n","model.add(layers.MaxPooling2D((2, 2)))\n","model.add(layers.Conv2D(64, (3, 3), activation = 'relu'))"],"execution_count":1,"outputs":[{"output_type":"stream","text":["Using TensorFlow backend.\n"],"name":"stderr"},{"output_type":"display_data","data":{"text/html":["

\n","The default version of TensorFlow in Colab will soon switch to TensorFlow 2.x.
\n","We recommend you upgrade now \n","or ensure your notebook will continue to use TensorFlow 1.x via the %tensorflow_version 1.x magic:\n","more info.

\n"],"text/plain":[""]},"metadata":{"tags":[]}},{"output_type":"stream","text":["WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:66: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n","\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:541: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n","\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:4432: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n","\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:4267: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n","\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"OoFx1tGJ62gC","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":341},"outputId":"7961c7e8-c2cd-4264-ccf4-7b7218648092","executionInfo":{"status":"ok","timestamp":1578400092233,"user_tz":-540,"elapsed":927,"user":{"displayName":"Yoon Jack","photoUrl":"","userId":"04923927567667044980"}}},"source":["model.summary()"],"execution_count":2,"outputs":[{"output_type":"stream","text":["Model: \"sequential_1\"\n","_________________________________________________________________\n","Layer (type) Output Shape Param # \n","=================================================================\n","conv2d_1 (Conv2D) (None, 26, 26, 32) 320 \n","_________________________________________________________________\n","max_pooling2d_1 (MaxPooling2 (None, 13, 13, 32) 0 \n","_________________________________________________________________\n","conv2d_2 (Conv2D) (None, 11, 11, 64) 18496 \n","_________________________________________________________________\n","max_pooling2d_2 (MaxPooling2 (None, 5, 5, 64) 0 \n","_________________________________________________________________\n","conv2d_3 (Conv2D) (None, 3, 3, 64) 36928 \n","=================================================================\n","Total params: 55,744\n","Trainable params: 55,744\n","Non-trainable params: 0\n","_________________________________________________________________\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"H-ecXRKv68or","colab_type":"code","colab":{}},"source":["model.add(layers.Flatten())\n","model.add(layers.Dense(64, activation = 'relu'))\n","model.add(layers.Dense(10, activation = 'softmax'))"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"MJNyA5IC7N1r","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":449},"outputId":"3735395a-50f1-4fe9-b04d-d70ef45f8ec6","executionInfo":{"status":"ok","timestamp":1578400094947,"user_tz":-540,"elapsed":644,"user":{"displayName":"Yoon Jack","photoUrl":"","userId":"04923927567667044980"}}},"source":["model.summary()"],"execution_count":4,"outputs":[{"output_type":"stream","text":["Model: \"sequential_1\"\n","_________________________________________________________________\n","Layer (type) Output Shape Param # \n","=================================================================\n","conv2d_1 (Conv2D) (None, 26, 26, 32) 320 \n","_________________________________________________________________\n","max_pooling2d_1 (MaxPooling2 (None, 13, 13, 32) 0 \n","_________________________________________________________________\n","conv2d_2 (Conv2D) (None, 11, 11, 64) 18496 \n","_________________________________________________________________\n","max_pooling2d_2 (MaxPooling2 (None, 5, 5, 64) 0 \n","_________________________________________________________________\n","conv2d_3 (Conv2D) (None, 3, 3, 64) 36928 \n","_________________________________________________________________\n","flatten_1 (Flatten) (None, 576) 0 \n","_________________________________________________________________\n","dense_1 (Dense) (None, 64) 36928 \n","_________________________________________________________________\n","dense_2 (Dense) (None, 10) 650 \n","=================================================================\n","Total params: 93,322\n","Trainable params: 93,322\n","Non-trainable params: 0\n","_________________________________________________________________\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"JxRl7FFx7Qmz","colab_type":"code","colab":{}},"source":["from keras.datasets import mnist\n","from keras.utils import to_categorical\n","\n","(train_images, train_labels), (test_images, test_labels) = mnist.load_data()"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"3iEhH1eQ7kct","colab_type":"code","colab":{}},"source":["train_images = train_images.reshape((60000, 28, 28, 1))\n","train_images = train_images.astype('float32') / 255\n","\n","test_images = test_images.reshape((10000, 28, 28, 1))\n","test_images = test_images.astype('float32') / 255\n","\n","train_labels = to_categorical(train_labels)\n","test_labels = to_categorical(test_labels)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"pJRCIhzl8yn2","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":89},"outputId":"0f743923-5f23-480b-a14e-02d04f8e842f","executionInfo":{"status":"ok","timestamp":1578400100220,"user_tz":-540,"elapsed":948,"user":{"displayName":"Yoon Jack","photoUrl":"","userId":"04923927567667044980"}}},"source":["model.compile(optimizer = 'rmsprop',\n"," loss = 'categorical_crossentropy',\n"," metrics = ['accuracy'])"],"execution_count":7,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/optimizers.py:793: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n","\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3576: The name tf.log is deprecated. Please use tf.math.log instead.\n","\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"KtiFUqhx8RcJ","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":557},"outputId":"5efac2ff-54a9-4a7f-d79f-8af014016426","executionInfo":{"status":"ok","timestamp":1578400372189,"user_tz":-540,"elapsed":271500,"user":{"displayName":"Yoon Jack","photoUrl":"","userId":"04923927567667044980"}}},"source":["model.fit(train_images, train_labels, epochs = 5, batch_size = 64)"],"execution_count":8,"outputs":[{"output_type":"stream","text":["WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/math_grad.py:1424: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n","Instructions for updating:\n","Use tf.where in 2.0, which has the same broadcast rule as np.where\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:1033: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n","\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:1020: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.\n","\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:3005: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n","\n","Epoch 1/5\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:190: The name tf.get_default_session is deprecated. Please use tf.compat.v1.get_default_session instead.\n","\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:197: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.\n","\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:207: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead.\n","\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:216: The name tf.is_variable_initialized is deprecated. Please use tf.compat.v1.is_variable_initialized instead.\n","\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:223: The name tf.variables_initializer is deprecated. Please use tf.compat.v1.variables_initializer instead.\n","\n","60000/60000 [==============================] - 54s 908us/step - loss: 0.1984 - acc: 0.9380\n","Epoch 2/5\n","60000/60000 [==============================] - 54s 897us/step - loss: 0.0685 - acc: 0.9805\n","Epoch 3/5\n","60000/60000 [==============================] - 54s 897us/step - loss: 0.0520 - acc: 0.9859\n","Epoch 4/5\n","60000/60000 [==============================] - 54s 900us/step - loss: 0.0475 - acc: 0.9886\n","Epoch 5/5\n","60000/60000 [==============================] - 53s 884us/step - loss: 0.0407 - acc: 0.9902\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{"tags":[]},"execution_count":8}]},{"cell_type":"code","metadata":{"id":"Dj3GIZRE84q5","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":53},"outputId":"a5931af9-5b71-4739-b0e9-389ac743f85a","executionInfo":{"status":"ok","timestamp":1578400436181,"user_tz":-540,"elapsed":4137,"user":{"displayName":"Yoon Jack","photoUrl":"","userId":"04923927567667044980"}}},"source":["test_loss, test_acc = model.evaluate(test_images, test_labels)\n","test_acc"],"execution_count":10,"outputs":[{"output_type":"stream","text":["10000/10000 [==============================] - 3s 325us/step\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["0.9893"]},"metadata":{"tags":[]},"execution_count":10}]},{"cell_type":"code","metadata":{"id":"kqw3UZdE_vpN","colab_type":"code","colab":{}},"source":[""],"execution_count":0,"outputs":[]}]}