{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "bmTf8Nr0ifCU" }, "source": [ "# 머신 러닝 교과서 3판" ] }, { "cell_type": "markdown", "metadata": { "id": "urDF4hh_ifCV" }, "source": [ "# 15장 - 심층 합성곱 신경망으로 이미지 분류 (1/2)" ] }, { "cell_type": "markdown", "metadata": { "id": "R5cTA0rXifCV" }, "source": [ "**아래 링크를 통해 이 노트북을 주피터 노트북 뷰어(nbviewer.jupyter.org)로 보거나 구글 코랩(colab.research.google.com)에서 실행할 수 있습니다.**\n", "\n", "\n", " \n", " \n", "
\n", " 주피터 노트북 뷰어로 보기\n", " \n", " 구글 코랩(Colab)에서 실행하기\n", "
" ] }, { "cell_type": "markdown", "metadata": { "id": "f27nCXbrifCW" }, "source": [ "### 목차" ] }, { "cell_type": "markdown", "metadata": { "id": "2_7fyte5ifCW" }, "source": [ "- 합성곱 신경망의 구성 요소\n", " - CNN과 특성 계층 학습\n", " - 이산 합성곱 수행\n", " - 1차원 이산 합성곱 수행\n", " - 출력 특성 맵의 크기를 조절하기 위해 입력에 패딩하기\n", " - 합성곱 출력 크기 계산\n", " - 2D 이산 합성곱 수행\n", " - 서브샘플링\n", "- 기본 구성 요소를 사용하여 심층 합성곱 신경망 구성\n", " - 여러 개의 입력 또는 컬러 채널 다루기\n", " - 드롭아웃으로 신경망 규제\n", " - 분류를 위한 손실 함수\n", "- 텐서플로를 사용하여 심층 합성곱 신경망 구현\n", " - 다층 CNN 구조\n", " - 데이터 적재와 전처리\n", " - 텐서플로 케라스 API를 사용해 CNN 구현하기\n", " - 케라스에서 CNN 층 설정하기\n", " - 케라스로 CNN 구성하기" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "id": "177002meifCW" }, "outputs": [], "source": [ "from IPython.display import Image" ] }, { "cell_type": "markdown", "metadata": { "id": "QhoWUw-DifCW" }, "source": [ "## 합성곱 신경망의 구성 요소\n", "\n", "### CNN과 특성 계층 학습" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 305 }, "id": "Z1yJcNPqifCW", "outputId": "c054d964-82a6-48fe-db00-96bb7d141519" }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url='https://git.io/JL5O3', width=700)" ] }, { "cell_type": "markdown", "metadata": { "id": "n1CfLNUSifCX" }, "source": [ "### 이산 합성곱 수행\n", "\n", "#### 1차원 이산 합성곱 수행" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 278 }, "id": "GKOpZy2TifCX", "outputId": "71bf784f-6e71-45fd-95f6-045343cc7fc0" }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url='https://git.io/JL5On', width=700)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 454 }, "id": "E3J3_NTNifCY", "outputId": "0c91127d-b4e3-4a39-cf18-196e993eb9cb" }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url='https://git.io/JL5O8', width=700)" ] }, { "cell_type": "markdown", "metadata": { "id": "4FylyB5IifCY" }, "source": [ "#### 출력 특성 맵의 크기를 조절하기 위해 입력에 패딩하기" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 211 }, "id": "atIWe4jRifCY", "outputId": "fcad2bcc-98e8-4adb-9e19-2fe98de28e4b" }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url='https://git.io/JL5Ow', width=700)" ] }, { "cell_type": "markdown", "metadata": { "id": "fjCOUYGWifCY" }, "source": [ "#### 합성곱 출력 크기 계산" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "kLmHMacdifCY", "outputId": "6812dafd-29f2-4cbe-e4ea-5ed3fc9104b2" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "텐서플로 버전: 2.19.0\n", "넘파이 버전: 2.0.2\n" ] } ], "source": [ "import tensorflow as tf\n", "import numpy as np\n", "\n", "print('텐서플로 버전:', tf.__version__)\n", "print('넘파이 버전: ', np.__version__)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "15FDd_AMifCZ", "outputId": "a4a48444-0e0c-4aee-9321-83ed0e2e1dd3" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Conv1d 구현: [ 5. 14. 16. 26. 24. 34. 19. 22.]\n", "넘파이 결과: [ 5 14 16 26 24 34 19 22]\n" ] } ], "source": [ "def conv1d(x, w, p=0, s=1):\n", " w_rot = np.array(w[::-1])\n", " x_padded = np.array(x)\n", " if p > 0:\n", " zero_pad = np.zeros(shape=p)\n", " x_padded = np.concatenate(\n", " [zero_pad, x_padded, zero_pad])\n", " res = []\n", " for i in range(0, int((len(x_padded) - len(w_rot)) / s) + 1, s):\n", " res.append(np.sum(\n", " x_padded[i:i+w_rot.shape[0]] * w_rot))\n", " return np.array(res)\n", "\n", "\n", "## 테스트:\n", "x = [1, 3, 2, 4, 5, 6, 1, 3]\n", "w = [1, 0, 3, 1, 2]\n", "\n", "print('Conv1d 구현:',\n", " conv1d(x, w, p=2, s=1))\n", "\n", "print('넘파이 결과:',\n", " np.convolve(x, w, mode='same'))" ] }, { "cell_type": "markdown", "metadata": { "id": "22WjlUkgifCZ" }, "source": [ "#### 2D 이산 합성곱 수행" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 413 }, "id": "vOAuCO9kifCZ", "outputId": "dcbc8451-b3dd-4992-bc61-73dac86b8e8b" }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url='https://git.io/JL5OP', width=700)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 351 }, "id": "il5jQ-mZifCZ", "outputId": "d33377f4-3855-4517-e99a-081080474710", "scrolled": true }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url='https://git.io/JL5OD', width=600)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 374 }, "id": "TVLqLnMXifCa", "outputId": "43e47bb0-f002-4e46-83a9-85235475d9d8" }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url='https://git.io/JL5OS', width=800)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "I8VBXnCjifCa", "outputId": "1730749e-27fc-4220-eba6-51ca739bf3d0" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Conv2d 구현:\n", " [[11. 25. 32. 13.]\n", " [19. 25. 24. 13.]\n", " [13. 28. 25. 17.]\n", " [11. 17. 14. 9.]]\n", "싸이파이 결과:\n", " [[11 25 32 13]\n", " [19 25 24 13]\n", " [13 28 25 17]\n", " [11 17 14 9]]\n" ] } ], "source": [ "import scipy.signal\n", "\n", "\n", "def conv2d(X, W, p=(0, 0), s=(1, 1)):\n", " W_rot = np.array(W)[::-1,::-1]\n", " X_orig = np.array(X)\n", " n1 = X_orig.shape[0] + 2*p[0]\n", " n2 = X_orig.shape[1] + 2*p[1]\n", " X_padded = np.zeros(shape=(n1, n2))\n", " X_padded[p[0]:p[0]+X_orig.shape[0],\n", " p[1]:p[1]+X_orig.shape[1]] = X_orig\n", "\n", " res = []\n", " for i in range(0, int((X_padded.shape[0] -\n", " W_rot.shape[0])/s[0])+1, s[0]):\n", " res.append([])\n", " for j in range(0, int((X_padded.shape[1] -\n", " W_rot.shape[1])/s[1])+1, s[1]):\n", " X_sub = X_padded[i:i+W_rot.shape[0],\n", " j:j+W_rot.shape[1]]\n", " res[-1].append(np.sum(X_sub * W_rot))\n", " return(np.array(res))\n", "\n", "X = [[1, 3, 2, 4], [5, 6, 1, 3], [1, 2, 0, 2], [3, 4, 3, 2]]\n", "W = [[1, 0, 3], [1, 2, 1], [0, 1, 1]]\n", "\n", "print('Conv2d 구현:\\n',\n", " conv2d(X, W, p=(1, 1), s=(1, 1)))\n", "\n", "\n", "print('싸이파이 결과:\\n',\n", " scipy.signal.convolve2d(X, W, mode='same'))" ] }, { "cell_type": "markdown", "metadata": { "id": "RHePysibifCa" }, "source": [ "### 서브샘플링" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 366 }, "id": "kc1ZMqcLifCa", "outputId": "503d222c-99a2-4e5f-9a5f-de89eb38fb02" }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url='https://git.io/JL5OH', width=700)" ] }, { "cell_type": "markdown", "metadata": { "id": "57cBF6lxifCb" }, "source": [ "## 기본 구성 요소를 사용하여 심층 합성곱 신경망 구성\n", "\n", "### 여러 개의 입력 또는 컬러 채널 다루기" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 421 }, "id": "VdJuRn5AifCb", "outputId": "06c37b75-8e61-45d1-f56b-1378ec23f08d" }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url='https://git.io/JL5O5', width=800)" ] }, { "cell_type": "markdown", "metadata": { "id": "ldWAgzDQifCb" }, "source": [ "**팁: 이미지 파일 읽기**" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "U2_UgtcxvuJj", "outputId": "7a376527-6aff-487e-aa8a-b8df258874aa" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--2025-09-03 02:35:15-- https://git.io/JL5Ob\n", "Resolving git.io (git.io)... 140.82.113.22\n", "Connecting to git.io (git.io)|140.82.113.22|:443... connected.\n", "HTTP request sent, awaiting response... 301 Moved Permanently\n", "Location: https://github.com/rickiepark/python-machine-learning-book-3rd-edition/raw/master/ch15/example-image.png [following]\n", "--2025-09-03 02:35:16-- https://github.com/rickiepark/python-machine-learning-book-3rd-edition/raw/master/ch15/example-image.png\n", "Resolving github.com (github.com)... 20.205.243.166\n", "Connecting to github.com (github.com)|20.205.243.166|:443... connected.\n", "HTTP request sent, awaiting response... 302 Found\n", "Location: https://raw.githubusercontent.com/rickiepark/python-machine-learning-book-3rd-edition/master/ch15/example-image.png [following]\n", "--2025-09-03 02:35:16-- https://raw.githubusercontent.com/rickiepark/python-machine-learning-book-3rd-edition/master/ch15/example-image.png\n", "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...\n", "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 22283 (22K) [image/png]\n", "Saving to: ‘example-image.png’\n", "\n", "example-image.png 100%[===================>] 21.76K --.-KB/s in 0s \n", "\n", "2025-09-03 02:35:16 (163 MB/s) - ‘example-image.png’ saved [22283/22283]\n", "\n" ] } ], "source": [ "# 코랩에서 실행할 경우 이미지를 먼저 다운로드합니다\n", "!wget https://git.io/JL5Ob -O example-image.png" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "2lQymxAJifCb", "outputId": "9c64d5fd-3196-44e4-dbec-dab5adaa0344" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "이미지 크기: (252, 221, 3)\n", "채널 개수: 3\n", "이미지 데이터 타입: \n", "tf.Tensor(\n", "[[[179 134 110]\n", " [182 136 112]]\n", "\n", " [[180 135 111]\n", " [182 137 113]]], shape=(2, 2, 3), dtype=uint8)\n" ] } ], "source": [ "import tensorflow as tf\n", "\n", "\n", "img_raw = tf.io.read_file('example-image.png')\n", "img = tf.image.decode_image(img_raw)\n", "print('이미지 크기:', img.shape)\n", "print('채널 개수:', img.shape[2])\n", "print('이미지 데이터 타입:', img.dtype)\n", "print(img[100:102, 100:102, :])" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "qo8Ybg9wifCc", "outputId": "b3617966-302d-4204-8401-619c6f831990" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "이미지 크기: (252, 221, 3)\n", "채널 개수: 3\n", "이미지 데이터 타입: uint8\n", "[[[179 134 110]\n", " [182 136 112]]\n", "\n", " [[180 135 111]\n", " [182 137 113]]]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipython-input-504236035.py:4: DeprecationWarning: Starting with ImageIO v3 the behavior of this function will switch to that of iio.v3.imread. To keep the current behavior (and make this warning disappear) use `import imageio.v2 as imageio` or call `imageio.v2.imread` directly.\n", " img = imageio.imread('example-image.png')\n" ] } ], "source": [ "import imageio\n", "\n", "\n", "img = imageio.imread('example-image.png')\n", "print('이미지 크기:', img.shape)\n", "print('채널 개수:', img.shape[2])\n", "print('이미지 데이터 타입:', img.dtype)\n", "print(img[100:102, 100:102, :])" ] }, { "cell_type": "markdown", "metadata": { "id": "pRudlk4_ifCd" }, "source": [ "**노트: CNN 입력을 위한 흑백 이미지의 랭크**" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "LeRSnSZEw45S", "outputId": "d2b1952e-a4c0-4f19-c1cd-a9f2fd6ab148" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--2025-09-03 02:35:18-- https://git.io/JL5Op\n", "Resolving git.io (git.io)... 140.82.113.22\n", "Connecting to git.io (git.io)|140.82.113.22|:443... connected.\n", "HTTP request sent, awaiting response... 301 Moved Permanently\n", "Location: https://github.com/rickiepark/python-machine-learning-book-3rd-edition/raw/master/ch15/example-image-gray.png [following]\n", "--2025-09-03 02:35:19-- https://github.com/rickiepark/python-machine-learning-book-3rd-edition/raw/master/ch15/example-image-gray.png\n", "Resolving github.com (github.com)... 20.205.243.166\n", "Connecting to github.com (github.com)|20.205.243.166|:443... connected.\n", "HTTP request sent, awaiting response... 302 Found\n", "Location: https://raw.githubusercontent.com/rickiepark/python-machine-learning-book-3rd-edition/master/ch15/example-image-gray.png [following]\n", "--2025-09-03 02:35:19-- https://raw.githubusercontent.com/rickiepark/python-machine-learning-book-3rd-edition/master/ch15/example-image-gray.png\n", "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.108.133, 185.199.111.133, ...\n", "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 8501 (8.3K) [image/png]\n", "Saving to: ‘example-image-gray.png’\n", "\n", "example-image-gray. 100%[===================>] 8.30K --.-KB/s in 0s \n", "\n", "2025-09-03 02:35:19 (63.0 MB/s) - ‘example-image-gray.png’ saved [8501/8501]\n", "\n" ] } ], "source": [ "# 코랩에서 실행할 경우 이미지를 먼저 다운로드합니다\n", "!wget https://git.io/JL5Op -O example-image-gray.png" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ZyCzEMJOifCd", "outputId": "11917d7c-7d38-44b1-8118-105fb801550b" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "랭크: 3\n", "크기: TensorShape([252, 221, 1])\n" ] } ], "source": [ "img_raw = tf.io.read_file('example-image-gray.png')\n", "img = tf.image.decode_image(img_raw)\n", "tf.print('랭크:', tf.rank(img))\n", "tf.print('크기:', img.shape)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "OwY7M7mxifCd", "outputId": "d0a2d65b-c1d8-4e19-964c-34db724a7df9" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "랭크: 2\n", "크기: (252, 221)\n", "새로운 크기: TensorShape([252, 221, 1])\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipython-input-1427168624.py:1: DeprecationWarning: Starting with ImageIO v3 the behavior of this function will switch to that of iio.v3.imread. To keep the current behavior (and make this warning disappear) use `import imageio.v2 as imageio` or call `imageio.v2.imread` directly.\n", " img = imageio.imread('example-image-gray.png')\n" ] } ], "source": [ "img = imageio.imread('example-image-gray.png')\n", "tf.print('랭크:', tf.rank(img))\n", "tf.print('크기:', img.shape)\n", "\n", "img_reshaped = tf.reshape(img, (img.shape[0], img.shape[1], 1))\n", "tf.print('새로운 크기:', img_reshaped.shape)" ] }, { "cell_type": "markdown", "metadata": { "id": "Zy4sB8jVifCd" }, "source": [ "### 드롭아웃으로 신경망 규제" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 379 }, "id": "Lrc2CPzwifCe", "outputId": "0417e2c3-5338-41f7-b279-c5aefef05fb7" }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url='https://git.io/JL5Oh', width=700)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "id": "Mp-rHuGVifCe" }, "outputs": [], "source": [ "from tensorflow import keras\n", "\n", "\n", "conv_layer = keras.layers.Conv2D(\n", " filters=16, kernel_size=(3, 3),\n", " kernel_regularizer=keras.regularizers.l2(0.001))\n", "\n", "fc_layer = keras.layers.Dense(\n", " units=16, kernel_regularizer=keras.regularizers.l2(0.001))" ] }, { "cell_type": "markdown", "metadata": { "id": "Kv1zkQutifCe" }, "source": [ "### 분류를 위한 손실 함수\n", "\n", " * **`BinaryCrossentropy()`**\n", " * `from_logits=False`\n", " * `from_logits=True`\n", "\n", " * **`CategoricalCrossentropy()`**\n", " * `from_logits=False`\n", " * `from_logits=True`\n", " \n", " * **`SparseCategoricalCrossentropy()`**\n", " * `from_logits=False`\n", " * `from_logits=True`" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 357 }, "id": "iOAinQEQifCe", "outputId": "9d055386-ceac-47e4-f54f-331d0f103227" }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url='https://git.io/JL53f', width=800)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "B5oj-jDgifCf", "outputId": "3ff630c4-6e32-4aae-b654-37774100b372" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "BCE (확률): 0.3711 (로짓): 0.3711\n", "CCE (확률): 0.5996 (로짓): 0.5996\n", "Sparse CCE (확률): 0.5996 (로짓): 0.5996\n" ] } ], "source": [ "from packaging.version import Version\n", "\n", "\n", "####### 이진 크로스 엔트로피\n", "bce_probas = tf.keras.losses.BinaryCrossentropy(from_logits=False)\n", "bce_logits = tf.keras.losses.BinaryCrossentropy(from_logits=True)\n", "\n", "logits = tf.constant([0.8])\n", "probas = tf.keras.activations.sigmoid(logits)\n", "\n", "tf.print(\n", " 'BCE (확률): {:.4f}'.format(\n", " bce_probas(y_true=tf.constant([1]), y_pred=probas)),\n", " '(로짓): {:.4f}'.format(\n", " bce_logits(y_true=tf.constant([1]), y_pred=logits)))\n", "\n", "\n", "####### 범주형 크로스 엔트로피\n", "cce_probas = tf.keras.losses.CategoricalCrossentropy(\n", " from_logits=False)\n", "cce_logits = tf.keras.losses.CategoricalCrossentropy(\n", " from_logits=True)\n", "\n", "logits = tf.constant([[1.5, 0.8, 2.1]])\n", "probas = tf.keras.activations.softmax(logits)\n", "\n", "if Version(tf.__version__) >= Version('2.3.0'):\n", " tf.print(\n", " 'CCE (확률): {:.4f}'.format(\n", " cce_probas(y_true=tf.constant([[0, 0, 1]]), y_pred=probas)),\n", " '(로짓): {:.4f}'.format(\n", " cce_logits(y_true=tf.constant([[0, 0, 1]]), y_pred=logits)))\n", "else:\n", " tf.print(\n", " 'CCE (확률): {:.4f}'.format(\n", " cce_probas(y_true=tf.constant([0, 0, 1]), y_pred=probas)),\n", " '(로짓): {:.4f}'.format(\n", " cce_logits(y_true=tf.constant([0, 0, 1]), y_pred=logits)))\n", "\n", "####### 희소 범주형 크로스 엔트로피\n", "sp_cce_probas = tf.keras.losses.SparseCategoricalCrossentropy(\n", " from_logits=False)\n", "sp_cce_logits = tf.keras.losses.SparseCategoricalCrossentropy(\n", " from_logits=True)\n", "\n", "tf.print(\n", " 'Sparse CCE (확률): {:.4f}'.format(\n", " sp_cce_probas(y_true=tf.constant([2]), y_pred=probas)),\n", " '(로짓): {:.4f}'.format(\n", " sp_cce_logits(y_true=tf.constant([2]), y_pred=logits)))" ] }, { "cell_type": "markdown", "metadata": { "id": "EcQnpguXifCf" }, "source": [ "## 텐서플로를 사용하여 심층 합성곱 신경망 구현\n", "\n", "### 다층 CNN 구조" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 288 }, "id": "n893uGaEifCf", "outputId": "9480b587-96dd-4cb4-e376-03aa133a2708" }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url='https://git.io/JL53U', width=800)" ] }, { "cell_type": "markdown", "metadata": { "id": "klgI_t62ifCf" }, "source": [ "### 데이터 적재와 전처리" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "id": "qGT2_kbKifCf" }, "outputs": [], "source": [ "import tensorflow_datasets as tfds\n", "import pandas as pd\n", "\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 189, "referenced_widgets": [ "f5c476cee8744e59846ff28bed95827c", "db55e13e28ae42b1bee9983523702b8b", "d0497fe372ca4889b12540484910f182", "84d1094454b743a2bdb8de32328a7a14", "ecf463e2625e4b75ab3ba9e95e060748", "c22b5bbf6f1f473eac80578eca9e85fd", "52da2a52f82349b7a58ff0ea5192383f", "e5261cd7d6854443b73d077a7ee96579", "c979d4ff299242dab2bdcf2b69d0f522", "0719572d4b7e4f489602b6061bcae90c", "c02b36b551854145854f8729e0ac10a4", "be65625ed730462cb9526534f22eac4c", "628afeb55d364db1a8ca3eb4944832c7", "c911f7f13ed8482d90e1abe1ff7e8d9f", "f9154b2736024a6c8d040370655c0b73", "3a659199c3ad4b98a87ab40b7ae88326", "f4e9404a58c242aab976bf508c583119", "5e3615917b0b4c019134aec3652f5407", "03f7f506fd8941689c69809c3b3b79e1", "8d885000575b463295a9ebcfb9d32b5c", "c46fa993173a4ccc86ed2f3ae6d15e58", "0f49d87107174689a07c161d39d6e5a5", "0e232a59c3664216a27d250fef5a070f", "0b5da2d0e60f4a8b9f5d17a1ba42f655", "7b754c74c61b4c5d952724eeb32c1409", "31a80162e8af4d3db305a5beb9b9a53d", "3c6b05e5f59a400797d129d3e5f7047c", "5e21af94a10c4a83baa435838ac99056", "08daf600163841da9e59d90ea2fed0f9", "e82500c3cd5c4b658f240a7a877f410f", "3282e7a4de1c4f4f8f541e34b075e620", "1852cda2e95e4f06809bec24b7a7298b", "e9a7db3b0ba94253a6b28927f2de7e35", "9ca8fc76fcbe4432a2c394834867f4e0", "ca0e4044ebac4ce8ad2dc8937247f65b", "e616902f4d8446788680549e75c28503", "6c73698781764a1e9517b0085ab9af8e", "6dde5b2e4ba841afb3d7e531826701c7", "d215fb7fd725422cb69cee31b7175140", "e936e7577fc14d3c91aca27e5c878687", "dc4bcc364eb0485ebc6339549cfb124d", "de9bfcb61f0f4943a98063bbaf038046", "0ac5d142c16f4b8a8df63a3f99613d0f", "837c8e2e5c8c42cdbddd67427cd12380", "028dcf4a595f4a599868f1f31d540074", "d30adac5aa514a2cb22f22e3e844d138", "f6fa9c6a370941f9b9f5ab02a381dfe2", "1c8e783159374326835159acc6841c61", "7e92f8c3bf384c009f7ecd8128514e5d", "ca197b6911284f2882a27a5c17190603", "c9644de7b0904cbc9c1be5cfb6d54538", "b9dc16b144614412b40d3f7fe6b7d2cf", "bef4e2f8d42b4199b2806a284d2ff910", "f223b9b119fd4480b30f5f8007eccd3e", "34ec6763a0af429db978ffc0d6d1ea1f", "1f6b616e1a9743098f7807b3c3fd9e08", "de3edfd3ce3449a1b54a3f6e121fd6bc", "e34b5e7f8c6a44a4b36376f23996c6c5", "058a6270f5784ad3adc12caabc595279", "67af18e4260044e0a63b9aba1bfce4d5", "ab947476697e4a9f88ac3ef007dca91a", "4a86dd688e3e453ab028540f4023e7ad", "0e64fdef0a304b7db186f023808fa930", "3b99e50cdfa9430d84fd252cc4d28fad", "6616e44c81364cafb4e62140a05b7430", "2a0a6cae2790415ebd18c1b4824e5233", "4dccee1a170f417484ab275b7350f5c3", "8d9c5435f5c84b44971472035278f3ce", "457f2391a48145dfa9f12340bd78fbc7", "256ad6d06a0a4ca4b397130e776dc108", "bdf4293150094626b494523a95096f4e", "23999941e6524cd7ba8fa99d313d6a9b", "484502e902b2418c9fe907ffd2c92436", "3b5afd79c49c4f48886814183f05f757", "8dfbcff247634ac192de500429379e9c", "a278a980dd55463f8de6d09fa7bb341e", "43102fa522d348fda6f35b46403489f6", "d4a33c8bcad34b5a8d3971c69970d296", "75956289b14b4940b89a18686ddde346", "25a17abe957e4df7b360f18214e92d52", "03605eb4e08c4dda8a94cc72c01a6fc0", "eb6a1bbf3c404348819e566672b279ec", "57afac59a16b4906973a2544c5824085", "89ebc4e360014c2593a6873b40a3cfa5", "d0b24f15c67e43c1b061f872215125a6", "f3238ae7a1f944ef8bc0fc397f1c54dc", "dec0a13019c9448b9f54b1ee5d7f99ab", "aba236c9b3d64bceaf107d5caed29c54" ] }, "id": "csMbYS6PifCf", "outputId": "5c1c0a36-b6cd-4c0e-92cb-35242f413749" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Downloading and preparing dataset Unknown size (download: Unknown size, generated: Unknown size, total: Unknown size) to /root/tensorflow_datasets/mnist/3.0.1...\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f5c476cee8744e59846ff28bed95827c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Dl Completed...: 0 url [00:00, ? url/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "be65625ed730462cb9526534f22eac4c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Dl Size...: 0 MiB [00:00, ? MiB/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0e232a59c3664216a27d250fef5a070f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Extraction completed...: 0 file [00:00, ? file/s]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "9ca8fc76fcbe4432a2c394834867f4e0", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Generating splits...: 0%| | 0/2 [00:00Model: \"sequential\"\n", "\n" ], "text/plain": [ "\u001b[1mModel: \"sequential\"\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
       "│ conv_1 (Conv2D)                 │ (None, 28, 28, 32)     │           832 │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ pool_1 (MaxPooling2D)           │ (None, 14, 14, 32)     │             0 │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ conv_2 (Conv2D)                 │ (None, 14, 14, 64)     │        51,264 │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ pool_2 (MaxPooling2D)           │ (None, 7, 7, 64)       │             0 │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ flatten (Flatten)               │ (None, 3136)           │             0 │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ fc_1 (Dense)                    │ (None, 1024)           │     3,212,288 │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ dropout (Dropout)               │ (None, 1024)           │             0 │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ fc_2 (Dense)                    │ (None, 10)             │        10,250 │\n",
       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
       "
\n" ], "text/plain": [ "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", "│ conv_1 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m832\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ pool_1 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ conv_2 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m14\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m51,264\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ pool_2 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m7\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ flatten (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m3136\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ fc_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m3,212,288\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ dropout (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1024\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", "│ fc_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m10,250\u001b[0m │\n", "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
 Total params: 3,274,634 (12.49 MB)\n",
       "
\n" ], "text/plain": [ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m3,274,634\u001b[0m (12.49 MB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
 Trainable params: 3,274,634 (12.49 MB)\n",
       "
\n" ], "text/plain": [ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m3,274,634\u001b[0m (12.49 MB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
 Non-trainable params: 0 (0.00 B)\n",
       "
\n" ], "text/plain": [ "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model.summary()" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "9-yPq6g9ifCh", "outputId": "5e5caf8f-b406-417e-c01d-962c56a8ef68" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 12ms/step - accuracy: 0.8963 - loss: 0.3238 - val_accuracy: 0.9833 - val_loss: 0.0548\n", "Epoch 2/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 5ms/step - accuracy: 0.9847 - loss: 0.0504 - val_accuracy: 0.9866 - val_loss: 0.0426\n", "Epoch 3/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - accuracy: 0.9893 - loss: 0.0356 - val_accuracy: 0.9888 - val_loss: 0.0365\n", "Epoch 4/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 7ms/step - accuracy: 0.9922 - loss: 0.0248 - val_accuracy: 0.9860 - val_loss: 0.0539\n", "Epoch 5/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 6ms/step - accuracy: 0.9937 - loss: 0.0203 - val_accuracy: 0.9876 - val_loss: 0.0496\n", "Epoch 6/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 6ms/step - accuracy: 0.9948 - loss: 0.0174 - val_accuracy: 0.9913 - val_loss: 0.0381\n", "Epoch 7/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 6ms/step - accuracy: 0.9963 - loss: 0.0121 - val_accuracy: 0.9897 - val_loss: 0.0432\n", "Epoch 8/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 6ms/step - accuracy: 0.9966 - loss: 0.0114 - val_accuracy: 0.9887 - val_loss: 0.0503\n", "Epoch 9/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 6ms/step - accuracy: 0.9968 - loss: 0.0115 - val_accuracy: 0.9883 - val_loss: 0.0498\n", "Epoch 10/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 6ms/step - accuracy: 0.9962 - loss: 0.0118 - val_accuracy: 0.9905 - val_loss: 0.0410\n", "Epoch 11/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 6ms/step - accuracy: 0.9972 - loss: 0.0104 - val_accuracy: 0.9906 - val_loss: 0.0461\n", "Epoch 12/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 6ms/step - accuracy: 0.9977 - loss: 0.0085 - val_accuracy: 0.9906 - val_loss: 0.0525\n", "Epoch 13/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 6ms/step - accuracy: 0.9980 - loss: 0.0061 - val_accuracy: 0.9898 - val_loss: 0.0557\n", "Epoch 14/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 7ms/step - accuracy: 0.9976 - loss: 0.0075 - val_accuracy: 0.9912 - val_loss: 0.0489\n", "Epoch 15/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 6ms/step - accuracy: 0.9976 - loss: 0.0072 - val_accuracy: 0.9892 - val_loss: 0.0629\n", "Epoch 16/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 6ms/step - accuracy: 0.9977 - loss: 0.0069 - val_accuracy: 0.9898 - val_loss: 0.0595\n", "Epoch 17/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 6ms/step - accuracy: 0.9979 - loss: 0.0066 - val_accuracy: 0.9902 - val_loss: 0.0595\n", "Epoch 18/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - accuracy: 0.9976 - loss: 0.0070 - val_accuracy: 0.9899 - val_loss: 0.0610\n", "Epoch 19/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 6ms/step - accuracy: 0.9984 - loss: 0.0060 - val_accuracy: 0.9907 - val_loss: 0.0518\n", "Epoch 20/20\n", "\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - accuracy: 0.9987 - loss: 0.0045 - val_accuracy: 0.9909 - val_loss: 0.0585\n" ] } ], "source": [ "model.compile(optimizer=tf.keras.optimizers.Adam(),\n", " loss=tf.keras.losses.SparseCategoricalCrossentropy(),\n", " metrics=['accuracy']) # same as `tf.keras.metrics.SparseCategoricalAccuracy(name='accuracy')`\n", "\n", "history = model.fit(mnist_train, epochs=NUM_EPOCHS,\n", " validation_data=mnist_valid,\n", " shuffle=True)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 394 }, "id": "a06czk7ZifCh", "outputId": "fc675d97-915c-46ea-e626-1d0c09f5a467" }, "outputs": [ { "data": { "image/png": "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grGxsbBz5055mmvXrgkAhOjoaKV51PbzRY1XQ23rBUF/2/uG2NYLgv6092zrK2sI56ShtPWCoNvtPe/g67n8/HwAQPPmzatM9+DBA7i6usLFxQUjRozA1atX66J4VUpISICzszPatGmDCRMmICUlRWXa6OhoBAYGKmwLCgpCdHS0totZI6WlpdiyZQtef/11iEQilel08Xw8KSkpCenp6QrH3NraGn5+fiqPeWlpKS5cuKCwj4GBAQIDA3XuPOXn50MkEsHGxqbKdDX5G61LkZGRsLe3h7e3N2bNmoX79++rTNsQzktGRgb++usvTJs2rdq09X1Onv7OvXDhAsrKyhSOb7t27dC6dWuVx7c2ny9q3BpyWw/oX3uvL209oN/tPdt63TonDamtB3S7vWeAr8ekUinmzp2LPn36wMfHR2U6b29vbNiwAfv27cOWLVsglUrRu3dv3L17tw5Lq8jPzw+bNm3CwYMHsXbtWiQlJaFfv34oLCxUmj49PR0ODg4K2xwcHJCenl4XxVXb3r17kZeXh6lTp6pMo4vn42my41qTY56dnQ2JRKLz50ksFmPBggUYN24crKysVKar6d9oXQkODsbmzZsRHh6O5cuX49ixY3jxxRchkUiUpm8I5+WXX36BpaVltd3c6vucKPvOTU9Ph4mJSaV/IKs6vrX5fFHj1ZDbekA/23t9aesB/W3v2dZX0KVz0lDaekD323ujWu9JOm/27NmIjY2tdlyKv78//P395c979+6N9u3b44cffsBnn32m7WIq9eKLL8p/79y5M/z8/ODq6oodO3aodWVPV/3888948cUX4ezsrDKNLp6PxqKsrAxjxoyBIAhYu3ZtlWl19W80JCRE/nunTp3QuXNneHh4IDIyEoMGDaq3cj2LDRs2YMKECdVOQFXf50Td71wiTWrIbT1Q/59bbWBbr9vY1uumhtLWA7rf3vMOvp566623cODAARw9ehStWrWq0b7GxsZ47rnncPPmTS2VruZsbGzg5eWlskyOjo6VZqnMyMiAo6NjXRRPLcnJyThy5AimT59eo/108XzIjmtNjrmdnR0MDQ119jzJGvzk5GSEhYVVeUVfmer+RutLmzZtYGdnp7Jcun5eoqKiEB8fX+PPDVC350TVd66joyNKS0uRl5enkL6q41ubzxc1TvrW1gMNv73Xp7Ye0L/2nm297p0T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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "hist = history.history\n", "x_arr = np.arange(len(hist['loss'])) + 1\n", "\n", "fig = plt.figure(figsize=(12, 4))\n", "ax = fig.add_subplot(1, 2, 1)\n", "ax.plot(x_arr, hist['loss'], '-o', label='Train loss')\n", "ax.plot(x_arr, hist['val_loss'], '--<', label='Validation loss')\n", "ax.set_xlabel('Epoch', size=15)\n", "ax.set_ylabel('Loss', size=15)\n", "ax.legend(fontsize=15)\n", "ax = fig.add_subplot(1, 2, 2)\n", "ax.plot(x_arr, hist['accuracy'], '-o', label='Train acc.')\n", "ax.plot(x_arr, hist['val_accuracy'], '--<', label='Validation acc.')\n", "ax.legend(fontsize=15)\n", "ax.set_xlabel('Epoch', size=15)\n", "ax.set_ylabel('Accuracy', size=15)\n", "\n", "#plt.savefig('images/15_12.png', dpi=300)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "d3dx-LhlifCi", "outputId": "c72e50f7-a7a8-4306-86ec-97c618ff172f" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m500/500\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 3ms/step - accuracy: 0.9925 - loss: 0.0352\n", "\n", "테스트 정확도 99.25%\n" ] } ], "source": [ "test_results = model.evaluate(mnist_test.batch(20))\n", "print('\\n테스트 정확도 {:.2f}%'.format(test_results[1]*100))" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 374 }, "id": "T7kb_hRaifCi", "outputId": "152bf3df-b624-4c6a-843b-09d933465f08", "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "TensorShape([12, 10])\n", "tf.Tensor([2 0 4 8 7 6 0 6 3 1 8 0], shape=(12,), dtype=int64)\n" ] }, { "data": { "image/png": "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dOnirDj45fz58yrbsWOHysaPHx/UOnwbPK1YsULNSUtLU5mpgY8/c0TM+yQg4rwJ1PLly4NbCDztr7/+Utl9991nG3/zzTdqTqFChVSWkJCgsnz58mWiOoSzXr16qeztt9+2jc+ePavm+Pt712TWrFkqMzVG882ycjMpvrEFAAAAAHgaC1sAAAAAgKexsAUAAAAAeFpYXmP78ssv28ammxk75Xsuu++2RUQaNmyosrvuuivDrGbNmn7Xhcizb98+lTVp0kRlu3fvVlnnzp1t4379+qk55cqVU5npek8E14EDB1R28803u1BJaOXNm1dlDz30kAuVIJwsW7bM7RKQRaxatUplXbt2VdmmTZts4/bt26s5I0eOVJlvTxYgXY0aNVS2detWlWWF91yHDx9W2VtvvWUbT506NTTF+IFvbAEAAAAAnsbCFgAAAADgaSxsAQAAAACexsIWAAAAAOBpnm8eNWPGDJUNGjTINvb3xsVOLVmyxFHme0P56tWrqzmtW7dWWf369VVWtWrVK6gQXnTy5EnbuFu3bmqOqVHUPffco7Jhw4bZxqabxt9///0qq1y5coZ1AoFgavLXoUMHFyqBFyxfvtztEpCFpKam2sYvvPCCmjNq1CiVmZr1+DaG6tKli5oT7PeVCC++7+dEskajKKdmz55tG3fv3l3NqVKlSqjKuSy+sQUAAAAAeBoLWwAAAACAp7GwBQAAAAB4GgtbAAAAAICneb55lKnhSFZ1+vRp23jt2rVqjimLiYlRWZs2bWzjhISETFaHrGbKlCm28cyZM9Wc66+/XmUffvihykzNony98cYbKitZsmSGz0NgFSpUSGUdO3ZU2eTJk/3afo0aNVS2bds2lZmaXfgrb968trHpuP2vf/0rYK+H8LJs2TJHmUn//v0DWwxct3//fpX5/nd+55131JzSpUurbODAgSpr3769/8V51KlTp1SWO3duFyoJT40aNVLZjh07XKjEP8eOHbONTcdfmkcBAAAAABAALGwBAAAAAJ7GwhYAAAAA4GksbAEAAAAAnuap5lFdu3ZV2fbt21WWlpYWsNfMnj27bVyiRAk1p3Xr1ipr2rSpyurXr28bJyUlqTmmBkEjRoxQ2bhx42zjefPmqTmffPKJyqpXr66yHDk8tRuEpXXr1qmsW7dutrGpqdBHH32ksquuusqvGkyNqBB60dHR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ChYUadHCvRoRntxYc7CwjTC7d1uPJUuaf56e79oVmnoQWX74wXosWlSkeXPdSKV3b5FJk0TatAl5aYggQ4ZYTaOOH7fe2H3/vfWByowZItmzu10dAARO9uwi775rNcb7179Ehg2zPsA7cMBqHnXTTSJTp1p3JgACyY01BwvbCHPsmPWYN6/55+mXFKekhKYeRJbDh63HTz+1ftmOGSPSsqXIiRMio0eLDB0qEh8vcuONItWquVoqwtjChSIXt2K47jqR9967/DU+AOBVt98usny59a3sxo3WHxHr0ot//pM7YSA43FhzeH5hW7x4cZW1a9fusmMA7khNtR7PnRN55RV786ghQ6xP7T76yPo7tx5AsHz5pfV45Ih1/9pBg0Tq17e6N770kqulAUDAzZhh9bWoU8f6e6VKIklJ1ofJw4aJLF0qsnq18+txgayK5lERJr3N9okT5p8fP249xsSEph5ElvT9T8TcPCo9W748NPUgshUoYN3PccEC69vavn1F1q1zuyoACJyffrLOhCpSxLpv6C23WN+UxcWJjB9vnaK8caPI5MluV4pw48aag4VthCld2nrcu9f88/T8uutCUw8iS/p+lTevyNVX65+XKWM9HjgQspIAyZlT5JFHrNuu0BEeQDj54AORs2et+8df/OFyulatrMcVK0JbF8KfG2sOFrYRpmpV6zH9+gpf6fnl7uMI+Cu93fvJk9b9G30dOmQ9mn75AsFUpIj1ePCgu3UAQCClLx7y5zf/PD1P74EBBIobaw4WthHm9tutg9gvv4hs2qR/PmuW9Xj//SEtCxGidGnrQJeWZj7dOD0z3e8MCKb0fa9cOXfrAIBAKlbMely/3vzz9Msv0s+YAgLFjTUHC9sIkyuXSJcu1t+feebC+e0iIsOHW/eSql+f7qAInp49rccePUT27buQb9pkNbEQEXnqqZCXhTD31Vcin39+oYFZurNnRUaNsu5lmyePdUoyAISLZs2sxxUrRBIS7D9bs0ZkxAjr7w8/HNq6EP7cWHN4visyrlyfPlZX0NWrreYB9epZ3WjXrrWue6SBAIKpbVuRRYus++rddJNI3brWqcmrV1unJ3fqZN0CCAikn36ympMVKWL9Ei1cWOTPP62uyPv2ieTObd3LsVQptytFuPrf/0QGD74wPnPGeqxT50LWt6/IvfeGti6Etxo1rA+Shw617kQwZoz1uzcpSeTrr60P+558UuSuu9yuFOEo1GsOFrYRKHduq7X7a6+JTJ8uMmeOdWPu9u2tX7qXupEyEChTplinqIwfL7JsmUhUlPXLt3Nnq3sjEGj164v07m2dcrxli7WozZXLOv3u4YdF/vMfkfLl3a4S4ezgQevNnK+LM67xRjAMGWJ9iDxunMiGDSI7dlidaOvXtz5MbtPG7QoRrkK95ohKS0tLy2hScnKy5M+fX44ePSqxsbGBrQCeFKp9gn0PvkK5T7D/wRfHPriFYx/cxLEPbrmSfYJrbAEAAAAAnsbCFgAAAADgaSxsAQAAAACexsIWAAAAAOBpjroip/eXSk5ODmox8I70fcFB77FMYd+Dr1Dtexe/Bvsf0nHsg1s49sFNHPvglivZ9xwtbFNSUkREpBQ3+IOPlJQUyZ8/f1C3L8K+By3Y+176a4iw/0Hj2Ae3cOyDmzj2wS1O9j1Ht/tJTU2VpKQkiYmJkaioqIAVCO9KS0uTlJQUKVGihGTLFrwz2tn34CtU+54I+x80jn1wC8c+uIljH9xyJfueo4UtAAAAAABZFc2jAAAAAACexsIWAAAAAOBpLGwBAAAAAJ7GwhYAAAAA4GksbAEAAAAAnsbCFgAAAADgaSxsAQAAAACe9n/7VD1rc+XaWgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "batch_test = next(iter(mnist_test.batch(12)))\n", "\n", "preds = model(batch_test[0])\n", "\n", "tf.print(preds.shape)\n", "preds = tf.argmax(preds, axis=1)\n", "print(preds)\n", "\n", "fig = plt.figure(figsize=(12, 4))\n", "for i in range(12):\n", " ax = fig.add_subplot(2, 6, i+1)\n", " ax.set_xticks([]); ax.set_yticks([])\n", " img = batch_test[0][i, :, :, 0]\n", " ax.imshow(img, cmap='gray_r')\n", " ax.text(0.9, 0.1, '{}'.format(preds[i]),\n", " size=15, color='blue',\n", " horizontalalignment='center',\n", " verticalalignment='center',\n", " transform=ax.transAxes)\n", "\n", "#plt.savefig('images/15_13.png', dpi=300)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "id": "5sLLwpHLifCi" }, "outputs": [], "source": [ "import os\n", "\n", "if not os.path.exists('models'):\n", " os.mkdir('models')\n", "\n", "\n", "model.save('models/mnist-cnn.keras')" ] } ], "metadata": { "accelerator": "GPU", "colab": { "name": "ch15_part1.ipynb", "provenance": [] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.5" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }