{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Using TensorFlow backend.\n" ] }, { "data": { "text/plain": [ "'2.2.4'" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import keras\n", "keras.__version__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 사전 훈련된 컨브넷 사용하기\n", "\n", "이 노트북은 [케라스 창시자에게 배우는 딥러닝](https://tensorflow.blog/케라스-창시자에게-배우는-딥러닝/) 책의 5장 3절의 코드 예제입니다. 책에는 더 많은 내용과 그림이 있습니다. 이 노트북에는 소스 코드에 관련된 설명만 포함합니다. 이 노트북의 설명은 케라스 버전 2.2.2에 맞추어져 있습니다. 케라스 최신 버전이 릴리스되면 노트북을 다시 테스트하기 때문에 설명과 코드의 결과가 조금 다를 수 있습니다.\n", "\n", "----\n", "\n", "작은 이미지 데이터셋에 딥러닝을 적용하는 일반적이고 매우 효과적인 방법은 사전 훈련된 네트워크를 사용하는 것입니다. 사전 훈련된 네트워크는 일반적으로 대규모 이미지 분류 문제를 위해 대량의 데이터셋에서 미리 훈련되어 저장된 네트워크입니다. 원본 데이터셋이 충분히 크고 일반적이라면 사전 훈련된 네트워크에 의해 학습된 특성의 계층 구조는 실제 세상에 대한 일반적인 모델로 효율적인 역할을 할 수 있습니다. 새로운 문제가 원래 작업과 완전히 다른 클래스에 대한 것이더라도 이런 특성은 많은 컴퓨터 비전 문제에 유용합니다. 예를 들어 (대부분 동물이나 생활 용품으로 이루어진) ImageNet 데이터셋에 네트워크를 훈련합니다. 그다음 이 네트워크를 이미지에서 가구 아이템을 식별하는 것 같은 다른 용도로 사용할 수 있습니다. 학습된 특성을 다른 문제에 적용할 수 있는 이런 유연성은 이전의 많은 얕은 학습 방법과 비교했을 때 딥러닝의 핵심 장점입니다. 이런 방식으로 작은 데이터셋을 가진 문제에도 딥러닝이 효율적으로 작동할 수 있습니다.\n", "\n", "여기에서는 (1.4백만 개의 레이블된 이미지와 1,000개의 클래스로 이루어진) ImageNet 데이터셋에서 훈련된 대규모 컨브넷을 사용해 보겠습니다. ImageNet 데이터셋은 다양한 종의 강아지와 고양이를 포함해 많은 동물들을 포함하고 있습니다. 그래서 강아지 vs. 고양이 분류 문제에 좋은 성능을 낼 것 같습니다.\n", "\n", "캐런 시몬연과 앤드류 지서먼이 2014년에 개발한 VGG16 구조를 사용하겠습니다. VGG16은 간단하고 ImageNet 데이터셋에 널리 사용되는 컨브넷 구조입니다. VGG16은 조금 오래되었고 최고 수준의 성능에는 못미치며 최근의 다른 모델보다는 조금 무겁습니다. 하지만 이 모델의 구조가 이전에 보았던 것과 비슷해서 새로운 개념을 도입하지 않고 이해하기 쉽기 때문에 선택했습니다. 아마 VGG가 처음 보는 모델 애칭일지 모르겠습니다. 이런 이름에는 VGG, ResNet, Inception, Inception-ResNet, Xception 등이 있습니다. 컴퓨터 비전을 위해 딥러닝을 계속 공부하다보면 이런 이름을 자주 만나게 될 것입니다.\n", "\n", "사전 훈련된 네트워크를 사용하는 두 가지 방법이 있습니다. 특성 추출과 미세 조정입니다. 이 두 가지를 모두 다루어 보겠습니다. 먼저 특성 추출부터 시작하죠." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 특성 추출\n", "\n", "특성 추출은 사전에 학습된 네트워크의 표현을 사용해 새로운 샘플에서 흥미로운 특성을 뽑아내는 것입니다. 이런 특성을 사용하여 새로운 분류기를 처음부터 훈련합니다.\n", "\n", "앞서 보았듯이 컨브넷은 이미지 분류를 위해 두 부분으로 구성됩니다. 먼저 연속된 합성곱과 풀링 층으로 시작해서 완전 연결 분류기로 끝납니다. 첫 번째 부분을 모델의 합성곱 기반층(convolutional base)이라고 부르겠습니다. 컨브넷의 경우 특성 추출은 사전에 훈련된 네트워크의 합성곱 기반층을 선택해 새로운 데이터를 통과시키고 그 출력으로 새로운 분류기를 훈련합니다.\n", "\n", "![swapping FC classifiers](https://s3.amazonaws.com/book.keras.io/img/ch5/swapping_fc_classifier.png)\n", "\n", "왜 합성곱 층만 재사용할까요? 완전 연결 분류기도 재사용할 수 있을까요? 일반적으로 권장하지 않습니다. 합성곱 층에 의해 학습된 표현이 더 일반적이어서 재사용 가능하기 때문입니다. 컨브넷의 특성 맵은 사진에 대한 일반적인 컨셉의 존재 여부를 기록한 맵입니다. 그래서 주어진 컴퓨터 비전 문제에 상관없이 유용하게 사용할 수 있습니다. 하지만 분류기에서 학습한 표현은 모델이 훈련된 클래스 집합에 특화되어 있습니다. 분류기는 전체 사진에 어떤 클래스가 존재할 확률에 관한 정보만을 담고 있습니다. 더군다나 완전 연결 층에서 찾은 표현은 더 이상 입력 이미지에 있는 객체의 위치 정보를 가지고 있지 않습니다. 완전 연결 층들은 공간 개념을 제거하지만 합성곱의 특성 맵은 객체의 위치를 고려합니다. 객체의 위치가 중요한 문제라면 완전 연결 층에서 만든 특성은 크게 쓸모가 없습니다.\n", "\n", "특정 합성곱 층에서 추출한 표현의 일반성(그리고 재사용성)의 수준은 모델에 있는 층의 깊이에 달려 있습니다. 모델의 하위 층은 (에지, 색깔, 질감 등과 같이) 지역적이고 매우 일반적인 특성 맵을 추출합니다. 반면 상위 층은 ('강아지 눈'이나 '고양이 귀'와 같이) 좀 더 추상적인 개념을 추출합니다. 만약 새로운 데이터셋이 원본 모델이 훈련한 데이터셋과 많이 다르다면 전체 합성곱 기반층을 사용하는 것보다는 모델의 하위 층 몇 개만 특성 추출에 사용하는 것이 좋습니다.\n", "\n", "ImageNet의 클래스 집합에는 여러 종류의 강아지와 고양이를 포함하고 있습니다. 이런 경우 원본 모델의 완전 연결 층에 있는 정보를 재사용하는 것이 도움이 될 것 같습니다. 하지만 새로운 문제의 클래스가 원본 모델의 클래스 집합과 겹치지 않는 좀 더 일반적인 경우를 다루기 위해서 여기서는 완전 연결 층을 사용하지 않겠습니다." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ImageNet 데이터셋에 훈련된 VGG16 네트워크의 합성곱 기반층을 사용하여 강아지와 고양이 이미지에서 유용한 특성을 추출해 보겠습니다. 그런 다음 이 특성으로 강아지 vs. 고양이 분류기를 훈련합니다.\n", "\n", "VGG16 모델은 케라스에 패키지로 포함되어 있습니다. `keras.applications` 모듈에서 임포트할 수 있습니다. `keras.applications` 모듈에서 사용 가능한 이미지 분류 모델은 다음과 같습니다(모두 ImageNet 데이터셋에서 훈련되었습니다):\n", "\n", "* Xception\n", "* InceptionV3\n", "* ResNet50\n", "* VGG16\n", "* VGG19\n", "* MobileNet\n", "\n", "VGG16 모델을 만들어 보죠:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from keras.applications import VGG16\n", "\n", "conv_base = VGG16(weights='imagenet',\n", " include_top=False,\n", " input_shape=(150, 150, 3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "VGG16 함수에 세 개의 매개변수를 전달합니다:\n", "\n", "* `weights`는 모델을 초기화할 가중치 체크포인트를 지정합니다.\n", "* `include_top`은 네트워크의 최상위 완전 연결 분류기를 포함할지 안할지를 지정합니다. 기본값은 ImageNet의 1,000개의 클래스에 대응되는 완전 연결 분류기를 포함합니다. 별도의 (강아지와 고양이 두 개의 클래스를 구분하는) 완전 연결 층을 추가하려고 하므로 이를 포함시키지 않습니다.\n", "* `input_shape`은 네트워크에 주입할 이미지 텐서의 크기입니다. 이 매개변수는 선택사항입니다. 이 값을 지정하지 않으면 네트워크가 어떤 크기의 입력도 처리할 수 있습니다.\n", "\n", "다음은 VGG16 합성곱 기반층의 자세한 구조입니다. 이 구조는 앞에서 보았던 간단한 컨브넷과 비슷합니다." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "input_1 (InputLayer) (None, 150, 150, 3) 0 \n", "_________________________________________________________________\n", "block1_conv1 (Conv2D) (None, 150, 150, 64) 1792 \n", "_________________________________________________________________\n", "block1_conv2 (Conv2D) (None, 150, 150, 64) 36928 \n", "_________________________________________________________________\n", "block1_pool (MaxPooling2D) (None, 75, 75, 64) 0 \n", "_________________________________________________________________\n", "block2_conv1 (Conv2D) (None, 75, 75, 128) 73856 \n", "_________________________________________________________________\n", "block2_conv2 (Conv2D) (None, 75, 75, 128) 147584 \n", "_________________________________________________________________\n", "block2_pool (MaxPooling2D) (None, 37, 37, 128) 0 \n", "_________________________________________________________________\n", "block3_conv1 (Conv2D) (None, 37, 37, 256) 295168 \n", "_________________________________________________________________\n", "block3_conv2 (Conv2D) (None, 37, 37, 256) 590080 \n", "_________________________________________________________________\n", "block3_conv3 (Conv2D) (None, 37, 37, 256) 590080 \n", "_________________________________________________________________\n", "block3_pool (MaxPooling2D) (None, 18, 18, 256) 0 \n", "_________________________________________________________________\n", "block4_conv1 (Conv2D) (None, 18, 18, 512) 1180160 \n", "_________________________________________________________________\n", "block4_conv2 (Conv2D) (None, 18, 18, 512) 2359808 \n", "_________________________________________________________________\n", "block4_conv3 (Conv2D) (None, 18, 18, 512) 2359808 \n", "_________________________________________________________________\n", "block4_pool (MaxPooling2D) (None, 9, 9, 512) 0 \n", "_________________________________________________________________\n", "block5_conv1 (Conv2D) (None, 9, 9, 512) 2359808 \n", "_________________________________________________________________\n", "block5_conv2 (Conv2D) (None, 9, 9, 512) 2359808 \n", "_________________________________________________________________\n", "block5_conv3 (Conv2D) (None, 9, 9, 512) 2359808 \n", "_________________________________________________________________\n", "block5_pool (MaxPooling2D) (None, 4, 4, 512) 0 \n", "=================================================================\n", "Total params: 14,714,688\n", "Trainable params: 14,714,688\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "conv_base.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "최종 특성 맵의 크기는 `(4, 4, 512)`입니다. 이 특성 위에 완전 연결 층을 놓을 것입니다.\n", "이 지점에서 두 가지 방식이 가능합니다.\n", "\n", "* 새로운 데이터셋에서 합성곱 기반층을 실행하고 출력을 넘파이 배열로 디스크에 저장합니다. 그다음 이 데이터를 이 책의 1부에서 보았던 것과 비슷한 독립된 완전 연결 분류기에 입력으로 사용합니다. 합성곱 연산은 전체 과정 중에서 가장 비싼 부분입니다. 이 방식은 모든 입력 이미지에 대해 합성곱 기반층을 한 번만 실행하면 되기 때문에 빠르고 비용이 적게 듭니다. 하지만 이런 이유 때문에 이 기법에는 데이터 증식을 사용할 수 없습니다.\n", "* 준비한 모델(`conv_base`) 위에 `Dense` 층을 쌓아 확장합니다. 그다음 입력 데이터에서 엔드 투 엔드로 전체 모델을 실행합니다. 모델에 노출된 모든 입력 이미지가 매번 합성곱 기반층을 통과하기 때문에 데이터 증식을 사용할 수 있습니다. 하지만 이런 이유로 이 방식은 첫 번째 방식보다 훨씬 비용이 많이 듭니다.\n", "\n", "두 가지 방식을 모두 다루어 보겠습니다. 첫 번째 방식을 구현하는 코드를 살펴봅니다. `conv_base`에 데이터를 주입하고 출력을 기록합니다. 이 출력을 새로운 모델의 입력으로 사용하겠습니다.\n", "\n", "먼저 앞서 소개한 `ImageDataGenerator`를 사용해 이미지와 레이블을 넘파이 배열로 추출하겠습니다. `conv_base` 모델의 `predict` 메서드를 호출하여 이 이미지에서 특성을 추출합니다." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 2000 images belonging to 2 classes.\n", "Found 1000 images belonging to 2 classes.\n", "Found 1000 images belonging to 2 classes.\n" ] } ], "source": [ "import os\n", "import numpy as np\n", "from keras.preprocessing.image import ImageDataGenerator\n", "\n", "base_dir = './datasets/cats_and_dogs_small'\n", "\n", "train_dir = os.path.join(base_dir, 'train')\n", "validation_dir = os.path.join(base_dir, 'validation')\n", "test_dir = os.path.join(base_dir, 'test')\n", "\n", "datagen = ImageDataGenerator(rescale=1./255)\n", "batch_size = 20\n", "\n", "def extract_features(directory, sample_count):\n", " features = np.zeros(shape=(sample_count, 4, 4, 512))\n", " labels = np.zeros(shape=(sample_count))\n", " generator = datagen.flow_from_directory(\n", " directory,\n", " target_size=(150, 150),\n", " batch_size=batch_size,\n", " class_mode='binary')\n", " i = 0\n", " for inputs_batch, labels_batch in generator:\n", " features_batch = conv_base.predict(inputs_batch)\n", " features[i * batch_size : (i + 1) * batch_size] = features_batch\n", " labels[i * batch_size : (i + 1) * batch_size] = labels_batch\n", " i += 1\n", " if i * batch_size >= sample_count:\n", " # 제너레이터는 루프 안에서 무한하게 데이터를 만들어내므로 모든 이미지를 한 번씩 처리하고 나면 중지합니다\n", " break\n", " return features, labels\n", "\n", "train_features, train_labels = extract_features(train_dir, 2000)\n", "validation_features, validation_labels = extract_features(validation_dir, 1000)\n", "test_features, test_labels = extract_features(test_dir, 1000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "추출된 특성의 크기는 `(samples, 4, 4, 512)`입니다. 완전 연결 분류기에 주입하기 위해서 먼저 `(samples, 8192)` 크기로 펼칩니다:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "train_features = np.reshape(train_features, (2000, 4 * 4 * 512))\n", "validation_features = np.reshape(validation_features, (1000, 4 * 4 * 512))\n", "test_features = np.reshape(test_features, (1000, 4 * 4 * 512))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "그러고 나서 완전 연결 분류기를 정의하고(규제를 위해 드롭아웃을 사용합니다) 저장된 데이터와 레이블을 사용해 훈련합니다:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train on 2000 samples, validate on 1000 samples\n", "Epoch 1/30\n", "2000/2000 [==============================] - 1s 349us/step - loss: 0.5855 - acc: 0.6815 - val_loss: 0.4257 - val_acc: 0.8350\n", "Epoch 2/30\n", "2000/2000 [==============================] - 0s 192us/step - loss: 0.4212 - acc: 0.8125 - val_loss: 0.3606 - val_acc: 0.8600\n", "Epoch 3/30\n", "2000/2000 [==============================] - 0s 191us/step - loss: 0.3555 - acc: 0.8520 - val_loss: 0.3164 - val_acc: 0.8760\n", "Epoch 4/30\n", "2000/2000 [==============================] - 0s 190us/step - loss: 0.3090 - acc: 0.8720 - val_loss: 0.2925 - val_acc: 0.8870\n", "Epoch 5/30\n", "2000/2000 [==============================] - 0s 190us/step - loss: 0.2898 - acc: 0.8815 - val_loss: 0.2770 - val_acc: 0.8890\n", "Epoch 6/30\n", "2000/2000 [==============================] - 0s 190us/step - loss: 0.2631 - acc: 0.8980 - val_loss: 0.2777 - val_acc: 0.8870\n", "Epoch 7/30\n", "2000/2000 [==============================] - 0s 191us/step - loss: 0.2485 - acc: 0.8990 - val_loss: 0.2631 - val_acc: 0.8980\n", "Epoch 8/30\n", "2000/2000 [==============================] - 0s 190us/step - loss: 0.2238 - acc: 0.9155 - val_loss: 0.2562 - val_acc: 0.8960\n", "Epoch 9/30\n", "2000/2000 [==============================] - 0s 190us/step - loss: 0.2134 - acc: 0.9175 - val_loss: 0.2498 - val_acc: 0.8960\n", "Epoch 10/30\n", "2000/2000 [==============================] - 0s 191us/step - loss: 0.1991 - acc: 0.9270 - val_loss: 0.2455 - val_acc: 0.9000\n", "Epoch 11/30\n", "2000/2000 [==============================] - 0s 190us/step - loss: 0.1911 - acc: 0.9225 - val_loss: 0.2442 - val_acc: 0.8960\n", "Epoch 12/30\n", "2000/2000 [==============================] - 0s 190us/step - loss: 0.1815 - acc: 0.9365 - val_loss: 0.2466 - val_acc: 0.8940\n", "Epoch 13/30\n", "2000/2000 [==============================] - 0s 191us/step - loss: 0.1779 - acc: 0.9300 - val_loss: 0.2713 - val_acc: 0.8840\n", "Epoch 14/30\n", "2000/2000 [==============================] - 0s 189us/step - loss: 0.1651 - acc: 0.9440 - val_loss: 0.2382 - val_acc: 0.9000\n", "Epoch 15/30\n", "2000/2000 [==============================] - 0s 190us/step - loss: 0.1588 - acc: 0.9425 - val_loss: 0.2481 - val_acc: 0.8970\n", "Epoch 16/30\n", "2000/2000 [==============================] - 0s 189us/step - loss: 0.1538 - acc: 0.9470 - val_loss: 0.2306 - val_acc: 0.9070\n", "Epoch 17/30\n", "2000/2000 [==============================] - 0s 189us/step - loss: 0.1472 - acc: 0.9525 - val_loss: 0.2329 - val_acc: 0.9040\n", "Epoch 18/30\n", "2000/2000 [==============================] - 0s 190us/step - loss: 0.1433 - acc: 0.9470 - val_loss: 0.2302 - val_acc: 0.9050\n", "Epoch 19/30\n", "2000/2000 [==============================] - 0s 189us/step - loss: 0.1373 - acc: 0.9540 - val_loss: 0.2360 - val_acc: 0.9030\n", "Epoch 20/30\n", "2000/2000 [==============================] - 0s 189us/step - loss: 0.1286 - acc: 0.9525 - val_loss: 0.2303 - val_acc: 0.9050\n", "Epoch 21/30\n", "2000/2000 [==============================] - 0s 191us/step - loss: 0.1266 - acc: 0.9550 - val_loss: 0.2444 - val_acc: 0.9000\n", "Epoch 22/30\n", "2000/2000 [==============================] - 0s 190us/step - loss: 0.1140 - acc: 0.9625 - val_loss: 0.2315 - val_acc: 0.9030\n", "Epoch 23/30\n", "2000/2000 [==============================] - 0s 191us/step - loss: 0.1158 - acc: 0.9640 - val_loss: 0.2313 - val_acc: 0.9020\n", "Epoch 24/30\n", "2000/2000 [==============================] - 0s 191us/step - loss: 0.1047 - acc: 0.9665 - val_loss: 0.2333 - val_acc: 0.9070\n", "Epoch 25/30\n", "2000/2000 [==============================] - 0s 191us/step - loss: 0.1012 - acc: 0.9640 - val_loss: 0.2334 - val_acc: 0.9060\n", "Epoch 26/30\n", "2000/2000 [==============================] - 0s 190us/step - loss: 0.1009 - acc: 0.9710 - val_loss: 0.2325 - val_acc: 0.9020\n", "Epoch 27/30\n", "2000/2000 [==============================] - 0s 190us/step - loss: 0.0953 - acc: 0.9690 - val_loss: 0.2426 - val_acc: 0.9060\n", "Epoch 28/30\n", "2000/2000 [==============================] - 0s 190us/step - loss: 0.0944 - acc: 0.9700 - val_loss: 0.2325 - val_acc: 0.9040\n", "Epoch 29/30\n", "2000/2000 [==============================] - 0s 189us/step - loss: 0.0895 - acc: 0.9720 - val_loss: 0.2345 - val_acc: 0.9030\n", "Epoch 30/30\n", "2000/2000 [==============================] - 0s 189us/step - loss: 0.0905 - acc: 0.9720 - val_loss: 0.2376 - val_acc: 0.9050\n" ] } ], "source": [ "from keras import models\n", "from keras import layers\n", "from keras import optimizers\n", "\n", "model = models.Sequential()\n", "model.add(layers.Dense(256, activation='relu', input_dim=4 * 4 * 512))\n", "model.add(layers.Dropout(0.5))\n", "model.add(layers.Dense(1, activation='sigmoid'))\n", "\n", "model.compile(optimizer=optimizers.RMSprop(lr=2e-5),\n", " loss='binary_crossentropy',\n", " metrics=['acc'])\n", "\n", "history = model.fit(train_features, train_labels,\n", " epochs=30,\n", " batch_size=20,\n", " validation_data=(validation_features, validation_labels))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "두 개의 `Dense` 층만 처리하면 되기 때문에 훈련이 매우 빠릅니다. CPU를 사용하더라도 한 에포크에 걸리는 시간이 1초 미만입니다.\n", "\n", "훈련 손실과 정확도 곡선을 살펴보죠:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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yeGyyy5j9+7d5emuu+668uGCf/7znwMwbdo0Nm7cyBlnnMEZZ5wBQHZ2Nlu2bAFg6tSp9O7dm969e5cPF7x+/Xp69OjBd7/7XXr16sU555yzz3liWbZsGf379ycnJ4eLL76Yzz77rPz8PXv2JCcnp3zAsn/84x/lk5X07duXHTt21Pq7jUX93EUy0A9/CImeYKhPH4jExZg6dOhAv379+Mtf/sKFF17I7NmzueyyyzAzmjdvzjPPPEPbtm3ZsmUL/fv3Z9iwYZXOI/rwww/TsmVLVqxYwYoVK8jNzS3fN2XKFA455BBKSko488wzWbFiBddffz1Tp05l/vz5dOzYcZ9jLV68mMcee4yFCxfi7pxyyikMGjSI9u3bs3btWmbNmsVvfvMbLr30Up5++ukqx2e/8sorefDBBxk0aBC33347d9xxB/fffz933XUX77//PgcddFB5VdC9997L9OnTGTBgADt37qR58+Y1+Larp5K7iBww0VUz0VUy7s4tt9xCTk4OZ511Fh999BGbN2+u9DgLFiwoD7I5OTnk5OSU75szZw65ubn07duXlStXVjso2GuvvcbFF19Mq1ataN26NZdccgmvvvoqAN27d6dPnz5A1cMKQxhfftu2bQwaNAiAq666igULFpTncdSoUcycObP8SdgBAwZw4403Mm3aNLZt25bwJ2RVchfJQFWVsOvTRRddxI033siSJUvYvXt3eYk7Pz+foqIiFi9eTNOmTcnOzo45zG+0WKX6999/n3vvvZdFixbRvn17xowZU+1xqhpfq2y4YAhDBldXLVOZ559/ngULFjB37lx+8YtfsHLlSiZOnMj555/PCy+8QP/+/Xn55Zc5/vjja3X8WFRyF5EDpnXr1gwePJjvfOc7+zSkbt++nUMPPZSmTZsyf/58NsSaMDnK6aefXj4J9jvvvMOKFSuAMFxwq1atOPjgg9m8eTMvvvhi+WfatGkTs1779NNP59lnn2XXrl188cUXPPPMM5x22mk1vraDDz6Y9u3bl5f6//jHPzJo0CBKS0v58MMPOeOMM7j77rvZtm0bO3fu5N133+WEE07gpptuIi8vj3/96181PmdVVHIXkQNq5MiRXHLJJfv0nBk1ahQXXHABeXl59OnTp9oS7HXXXcfVV19NTk4Offr0oV+/fkCYValv37706tVrv+GCx40bx7nnnsvh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WaMohPWqGlWTLRkNtUuXurdo4X7aae733ed+4onhu2rWzH34cPfnnnP/+uvYn337bfe8vJB++HD3zZsPbN7r2zvvuA8bFq7vsMPcp093X7zY/dJLQyN9q1buP/1p+l23u/v69e6TJoWOCODevr378cfv/X901VXu//hHw+lcUB3ibFBVcE8RNektk8ny8/f+AJ58cghi8fa++fpr91/9KvwYdOjgPnt2w/gPv2WL+5o17iUlNf/shg3uY8a4N2rk3rat+513uu/YsW+alSvdL788pGnRwv3GG903bUpM3pNl9+5w/84+O/yfMQvLs2ZOZUoJAAAMW0lEQVSFfaWl7gsXuo8b596mTfj3cswx4f5v3Fj38+/Z4/7uu+7z57v//vfukye7jx0b8nDssSEftRVvcFe1jKSdv/41PMzVs2ftPr9qVWgHeOutMOzy//xPYqqO4lFcHJ5EfvNN+Oc/w/vatWFf27ahb/8pp+x9VZavrVvhl78M1UzuMGFCeLK3Y8fKz71mTfjMzJlhmItx40JjdaIfhNu1K1Tvff119N+ilb8aNQpTVzZvHt5btAjtM7Ge11i+PDSs5+eHc2RlhXs5ZkxYjuWLL8KwFo8+GtptGjcObThjx4aH5Zo2Den27Anf65Ytsd8//jhUn37wQRgypGJoPeww6NYt5GPcODj77Np9f6pzF6mD4uLQi+b220MD8bRpMGDAvg3Elb327AkPVXXpAkccEV5ly9HbWrQIASE6kBcU7O3yethh0L9/6KrasWPYt3BhGHenpCSkycraN9gfd1wYluHuu0Pbx5VXwh13hKASr3XrwsTvf/hDCKxjx0KfPiGYNmoU3qOXo7d9/XUIdFW9vvyy7venLOBHB/3S0jB6arNmoffV2LGhe22jGgyPuHZtCPKPPx66C3fsGIbB2Lo1fJ+Vad06tCFlZe0N4NHLRx4Z8pkICu4ZLD8fbr01lCC6dQuTc2sO19pZvTqU/BYujL3/4IP3byg+6KAQGDZuDCNafvRReJK2otat9waMpk1D753+/fe+srJil0537YIlS0Keyl4ffLBvmgsvDPe9V6/aX/v774cxfB57LATtmmjcOMws1qFD7Nchh4QgXPajUNWrtDT8IOzeHV7Ry9HrX30FgweHf+uHHFL764bw4/7iizBnTljv2DHku7L32nThrS0F9wyVqCENZK+S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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "acc = history.history['acc']\n", "val_acc = history.history['val_acc']\n", "loss = history.history['loss']\n", "val_loss = history.history['val_loss']\n", "\n", "epochs = range(len(acc))\n", "\n", "plt.plot(epochs, acc, 'bo', label='Training acc')\n", "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n", "plt.title('Training and validation accuracy')\n", "plt.legend()\n", "\n", "plt.figure()\n", "\n", "plt.plot(epochs, loss, 'bo', label='Training loss')\n", "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n", "plt.title('Training and validation loss')\n", "plt.legend()\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "약 90%의 검증 정확도에 도달했습니다. 이전 절에서 처음부터 훈련시킨 작은 모델에서 얻은 것보다 훨씬 좋습니다. 하지만 이 그래프는 많은 비율로 드롭아웃을 사용했음에도 불구하고 훈련이 시작하면서 거의 바로 과대적합되고 있다는 것을 보여줍니다. 작은 이미지 데이터셋에서는 과대적합을 막기 위해 필수적인 데이터 증식을 사용하지 않았기 때문입니다.\n", "\n", "이제 특성 추출을 위해 두 번째로 언급한 방법을 살펴보겠습니다. 이 방법은 훨씬 느리고 비용이 많이 들지만 훈련하는 동안 데이터 증식 기법을 사용할 수 있습니다. `conv_base` 모델을 확장하고 입력 데이터를 사용해 엔드 투 엔드로 실행합니다.\n", "\n", "이 기법은 연산 비용이 크기 때문에 GPU를 사용할 수 있을 때 시도해야 합니다. CPU에서는 적용하기 매우 힘듭니다. GPU를 사용할 수 없다면 첫 번째 방법을 사용하세요.\n", "\n", "모델은 층과 동일하게 작동하므로 층을 추가하듯이 `Sequential` 모델에 (`conv_base` 같은) 다른 모델을 추가할 수 있습니다:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "from keras import models\n", "from keras import layers\n", "\n", "model = models.Sequential()\n", "model.add(conv_base)\n", "model.add(layers.Flatten())\n", "model.add(layers.Dense(256, activation='relu'))\n", "model.add(layers.Dense(1, activation='sigmoid'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "이 모델의 구조는 다음과 같습니다:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "vgg16 (Model) (None, 4, 4, 512) 14714688 \n", "_________________________________________________________________\n", "flatten_1 (Flatten) (None, 8192) 0 \n", "_________________________________________________________________\n", "dense_3 (Dense) (None, 256) 2097408 \n", "_________________________________________________________________\n", "dense_4 (Dense) (None, 1) 257 \n", "=================================================================\n", "Total params: 16,812,353\n", "Trainable params: 16,812,353\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "model.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "여기서 볼 수 있듯이 VGG16의 합성곱 기반층은 14,714,688개의 매우 많은 파라미터를 가지고 있습니다. 합성곱 기반층 위에 추가한 분류기는 2백만 개의 파라미터를 가집니다.\n", "\n", "모델을 컴파일하고 훈련하기 전에 합성곱 기반층을 동결하는 것이 아주 중요합니다. 하나 이상의 층을 동결한다는 것은 훈련하는 동안 가중치가 업데이트되지 않도록 막는다는 뜻입니다. 이렇게 하지 않으면 합성곱 기반층에 의해 사전에 학습된 표현이 훈련하는 동안 수정될 것입니다. 맨 위의 `Dense` 층은 랜덤하게 초기화되었기 때문에 매우 큰 가중치 업데이트 값이 네트워크에 전파될 것입니다. 이는 사전에 학습된 표현을 크게 훼손하게 됩니다.\n", "\n", "케라스에서는 `trainable` 속성을 `False`로 설정하여 네트워크를 동결할 수 있습니다:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "conv_base를 동결하기 전 훈련되는 가중치의 수: 30\n" ] } ], "source": [ "print('conv_base를 동결하기 전 훈련되는 가중치의 수:', \n", " len(model.trainable_weights))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "conv_base.trainable = False" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "conv_base를 동결한 후 훈련되는 가중치의 수: 4\n" ] } ], "source": [ "print('conv_base를 동결한 후 훈련되는 가중치의 수:', \n", " len(model.trainable_weights))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "이렇게 설정하면 추가한 두 개의 `Dense` 층의 가중치만 훈련될 것입니다. 층마다 두 개씩(가중치 행렬과 편향 벡터) 총 네 개의 텐서가 훈련됩니다. 변경 사항을 적용하려면 먼저 모델을 컴파일해야 합니다. 컴파일 단계 후에 `trainable` 속성을 변경하면 반드시 모델을 다시 컴파일해야 합니다. 그렇지 않으면 변경 사항이 적용되지 않습니다.\n", "\n", "이제 앞의 예제에서 사용했던 데이터 증식을 사용하여 모델 훈련을 시작할 수 있습니다:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 2000 images belonging to 2 classes.\n", "Found 1000 images belonging to 2 classes.\n", "Epoch 1/30\n", " - 13s - loss: 0.5570 - acc: 0.7270 - val_loss: 0.4234 - val_acc: 0.8400\n", "Epoch 2/30\n", " - 12s - loss: 0.4198 - acc: 0.8200 - val_loss: 0.3483 - val_acc: 0.8640\n", "Epoch 3/30\n", " - 12s - loss: 0.3629 - acc: 0.8465 - val_loss: 0.3108 - val_acc: 0.8840\n", "Epoch 4/30\n", " - 12s - loss: 0.3393 - acc: 0.8495 - val_loss: 0.2935 - val_acc: 0.8870\n", "Epoch 5/30\n", " - 12s - loss: 0.3065 - acc: 0.8725 - val_loss: 0.2746 - val_acc: 0.8930\n", "Epoch 6/30\n", " - 12s - loss: 0.2984 - acc: 0.8760 - val_loss: 0.2674 - val_acc: 0.8980\n", "Epoch 7/30\n", " - 12s - loss: 0.2842 - acc: 0.8890 - val_loss: 0.2665 - val_acc: 0.9040\n", "Epoch 8/30\n", " - 12s - loss: 0.2699 - acc: 0.8840 - val_loss: 0.2505 - val_acc: 0.9010\n", "Epoch 9/30\n", " - 12s - loss: 0.2674 - acc: 0.8920 - val_loss: 0.2468 - val_acc: 0.8960\n", "Epoch 10/30\n", " - 12s - loss: 0.2533 - acc: 0.8940 - val_loss: 0.2481 - val_acc: 0.9020\n", "Epoch 11/30\n", " - 12s - loss: 0.2524 - acc: 0.8940 - val_loss: 0.2436 - val_acc: 0.8970\n", "Epoch 12/30\n", " - 12s - loss: 0.2488 - acc: 0.8985 - val_loss: 0.2441 - val_acc: 0.9020\n", "Epoch 13/30\n", " - 12s - loss: 0.2436 - acc: 0.8975 - val_loss: 0.2398 - val_acc: 0.8960\n", "Epoch 14/30\n", " - 12s - loss: 0.2319 - acc: 0.9085 - val_loss: 0.2494 - val_acc: 0.8880\n", "Epoch 15/30\n", " - 12s - loss: 0.2246 - acc: 0.9115 - val_loss: 0.2364 - val_acc: 0.9050\n", "Epoch 16/30\n", " - 12s - loss: 0.2230 - acc: 0.9090 - val_loss: 0.2392 - val_acc: 0.9000\n", "Epoch 17/30\n", " - 12s - loss: 0.2231 - acc: 0.9045 - val_loss: 0.2327 - val_acc: 0.9050\n", "Epoch 18/30\n", " - 12s - loss: 0.2196 - acc: 0.9125 - val_loss: 0.2327 - val_acc: 0.9030\n", "Epoch 19/30\n", " - 12s - loss: 0.2079 - acc: 0.9190 - val_loss: 0.2330 - val_acc: 0.9120\n", "Epoch 20/30\n", " - 12s - loss: 0.2018 - acc: 0.9185 - val_loss: 0.2329 - val_acc: 0.9060\n", "Epoch 21/30\n", " - 12s - loss: 0.2186 - acc: 0.9100 - val_loss: 0.2421 - val_acc: 0.9070\n", "Epoch 22/30\n", " - 12s - loss: 0.2012 - acc: 0.9205 - val_loss: 0.2397 - val_acc: 0.9020\n", "Epoch 23/30\n", " - 12s - loss: 0.1981 - acc: 0.9180 - val_loss: 0.2338 - val_acc: 0.9050\n", "Epoch 24/30\n", " - 12s - loss: 0.2013 - acc: 0.9235 - val_loss: 0.2321 - val_acc: 0.9080\n", "Epoch 25/30\n", " - 12s - loss: 0.1944 - acc: 0.9210 - val_loss: 0.2333 - val_acc: 0.9080\n", "Epoch 26/30\n", " - 12s - loss: 0.1940 - acc: 0.9255 - val_loss: 0.2331 - val_acc: 0.9070\n", "Epoch 27/30\n", " - 12s - loss: 0.1963 - acc: 0.9185 - val_loss: 0.2396 - val_acc: 0.8980\n", "Epoch 28/30\n", " - 12s - loss: 0.1880 - acc: 0.9200 - val_loss: 0.2339 - val_acc: 0.9080\n", "Epoch 29/30\n", " - 12s - loss: 0.1845 - acc: 0.9295 - val_loss: 0.2348 - val_acc: 0.9080\n", "Epoch 30/30\n", " - 12s - loss: 0.1862 - acc: 0.9305 - val_loss: 0.2417 - val_acc: 0.9020\n" ] } ], "source": [ "from keras.preprocessing.image import ImageDataGenerator\n", "\n", "train_datagen = ImageDataGenerator(\n", " rescale=1./255,\n", " rotation_range=20,\n", " width_shift_range=0.1,\n", " height_shift_range=0.1,\n", " shear_range=0.1,\n", " zoom_range=0.1,\n", " horizontal_flip=True,\n", " fill_mode='nearest')\n", "\n", "# 검증 데이터는 증식되어서는 안 됩니다!\n", "test_datagen = ImageDataGenerator(rescale=1./255)\n", "\n", "train_generator = train_datagen.flow_from_directory(\n", " # 타깃 디렉터리\n", " train_dir,\n", " # 모든 이미지의 크기를 150 × 150로 변경합니다\n", " target_size=(150, 150),\n", " batch_size=20,\n", " # binary_crossentropy 손실을 사용하므로 이진 레이블이 필요합니다\n", " class_mode='binary')\n", "\n", "validation_generator = test_datagen.flow_from_directory(\n", " validation_dir,\n", " target_size=(150, 150),\n", " batch_size=20,\n", " class_mode='binary')\n", "\n", "model.compile(loss='binary_crossentropy',\n", " optimizer=optimizers.RMSprop(lr=2e-5),\n", " metrics=['acc'])\n", "\n", "history = model.fit_generator(\n", " train_generator,\n", " steps_per_epoch=100,\n", " epochs=30,\n", " validation_data=validation_generator,\n", " validation_steps=50,\n", " verbose=2)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "model.save('cats_and_dogs_small_3.h5')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "결과 그래프를 다시 그려 봅시다:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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POww1b//3TVFPPKI6qGHllydvfRS6QNITXhwml9RkWtTHzLEfQfffZfsGsXuvffc1V+kzuaiItWhQ93vec01+wb/eAt1PJ95ZuWCaTwDwknAFN/nO4A7wvIsCF0VeAf4zd77bOAZX75nvLSDgW996aXylfWygLCvBQvcJXnoADlhQuxnzsuXu/bos84qObu79VZ36RqLefNU+/RxZWRmqk6c6P5Bf/65u1oRcVcl114bbCTG4sXuP139+m7d0OgT/41R4DpYFywovW68DrR79qj27OkCWrRgVlSk+sYbqj16lK5nr16q//539WkeMdH5O5tzc13ajh2qF1/sftM774zvFXWixTMgDACe833+LfBEWJ5XgRu99xcCCjQHbgNG+fL90UvLAj7ypfcC/l3G9ocCeUBeu3btEv/NpYi1a93BMi1NtXFj1QcecGeqlTV7thuSV6eOa++9/PJ9D7bh1qxRvfpqV5cmTVzb6o4d++b79ls3kqVePZf34otV8/L2zffVV6oDBriDeb16ruzQlUb4q0kTt/9pae77WLs2vs+wf/ppt/4LLwRfZ+9eN0rmD39Q/eyz2Ldpqgd/Z/Mdd5ScMD30ULJrFrt4BoSLIwSEx8PyHAK8CcwG/gYUAI2B/40QEG4Fjo8QEN6NVhe7QigZ3RHqML7hhtgfRRDEsmWqw4a5EQ/ghiXOmFE6z9atqn/+s+vorFvXDcdcvz562atXq95+u2qjRq7s0093ndyTJ6uedppLa9zY/Sdcs8atU97jEwoL3few337ue2ncOHLeWO8vWLXK1fH001PrbNDEj7+zOS0tthOD6qRKm4zC8jcECrz31mQUJwsWuLP10PjvSy91TSqJVlioetddqs2bu38t//M/qm+/7f5jhM7aL7qoYh2dmza5K5uDDy45aLdp464wNm0qnTfITWSLF6teeGHkfKHgEYuLLnJNXNWxE9dUnb173aCADz9Mdk0qLp4BYT+vM7i9r1O5U1ieFkCa934sMMZ73wz43utQbuq9b+Ytmwmc6OtU7hutLrUxIHz6qTs7B3e2Pny46vffV309tm51Qwj9B+YTTnD1K0vQdvzx40sCTrt2lb+rNzTqpzJXCG+/7da5777g6xhTXcUtILiy6Assxo02GumljQH6ee8H4IaVLgaeA+r71h2CG1q6FLjCl54FzPfKfAIbdlpszx53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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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r2fw4MHl/eYHDBhAnz59+Mtf/rLX8evWraN3794AfPHFF4wdO5b8/HzOP/98vvjii/J0V1xxRfmwzDfeeCMAM2bMYP369QwbNoxhw4YBkJeXx6ZNmwC488476d27N7179y4flnndunUcffTRfPe736VXr16cfPLJe5wnmaKiIgYNGkR+fj5nn302n3zySfn5e/bsSX5+fvlAby+88EL5JDL9+/dn69atNf7bJqN++iJS7kc/gnRPCNWvH0TxMqkOHTowcOBA/va3vzF69Gjmzp3L+eefj5nRsmVLHnnkEfbff382bdrEoEGDGDVqVKXzxP72t7+lVatWLFu2jGXLljFgwIDyfdOmTeOAAw5g586dDB8+nGXLlvGDH/yAO++8k4ULF9KxY8c98lq8eDH33nsvr7/+Ou7Osccey5AhQ2jfvj2rV6/mgQce4Pe//z3nnXceDz/8cJXj41988cX8+te/ZsiQIfz0pz/l5ptvZvr06dx66628++677LPPPuVVSnfccQczZ87k+OOPZ9u2bbRs2TKFv3b1dKcvIhmXWMWTWLXj7lx33XXk5+czYsQIPvzwQzZu3FhpPi+++GJ58M3Pzyc/P79837x58xgwYAD9+/dn+fLl1Q6m9vLLL3P22WfTunVr9ttvP8455xxeeuklALp3706/fv2AqodvhjC+/5YtWxgyZAgAl1xyCS+++GJ5GcePH8/s2bPLn/w9/vjjufrqq5kxYwZbtmxJ+xPButMXkXJV3ZHXpbPOOourr76aN998ky+++KL8Dn3OnDmUlJSwePFimjdvTl5eXtLhlBMl+xXw7rvvcscdd7Bo0SLat2/PhAkTqs2nqnHJyoZlhjA0c3XVO5X561//yosvvsj8+fO55ZZbWL58OVOmTOH000/niSeeYNCgQTzzzDMcddRRNco/Gd3pi0jG7bfffgwdOpTvfOc7ezTgfvrppxx44IE0b96chQsX8t5771WZz4knnlg++fnbb7/NsmXLgDAsc+vWrWnbti0bN27kySefLD+mTZs2SevNTzzxRB599FG2b9/O559/ziOPPMIJJ5yQ8rW1bduW9u3bl/9K+NOf/sSQIUPYtWsXH3zwAcOGDeO2225jy5YtbNu2jXfeeYc+ffpwzTXXUFBQwN///veUz1kV3emLSIMwbtw4zjnnnD168owfP54zzzyTgoIC+vXrV+0d7xVXXMGll15Kfn4+/fr1Y+DAgUCYBat///706tVrr2GZJ02axKmnnsohhxzCwoULy7cPGDCACRMmlOcxceJE+vfvX2VVTmXuu+8+Jk+ezPbt2+nRowf33nsvO3fu5MILL+TTTz/F3bnqqqto164dP/nJT1i4cCFNmzalZ8+e5bOApUusoZXrk4ZWFqlfGlq58anN0Mqq3hERySEK+iIiOURBX0RSnhBcMqe2n1WsoG9mI81slZmtMbMpSfZPMLMSMyuKlokJ+y4xs9XRckmtSisiadeyZUs2b96swN8IuDubN2+u1QNb1fbeMbOmwEzgX4FiYJGZzXf3ik82POjuV1Y49gDgRqAAcGBxdOwnNS6xiKRVly5dKC4upqSkJNNFkRhatmxJly5danx8nC6bA4E17r4WwMzmAqOBqh9nC04Bnnb3j6NjnwZGAg/UrLgikm7Nmzene/fumS6G1JM41TudgQ8S1oujbRV928yWmdlDZnZoKsea2SQzKzSzQt1tiIjUnThBP9nIRhUr/x4D8tw9H3gGuC+FY3H3We5e4O4FnTp1ilEkERGpiThBvxg4NGG9C7A+MYG7b3b3r6LV3wPHxD1WRETqT5ygvwg4wsy6m1kLYCwwPzGBmR2SsDoKWBm9XwCcbGbtzaw9cHK0TUREMqDahlx3LzWzKwnBuilwj7svN7OpQKG7zwd+YGajgFLgY2BCdOzHZnYL4YsDYGpZo66IiNQ/jb0jIpIFNPaOiIjsRUFfRCSHKOiLiOQQBX0RkRyioC8ikkMU9EVEcoiCvohIDlHQFxHJIQr6IiI5REFfRCSHKOiLiOQQBX0RkRyioC8ikkMU9EVEcoiCvohIDlHQFxHJIQr6IiI5REFfRCSHxAr6ZjbSzFaZ2Rozm1JFujFm5mZWEK3nmdkXZlYULb9LV8FFRCR11U6MbmZNgZnAvwLFwCIzm+/uKyqkawP8AHi9QhbvuHu/NJVXRERqIc6d/kBgjbuvdfcdwFxgdJJ0twC3AV+msXwiIpJGcYJ+Z+CDhPXiaFs5M+sPHOrujyc5vruZLTGzF8zshGQnMLNJZlZoZoUlJSVxyy4iIimKE/QtyTYv32nWBPgl8OMk6TYAXd29P3A1cL+Z7b9XZu6z3L3A3Qs6deoUr+QiIpKyOEG/GDg0Yb0LsD5hvQ3QG3jezNYBg4D5Zlbg7l+5+2YAd18MvAN8Mx0FFxGR1MUJ+ouAI8ysu5m1AMYC88t2uvun7t7R3fPcPQ94DRjl7oVm1ilqCMbMegBHAGvTfhUiIhJLtb133L3UzK4EFgBNgXvcfbmZTQUK3X1+FYefCEw1s1JgJzDZ3T9OR8FFRCR15u7Vp6pHBQUFXlhYmOliiIg0Kma22N0LqkunJ3JFRHKIgr6ISA5R0BcRySEK+iIiOURBX0Qkhyjoi4jkEAV9EZEckjVBf+NGmDgRXnqp6nRz5kBeHjRpEl7nzKmP0omINAzVPpHbWLRpA3/6E7RvDyckHcszBPhJk2D79rD+3nthHWD8+Popp4hIJmXNnX6rVvAv/wLPPlt5muuv3x3wy2zfHraLiOSCrAn6AMOHQ1ERbNqUfP/776e2XUQk22Rd0HeHhQuT7+/aNbXtIiLZJquC/re+Fer2K6vimTYtVAMlatUqbBcRyQVZFfSbNYOhQysP+uPHw6xZ0K0bmIXXWbPUiCsiuSOrgj6EKp41a0LPnGTGj4d162DXrvCqgC8iuSTrgv6IEeG1ql48IiK5KuuCfs+ecPDBCvoiIsnECvpmNtLMVpnZGjObUkW6MWbmZlaQsO3a6LhVZnZKOgpddVnhpJNC0G9gk4KJiGRctUE/mth8JnAq0BMYZ2Y9k6RrA/wAeD1hW0/CROq9gJHA/5RNlF6XRowIwzIsX17XZxIRaVzi3OkPBNa4+1p33wHMBUYnSXcLcBvwZcK20cBcd//K3d8F1kT51anhw8OrqnhERPYUJ+h3Bj5IWC+OtpUzs/7Aoe7+eKrH1oWuXeHww+GZZ+r6TCIijUucoG9JtpXXlptZE+CXwI9TPTYhj0lmVmhmhSUlJTGKVL0RI+CFF6C0NC3ZiYhkhThBvxg4NGG9C7A+Yb0N0Bt43szWAYOA+VFjbnXHAuDus9y9wN0LOnXqlNoVVGL4cNi6FRYtSkt2IiJZIU7QXwQcYWbdzawFoWF2ftlOd//U3Tu6e5675wGvAaPcvTBKN9bM9jGz7sARwBtpv4okhg0LPXlUxSMislu1Qd/dS4ErgQXASmCeuy83s6lmNqqaY5cD84AVwN+A77v7ztoXu3odOkC/fmrMFRFJZN7AOrMXFBR4YWFhWvL6z/+EX/0KPv4YWrdOS5YiIg2SmS1294Lq0mXdE7mJhg+HHTvg5ZczXRIRkYYhq4P+4MHQvLmqeEREymR10G/duvopFEVEcklWB30IVTxLlsDmzZkuiYhI5uVE0K9qCkURkVyS9UG/uikURURySdYH/ebNYcgQPaQlIgI5EPRh9xSK77+f6ZKIiGRWTgR9TaEoIhLkRNDv1QsOOkhVPCIiORH0y6ZQfO45TaEoIrktJ4I+hCqef/4TVqyIf8ycOZCXB02ahNc5c+qqdCIi9SNngn7ZFIpxq3jmzIFJk+C998Kvg/feC+sK/CLSmOVM0O/WDQ47LH5j7vXXw/bte27bvj1sFxFprHIm6EOo4nn++XhTKFbWvVPdPkWkMcupoJ/KFIpdu6a2XUSkMcipoD9sWHiNU8UzbRq0arXntlatwnYRkcYqp4J+x47Qv3+8oD9+PMyaFdoCzMLrrFlhu4hIYxUr6JvZSDNbZWZrzGxKkv2TzewtMysys5fNrGe0Pc/Mvoi2F5nZ79J9AakaPhxefXXvRtpkxo+Hdetg167wqoAvIo1dtUHfzJoCM4FTgZ7AuLKgnuB+d+/j7v2A24A7E/a94+79omVyugpeU5pCUURyWZw7/YHAGndf6+47gLnA6MQE7v5ZwmproME+93rCCZpCUURyV5yg3xn4IGG9ONq2BzP7vpm9Q7jT/0HCru5mtsTMXjCzE5KdwMwmmVmhmRWWlJSkUPzUtW4Nxx0HTz1Vp6cREWmQ4gR9S7Jtrzt5d5/p7ocB1wA3RJs3AF3dvT9wNXC/me2f5NhZ7l7g7gWdOnWKX/oaGjMGiop0ty8iuSdO0C8GDk1Y7wKsryL9XOAsAHf/yt03R+8XA+8A36xZUdPnu9+FQw+F667TAGwiklviBP1FwBFm1t3MWgBjgfmJCczsiITV04HV0fZOUUMwZtYDOAJYm46C10bLlnDTTfDGG/Doo7XPTwOziUhjUW3Qd/dS4EpgAbASmOfuy81sqpmNipJdaWbLzayIUI1zSbT9RGCZmS0FHgImu/vHab+KGrj4YjjqqDCWzs6dNc9HA7OJSGNi3sDqNwoKCrywsLBezvXww6F+/957YcKEmuWRlxcCfUXduoW+/SIi9cHMFrt7QXXpcuqJ3IrOOQcKCuDGG+Grr2qWhwZmE5HGJKeDvhn8/OchQN91V83y0MBsItKY5HTQhzDc8rBh8LOfwbZtqR+vgdlEpDHJ+aBfdrdfUgLTp6d+vAZmE5HGJKcbchOddRYsXAhr10KHDvV+ehGRWlFDboqmTQsTrNx6a6ZLIiJSdxT0I716wUUXwW9+Ax9+mOnSiIjUDQX9BDffHB7Umjo10yUREakbCvoJ8vLg8svh7rth9epMl0ZEJP0U9Cu44QbYZx/46U8zXRIRkfRT0K/goIPgqqtg7lxYsiTTpRERSS8F/ST+/d+hffswGJuISDZR0E+iXTuYMgWefBJeeinTpRERSR8F/UpceSUccghce60mWhGR7KGgX4lWrUJj7iuvwB/+kL58NeGKiGSSgn4VLrsMTjopTIpyyy21v+PXhCsikmkK+lVo3jzU6190UbjrnzgRvv665vldfz1s377ntu3b1WAsIvUnVtA3s5FmtsrM1pjZlCT7J5vZW2ZWZGYvm1nPhH3XRsetMrNT0ln4+tCiBdx3H/zkJ3DPPXDGGfDZZzXLSxOuiEimVRv0o4nNZwKnAj2BcYlBPXK/u/dx937AbcCd0bE9CROp9wJGAv9TNlF6Y2IWhma4+2549lk44QQoLk49n1QmXFHdv4jUhTh3+gOBNe6+1t13AHOB0YkJ3D3x3rc1UFb7PRqY6+5fufu7wJoov0bpO9+Bv/41DL88aBAsW5ba8XEnXFHdv4jUlThBvzPwQcJ6cbRtD2b2fTN7h3Cn/4NUjm1MTjkFXn45vB88GJ5+Ov6xcSdcUd2/iNSVOEHfkmzbqx+Lu89098OAa4AbUjnWzCaZWaGZFZaUlMQoUmb17QuvvRaqXU47De69N/6x48fDunWwa1d4TTbDlur+RaSuxAn6xcChCetdgPVVpJ8LnJXKse4+y90L3L2gU6dOMYqUeV26hKd1hw4N1T433ZS+h7g02bqI1JU4QX8RcISZdTezFoSG2fmJCczsiITV04GygYnnA2PNbB8z6w4cAbxR+2I3DG3bwhNPwIQJYSz+73wHSktrn68mWxeRutKsugTuXmpmVwILgKbAPe6+3MymAoXuPh+40sxGAF8DnwCXRMcuN7N5wAqgFPi+u++so2vJiObNQ1fObt1C4N+6Fe6/P3T1rKmyKp/rrw9VOl27hoCvydZFpLY0MXoaTZ8ehmU+/XR46CFo2TLTJRKRXKGJ0TPgRz+C3/0uVPmccQZ8/nn9nFd9+kUkrmqrdyQ1l18e6t8nTAjdO//611D3X1fK+vSXdfEs69MPqg4Skb3pTr8OXHRRmHnr9ddh+HDYvLnuzqU+/SKSCgX9OnLuufDII/D226Fb58aNdXMe9ekXkVQo6NehM86Axx8PwzaceGLNxuupjvr0i0gqFPTr2IgRsGABbNgQAv+776Y3f/XpF5FUKOjXg8GDw+icW7aEETpXrUpf3nHH8xERAQX9evOtb8Hzz4dJWE48Ef74R9i2LT15xxnPR0QEFPTrVX4+vPACtG8Pl1wCBx0Uevo89RTsrIfnlNWfX0QU9OvZUUfBypVhsLYLLwwNvaecEhpe/+M/Uh+jP65Ux+jXF4RIdtIwDBn25ZfhAa4//jE8yVtaGoZuvugiuOAgBvM0AAAQFElEQVQCOOSQ9JwnLy8E+oq6dQtVQokqPvAFoXFYbQUiDVfcYRgU9BuQTZvgwQfhT38KD3Y1aQL9+oUnevfbD1q33vM18X27duEXQ8WePGWaNEk+9LNZaAtIlMoXhIg0DAr6jdyqVTB7NixaFMbw+fzz0PC7bdvu9xWDdf/+4YGwbt32zi+VQJ7KF4SINAxxg77G3mmgjjwSbrml8v3uoWqo7AugsBAmToSCgjDC55Ahe6afNi15lU2y/vxduyb/gtADXyKNnxpyGykz2Hdf6Ngx3MWPGROqhDp0CA+EzZy55916Kv359cCXSPZS0M8iRx4ZAv/IkXDllfDd78JXX+3eH7c/vx74EsleCvpZpm1b+Mtfwiibd98Nw4aFISBSFfcLQl07RRoXBf0s1KQJ/OxnMG8eLF0a6vnfqIOZidX3X6TxiRX0zWykma0yszVmNiXJ/qvNbIWZLTOzZ82sW8K+nWZWFC3zKx4rdefcc+HVV8N8vSeeCPfdl978UxnLP9UvCBGpG9UGfTNrCswETgV6AuPMrGeFZEuAAnfPBx4CbkvY94W794uWUWkqt8TUt2/o9nn88WE2r6uuCg+ApUMqY/mn+gWhXwQidSPOnf5AYI27r3X3HcBcYHRiAndf6O5l/6VfA7qkt5hSGx07huGdf/jDMHl7v35wxRVhPt/XXqv5XL6pjOUf9wuiLn8RbN5cs/YNkWwSJ+h3Bj5IWC+OtlXmMuDJhPWWZlZoZq+Z2VnJDjCzSVGawpKSkhhFklQ1axYC/uzZoVvnAw+EwH/ccdCmTej5c9558POfh2EhPvxwd5fP0tLwtPDq1aFtYMGCMB3ksGHQvPme59l338r7/idTcXtdTP9YXBy+8Lp0CT2Rpk6FHTtqnp9Io+buVS7AucAfEtYvAn5dSdoLCXf6+yRs+0b02gNYBxxW1fmOOeYYl7q3a5f7unXujz7qfvPN7mef7d6jh3sI9WFp1869TZs9tyVbzPZc79XLfdIk9/vuc1+zJpxr9mz3Vq32TNeqVdieqGJeiedIZvZs927dwv5u3fbM7513QjmaN3dv1sz90kvdx44N+eXnuy9eXFd/XZH6BxR6NfHc3WM9kVsMHJqw3gVYXzGRmY0ArgeGuHt573B3Xx+9rjWz54H+wDuxv5WkTpT1v+/WDUYnVNZ99lkY6bOoCFasCI3A7dtXvbRsGZ4KfuMNeOWV0Hj84IOhbz+EIaSPPx7OOitMJrNxIxx8MFx2GXTqBI89Fp4n2LEDDjgg+UTyyX4pVBwYrqwqaP36MDfxnDnQtGl4Uvk//zO0DwCMHRt+5QwcCNdcAz/5SbgGkVxQ7dg7ZtYM+AcwHPgQWARc4O7LE9L0JzTgjnT31Qnb2wPb3f0rM+sI/D9gtLuvqOx8GnsnO+zcGb40Xnll91KbqSJ79QpfGsceG5YDD6x8PCEI1UyTJ8O//zt84xt77//kE/jxj+Hee+Hoo+Gee2DQoJqXL1ts3Rqq99q02X1T0KZNpkuVGzZtCtWqffvW7Pi0DrhmZqcB04GmwD3uPs3MphJ+Tsw3s2eAPkBZM9n77j7KzP4FuAvYRWg/mO7ud1d1LgX97LVhQxgjaOdO2GefsLRosft92fL44/CLX4S6+A4dQsPzxx+HXyBlk8107171l8hHH4VfEdVZsCA8ufzhh6Fn09SplY9Ums0++ghmzAjDd2zZsue+Aw4IwT8vb8/Xbt3gm98MI71mi9LS0P5VXz7/HObPh/vvh7/9Dfr0gTffrFleGmVTss727bB4cRhq4rXX4NFHk884luoQ0J99Fqp5fvc7OPzwcNd/wgl7p9u8OTRmr1kTXsuWli3h7LPD+EeNbVC6tWvhjjvCL56vvgrX8aMfhQb6994Lf8eKr4kN7S1ahAb9M8+EM85IPsJrQ/fBB/B//xcGKnzllRB4Tz0VTjstdHSo2Fmhtr7+Gp5+OlQ/Pvpo+Ht27gzjxoU5NPr3r1m+cYN+tZX+9b2oIVfimj3bvWXL6huH43ruud2N2Zdf7n7jje7jx7sPHOjevv2e52nSxL17d/eTT3bv12/39mOPdb/jjtBI3pC9+ab7+eeH62jRwn3iRPe//73643btci8pcS8sdP/zn92vvtr9m9/cff19+rhfe637q6+6l5bW/XXU1Lvvhs9p0KDdZc/PD9czbFho+Af3tm3dx4xxv+ce9/Xra36+nTvdX37Z/Xvfc+/YMeTdvn3oaPD882F/bRGzIVd3+tKozZkTunO+/364y542Lfk4QXHTff55SDdjRljv2hWOOGL3cvjh4bV791AVVWbNGvjzn8OyZEnYduyx4anoMWMaxh2wOyxcGKrOnnoq1NVPnhzu7JO1e6TiH/8I1XKPPRamAt25M1SvnXZa+AVw8smw//7puY6aWrMm3M0/9FD4xQgwYED4fL797VBVVeazz+CZZ8Jsdk8+GToHQLgLP+20sPTsuXuui6qW9evh4YfDL6V994VRo8K/vVNOCb+U0kXVOyKRmkz/uHlzqKuuSa+esuAyb97uL4CBA+Gcc0IgLLu3hMrf79oVAmfFpbR0z/WKk9qY7fma+P6pp0KbykEHhUA/eXKYcS3dtmwJ9dOPPRYC5iefhF5UnTrtXg48sPL15s3h00/3XrZs2XN969ZwviZNQv5VvS5bFsahKvssygJ9jx7VX497OP6JJ8Ly6qupTSbUtGn40rvggtBTrq4axhX0RSKZnP6x7Avgz3+ueQNdMma7A1pZUE/88iiT+L5Hj9Bj6eKL66+LamlpCJLPPhvueEtKdi8ffRSCdypatQpfVG3bhuBptvvLr+yLMtlr584hyJ9zTu3bXT75JNTJf/hhuDGIszRtWrtzxqGgLxJpKNM/fvRRmO2s7NyJd+UV35cF9cSlWbPd7xPv5BuzHTtCV8XEL4MdO0JQb9t2d4Bv2zZUD6W7UTWbaLpEkUiq0z+mu50g1bS5pEWL0J5Q2zYFiU/j6UvWS2X6x7gDvqUyMJyGlZYGJU4Xn/pc1GVT6kJVY/Qk6tZtz66ZZUu3bjVLl2rauOUUqQh12RRJXdz6/1TaCeKmrUkvo3RTNVTjFbdOX9U7IgniDgGdylwCmRxWOhWqhsoNCvoiCeLW/6fSThA3bSozkdWFTH/pSP1Q0BdJMH58qE7p1m338NPJqlfipkslbSq/HupCpr90pH6oTl+kgch0nX4mH2KT2lOdvkgjk8qvB0j/BPKpVFlJ46WHs0QakPHj493VVzZrWFkeNT03qPdOtlP1jkgjpKoYqUjVOyJZTI2uUlMK+iKNUCo9fdJd99+Y8pQk4jy2C4wEVgFrgClJ9l8NrACWAc8C3RL2XQKsjpZLqjuXhmEQqd7s2WGWsOpmDYubri7Onek8cw0xh2GIE/CbAu8APYAWwFKgZ4U0w4BW0fsrgAej9wcAa6PX9tH79lWdT0FfJJ444/SkMu5PXKnmmaly5pq4QT9O9c5AYI27r3X3HcBcYHSFXwsL3b2sd/FrQJfo/SnA0+7+sbt/Ajwd/WoQkVoaPz402u7aFV6T9bKpi7r/VPKMO7RDQ2ijyJXqpThBvzPwQcJ6cbStMpcBT6ZyrJlNMrNCMyssKSmJUSQRiaMunvJNJc+4QzukWs64ATqVdLky7lCcoJ9sjp6k/TzN7EKgALg9lWPdfZa7F7h7QadOnWIUSUTiqIsHrlLJM+4dfKbnPMipcYeqq/8BjgMWJKxfC1ybJN0IYCVwYMK2ccBdCet3AeOqOp/q9EXSqy7G6E/3/AR1kWcq5zZLntYszl+jYSCNDbnNCA2w3dndkNurQpr+hMbeIypsPwB4l9CI2z56f0BV51PQF8keddErJ26ATiWQZ8NEN3GDfrXVO+5eClwJLIju5Oe5+3Izm2pmo6JktwP7AX82syIzmx8d+zFwC7AoWqZG20QkB6Q6nlAcdTHnQdzqpbqq+6/XRuQ43wz1uehOX0SqUlfPKNRF19I4eabr1xDpqt6p70VBX0SqE7eKJd1VMalUGcUN5ul6RiFu0NeAayIiMaUy0F3ctKnMt1wVDbgmIpJmddFdtb5nTFPQFxGJKZWG6bjBvL4nr1HQFxFJQZzhLyB+MK+LHk5V0cxZIiJ1IJWZyOLOmJYOCvoiInWkPoN5XKreERHJIQr6IiI5REFfRCSHKOiLiOQQBX0RkRzS4IZhMLMSIMnDy7F1BDalqTgNQbZdD2TfNWXb9UD2XVO2XQ/sfU3d3L3aWagaXNCvLTMrjDP+RGORbdcD2XdN2XY9kH3XlG3XAzW/JlXviIjkEAV9EZEcko1Bf1amC5Bm2XY9kH3XlG3XA9l3Tdl2PVDDa8q6On0REalcNt7pi4hIJRT0RURySNYEfTMbaWarzGyNmU3JdHnSwczWmdlbZlZkZo1uDkkzu8fMPjKztxO2HWBmT5vZ6ui1fSbLmKpKrukmM/sw+pyKzOy0TJYxFWZ2qJktNLOVZrbczH4YbW+Un1MV19OYP6OWZvaGmS2NrunmaHt3M3s9+oweNLMWsfLLhjp9M2sK/AP4V6AYWASMc/cVGS1YLZnZOqDA3RvlQyVmdiKwDfiju/eOtt0GfOzut0Zfzu3d/ZpMljMVlVzTTcA2d78jk2WrCTM7BDjE3d80szbAYuAsYAKN8HOq4nrOo/F+Rga0dvdtZtYceBn4IXA18H/uPtfMfgcsdfffVpdfttzpDwTWuPtad98BzAVGZ7hMOc/dXwQ+rrB5NHBf9P4+wn/IRqOSa2q03H2Du78Zvd8KrAQ600g/pyqup9HyYFu02jxaHDgJeCjaHvszypag3xn4IGG9mEb+QUcceMrMFpvZpEwXJk0OcvcNEP6DAgdmuDzpcqWZLYuqfxpFVUhFZpYH9AdeJws+pwrXA434MzKzpmZWBHwEPA28A2xx99IoSeyYly1B35Jsa/z1VnC8uw8ATgW+H1UtSMPzW+AwoB+wAfjvzBYndWa2H/Aw8CN3/yzT5amtJNfTqD8jd9/p7v2ALoSajaOTJYuTV7YE/WLg0IT1LsD6DJUlbdx9ffT6EfAI4cNu7DZG9a5l9a8fZbg8tebuG6P/lLuA39PIPqeonvhhYI67/1+0udF+Tsmup7F/RmXcfQvwPDAIaGdmZVPexo552RL0FwFHRK3ZLYCxwPwMl6lWzKx11BCFmbUGTgbervqoRmE+cEn0/hLgLxksS1qUBcfI2TSizylqJLwbWOnudybsapSfU2XX08g/o05m1i56vy8wgtBWsRAYEyWL/RllRe8dgKgL1nSgKXCPu0/LcJFqxcx6EO7uIUxgf39juyYzewAYShgCdiNwI/AoMA/oCrwPnOvujaZhtJJrGkqoNnBgHXB5WX14Q2dmg4GXgLeAXdHm6wj14I3uc6riesbReD+jfEJDbVPCjfo8d58axYi5wAHAEuBCd/+q2vyyJeiLiEj1sqV6R0REYlDQFxHJIQr6IiI5REFfRCSHKOiLiOQQBX0RkRyioC8ikkP+PzuzEyRhoRPeAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "acc = history.history['acc']\n", "val_acc = history.history['val_acc']\n", "loss = history.history['loss']\n", "val_loss = history.history['val_loss']\n", "\n", "epochs = range(len(acc))\n", "\n", "plt.plot(epochs, acc, 'bo', label='Training acc')\n", "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n", "plt.title('Training and validation accuracy')\n", "plt.legend()\n", "\n", "plt.figure()\n", "\n", "plt.plot(epochs, loss, 'bo', label='Training loss')\n", "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n", "plt.title('Training and validation loss')\n", "plt.legend()\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "여기서 볼 수 있듯이 검증 정확도가 이전과 비슷하지만 처음부터 훈련시킨 소규모 컨브넷보다 과대적합이 줄었습니다." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 미세 조정\n", "\n", "모델을 재사용하는 데 널리 사용되는 또 하나의 기법은 특성 추출을 보완하는 미세 조정입니다. 미세 조정은 특성 추출에 사용했던 동결 모델의 상위 층 몇 개를 동결에서 해제하고 모델에 새로 추가한 층(여기서는 완전 연결 분류기)과 함께 훈련하는 것입니다. 주어진 문제에 조금 더 밀접하게 재사용 모델의 표현을 일부 조정하기 때문에 미세 조정이라고 부릅니다.\n", "\n", "![fine-tuning VGG16](https://s3.amazonaws.com/book.keras.io/img/ch5/vgg16_fine_tuning.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "앞서 랜덤하게 초기화된 상단 분류기를 훈련하기 위해 VGG16의 합성곱 기반층을 동결해야 한다고 말했습니다. 같은 이유로 맨 위에 있는 분류기가 훈련된 후에 합성곱 기반의 상위 층을 미세 조정할 수 있습니다. 분류기가 미리 훈련되지 않으면 훈련되는 동안 너무 큰 오차 신호가 네트워크에 전파됩니다. 이는 미세 조정될 층들이 사전에 학습한 표현들을 망가뜨리게 될 것입니다. 네트워크를 미세 조정하는 단계는 다음과 같습니다:\n", "\n", "1. 사전에 훈련된 기반 네트워크 위에 새로운 네트워크를 추가합니다.\n", "2. 기반 네트워크를 동결합니다.\n", "3. 새로 추가한 네트워크를 훈련합니다.\n", "4. 기반 네트워크에서 일부 층의 동결을 해제합니다.\n", "5. 동결을 해제한 층과 새로 추가한 층을 함께 훈련합니다.\n", "\n", "처음 세 단계는 특성 추출을 할 때 이미 완료했습니다. 네 번째 단계를 진행해 보죠. `conv_base`의 동결을 해제하고 개별 층을 동결하겠습니다.\n", "\n", "기억을 되살리기 위해 합성곱 기반층의 구조를 다시 확인해 보겠습니다:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "input_1 (InputLayer) (None, 150, 150, 3) 0 \n", "_________________________________________________________________\n", "block1_conv1 (Conv2D) (None, 150, 150, 64) 1792 \n", "_________________________________________________________________\n", "block1_conv2 (Conv2D) (None, 150, 150, 64) 36928 \n", "_________________________________________________________________\n", "block1_pool (MaxPooling2D) (None, 75, 75, 64) 0 \n", "_________________________________________________________________\n", "block2_conv1 (Conv2D) (None, 75, 75, 128) 73856 \n", "_________________________________________________________________\n", "block2_conv2 (Conv2D) (None, 75, 75, 128) 147584 \n", "_________________________________________________________________\n", "block2_pool (MaxPooling2D) (None, 37, 37, 128) 0 \n", "_________________________________________________________________\n", "block3_conv1 (Conv2D) (None, 37, 37, 256) 295168 \n", "_________________________________________________________________\n", "block3_conv2 (Conv2D) (None, 37, 37, 256) 590080 \n", "_________________________________________________________________\n", "block3_conv3 (Conv2D) (None, 37, 37, 256) 590080 \n", "_________________________________________________________________\n", "block3_pool (MaxPooling2D) (None, 18, 18, 256) 0 \n", "_________________________________________________________________\n", "block4_conv1 (Conv2D) (None, 18, 18, 512) 1180160 \n", "_________________________________________________________________\n", "block4_conv2 (Conv2D) (None, 18, 18, 512) 2359808 \n", "_________________________________________________________________\n", "block4_conv3 (Conv2D) (None, 18, 18, 512) 2359808 \n", "_________________________________________________________________\n", "block4_pool (MaxPooling2D) (None, 9, 9, 512) 0 \n", "_________________________________________________________________\n", "block5_conv1 (Conv2D) (None, 9, 9, 512) 2359808 \n", "_________________________________________________________________\n", "block5_conv2 (Conv2D) (None, 9, 9, 512) 2359808 \n", "_________________________________________________________________\n", "block5_conv3 (Conv2D) (None, 9, 9, 512) 2359808 \n", "_________________________________________________________________\n", "block5_pool (MaxPooling2D) (None, 4, 4, 512) 0 \n", "=================================================================\n", "Total params: 14,714,688\n", "Trainable params: 0\n", "Non-trainable params: 14,714,688\n", "_________________________________________________________________\n" ] } ], "source": [ "conv_base.summary()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "마지막 세 개의 합성곱 층을 미세 조정하겠습니다. 즉, `block4_pool`까지 모든 층은 동결되고 `block5_conv1`, `block5_conv2`, `block5_conv3` 층은 학습 대상이 됩니다.\n", "\n", "왜 더 많은 층을 미세 조정하지 않을까요? 왜 전체 합성곱 기반층을 미세 조정하지 않을까요? 그렇게 할 수도 있지만 다음 사항을 고려해야 합니다:\n", "\n", "* 합성곱 기반층에 있는 하위 층들은 좀 더 일반적이고 재사용 가능한 특성들을 인코딩합니다. 반면 상위 층은 좀 더 특화된 특성을 인코딩합니다. 새로운 문제에 재활용하도록 수정이 필요한 것은 구체적인 특성이므로 이들을 미세 조정하는 것이 유리합니다. 하위 층으로 갈수록 미세 조정에 대한 효과가 감소합니다.\n", "* 훈련해야 할 파라미터가 많을수록 과대적합의 위험이 커집니다. 합성곱 기반층은 1천 5백만 개의 파라미터를 가지고 있습니다. 작은 데이터셋으로 전부 훈련하려고 하면 매우 위험합니다.\n", "\n", "그러므로 이런 상황에서는 합성곱 기반층에서 최상위 두 세개의 층만 미세 조정하는 것이 좋습니다.\n", "\n", "앞선 예제 코드에 이어서 미세 조정을 설정해보죠:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "conv_base.trainable = True\n", "\n", "set_trainable = False\n", "for layer in conv_base.layers:\n", " if layer.name == 'block5_conv1':\n", " set_trainable = True\n", " if set_trainable:\n", " layer.trainable = True\n", " else:\n", " layer.trainable = False" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "이제 네트워크의 미세 조정을 시작하겠습니다. 학습률을 낮춘 RMSProp 옵티마이저를 사용합니다. 학습률을 낮추는 이유는 미세 조정하는 세 개의 층에서 학습된 표현을 조금씩 수정하기 위해서입니다. 변경량이 너무 크면 학습된 표현에 나쁜 영향을 끼칠 수 있습니다.\n", "\n", "미세 조정을 진행해 보죠:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/100\n", "100/100 [==============================] - 14s 139ms/step - loss: 0.1986 - acc: 0.9230 - val_loss: 0.2034 - val_acc: 0.9150\n", "Epoch 2/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.1617 - acc: 0.9290 - val_loss: 0.2445 - val_acc: 0.9060\n", "Epoch 3/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.1348 - acc: 0.9485 - val_loss: 0.2170 - val_acc: 0.9210\n", "Epoch 4/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.1268 - acc: 0.9520 - val_loss: 0.2563 - val_acc: 0.9030\n", "Epoch 5/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.1075 - acc: 0.9585 - val_loss: 0.2591 - val_acc: 0.9030\n", "Epoch 6/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0964 - acc: 0.9680 - val_loss: 0.1927 - val_acc: 0.9290\n", "Epoch 7/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0753 - acc: 0.9720 - val_loss: 0.2350 - val_acc: 0.9270\n", "Epoch 8/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0797 - acc: 0.9710 - val_loss: 0.2316 - val_acc: 0.9160\n", "Epoch 9/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0606 - acc: 0.9770 - val_loss: 0.2451 - val_acc: 0.9250\n", "Epoch 10/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0577 - acc: 0.9795 - val_loss: 0.2204 - val_acc: 0.9300\n", "Epoch 11/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0476 - acc: 0.9815 - val_loss: 0.2118 - val_acc: 0.9280\n", "Epoch 12/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0546 - acc: 0.9800 - val_loss: 0.2498 - val_acc: 0.9220\n", "Epoch 13/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0449 - acc: 0.9850 - val_loss: 0.2565 - val_acc: 0.9330\n", "Epoch 14/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0395 - acc: 0.9850 - val_loss: 0.2517 - val_acc: 0.9120\n", "Epoch 15/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0353 - acc: 0.9900 - val_loss: 0.2533 - val_acc: 0.9180\n", "Epoch 16/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0343 - acc: 0.9885 - val_loss: 0.2592 - val_acc: 0.9250\n", "Epoch 17/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0248 - acc: 0.9890 - val_loss: 0.1906 - val_acc: 0.9440\n", "Epoch 18/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0272 - acc: 0.9895 - val_loss: 0.2727 - val_acc: 0.9230\n", "Epoch 19/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0308 - acc: 0.9905 - val_loss: 0.2550 - val_acc: 0.9300\n", "Epoch 20/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0231 - acc: 0.9955 - val_loss: 0.2564 - val_acc: 0.9280\n", "Epoch 21/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0229 - acc: 0.9930 - val_loss: 0.2758 - val_acc: 0.9380\n", "Epoch 22/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0222 - acc: 0.9915 - val_loss: 0.2864 - val_acc: 0.9300\n", "Epoch 23/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0214 - acc: 0.9940 - val_loss: 0.2662 - val_acc: 0.9270\n", "Epoch 24/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0278 - acc: 0.9915 - val_loss: 0.2774 - val_acc: 0.9270\n", "Epoch 25/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0159 - acc: 0.9945 - val_loss: 0.2699 - val_acc: 0.9200\n", "Epoch 26/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0103 - acc: 0.9980 - val_loss: 0.3045 - val_acc: 0.9280\n", "Epoch 27/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0118 - acc: 0.9970 - val_loss: 0.3078 - val_acc: 0.9160\n", "Epoch 28/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0110 - acc: 0.9965 - val_loss: 0.2501 - val_acc: 0.9300\n", "Epoch 29/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0083 - acc: 0.9975 - val_loss: 0.3244 - val_acc: 0.9250\n", "Epoch 30/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0095 - acc: 0.9980 - val_loss: 0.3476 - val_acc: 0.9200\n", "Epoch 31/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0097 - acc: 0.9975 - val_loss: 0.3119 - val_acc: 0.9360\n", "Epoch 32/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0131 - acc: 0.9960 - val_loss: 0.3266 - val_acc: 0.9230\n", "Epoch 33/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0075 - acc: 0.9995 - val_loss: 0.3396 - val_acc: 0.9210\n", "Epoch 34/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0102 - acc: 0.9970 - val_loss: 0.3471 - val_acc: 0.9190\n", "Epoch 35/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0104 - acc: 0.9955 - val_loss: 0.2965 - val_acc: 0.9260\n", "Epoch 36/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0076 - acc: 0.9980 - val_loss: 0.2994 - val_acc: 0.9320\n", "Epoch 37/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0076 - acc: 0.9975 - val_loss: 0.2785 - val_acc: 0.9320\n", "Epoch 38/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0073 - acc: 0.9975 - val_loss: 0.3653 - val_acc: 0.9250\n", "Epoch 39/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0078 - acc: 0.9980 - val_loss: 0.3268 - val_acc: 0.9280\n", "Epoch 40/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0130 - acc: 0.9965 - val_loss: 0.3348 - val_acc: 0.9240\n", "Epoch 41/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0078 - acc: 0.9980 - val_loss: 0.2836 - val_acc: 0.9370\n", "Epoch 42/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0086 - acc: 0.9970 - val_loss: 0.3357 - val_acc: 0.9300\n", "Epoch 43/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0102 - acc: 0.9950 - val_loss: 0.3247 - val_acc: 0.9380\n", "Epoch 44/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0069 - acc: 0.9975 - val_loss: 0.3182 - val_acc: 0.9310\n", "Epoch 45/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0086 - acc: 0.9965 - val_loss: 0.3377 - val_acc: 0.9240\n", "Epoch 46/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0091 - acc: 0.9965 - val_loss: 0.2801 - val_acc: 0.9330\n", "Epoch 47/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0065 - acc: 0.9970 - val_loss: 0.3206 - val_acc: 0.9350\n", "Epoch 48/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0065 - acc: 0.9970 - val_loss: 0.3135 - val_acc: 0.9330\n", "Epoch 49/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0069 - acc: 0.9970 - val_loss: 0.3356 - val_acc: 0.9240\n", "Epoch 50/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0037 - acc: 0.9985 - val_loss: 0.3414 - val_acc: 0.9280\n", "Epoch 51/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0062 - acc: 0.9985 - val_loss: 0.3440 - val_acc: 0.9240\n", "Epoch 52/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0038 - acc: 0.9985 - val_loss: 0.3321 - val_acc: 0.9400\n", "Epoch 53/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0058 - acc: 0.9985 - val_loss: 0.4316 - val_acc: 0.9170\n", "Epoch 54/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0049 - acc: 0.9985 - val_loss: 0.3618 - val_acc: 0.9290\n", "Epoch 55/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0046 - acc: 0.9985 - val_loss: 0.5207 - val_acc: 0.9090\n", "Epoch 56/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0047 - acc: 0.9985 - val_loss: 0.4144 - val_acc: 0.9300\n", "Epoch 57/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0078 - acc: 0.9980 - val_loss: 0.3010 - val_acc: 0.9380\n", "Epoch 58/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0101 - acc: 0.9980 - val_loss: 0.3479 - val_acc: 0.9370\n", "Epoch 59/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0016 - acc: 0.9990 - val_loss: 0.3865 - val_acc: 0.9290\n", "Epoch 60/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0070 - acc: 0.9970 - val_loss: 0.3246 - val_acc: 0.9340\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 61/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0023 - acc: 0.9990 - val_loss: 0.3891 - val_acc: 0.9220\n", "Epoch 62/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0080 - acc: 0.9985 - val_loss: 0.2921 - val_acc: 0.9430\n", "Epoch 63/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0048 - acc: 0.9990 - val_loss: 0.4222 - val_acc: 0.9270\n", "Epoch 64/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0091 - acc: 0.9980 - val_loss: 0.3626 - val_acc: 0.9340\n", "Epoch 65/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0031 - acc: 0.9995 - val_loss: 0.3837 - val_acc: 0.9340\n", "Epoch 66/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0039 - acc: 0.9985 - val_loss: 0.3066 - val_acc: 0.9390\n", "Epoch 67/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0058 - acc: 0.9985 - val_loss: 0.3340 - val_acc: 0.9380\n", "Epoch 68/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0016 - acc: 0.9995 - val_loss: 0.3090 - val_acc: 0.9490\n", "Epoch 69/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0040 - acc: 0.9990 - val_loss: 0.3870 - val_acc: 0.9310\n", "Epoch 70/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0019 - acc: 0.9990 - val_loss: 0.3247 - val_acc: 0.9410\n", "Epoch 71/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0025 - acc: 0.9990 - val_loss: 0.3343 - val_acc: 0.9300\n", "Epoch 72/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 9.7100e-04 - acc: 1.0000 - val_loss: 0.3186 - val_acc: 0.9410\n", "Epoch 73/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0017 - acc: 0.9995 - val_loss: 0.4344 - val_acc: 0.9250\n", "Epoch 74/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0037 - acc: 0.9990 - val_loss: 0.2427 - val_acc: 0.9460\n", "Epoch 75/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0012 - acc: 0.9995 - val_loss: 0.4265 - val_acc: 0.9230\n", "Epoch 76/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0034 - acc: 0.9985 - val_loss: 0.5352 - val_acc: 0.9160\n", "Epoch 77/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0045 - acc: 0.9995 - val_loss: 0.4168 - val_acc: 0.9300\n", "Epoch 78/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0033 - acc: 0.9995 - val_loss: 0.3098 - val_acc: 0.9390\n", "Epoch 79/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0063 - acc: 0.9985 - val_loss: 0.3633 - val_acc: 0.9380\n", "Epoch 80/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0011 - acc: 0.9990 - val_loss: 0.3854 - val_acc: 0.9330\n", "Epoch 81/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0031 - acc: 0.9985 - val_loss: 0.3777 - val_acc: 0.9360\n", "Epoch 82/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0026 - acc: 0.9995 - val_loss: 0.3651 - val_acc: 0.9300\n", "Epoch 83/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0015 - acc: 0.9995 - val_loss: 0.3886 - val_acc: 0.9380\n", "Epoch 84/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0031 - acc: 0.9990 - val_loss: 0.3594 - val_acc: 0.9310\n", "Epoch 85/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 5.0367e-04 - acc: 1.0000 - val_loss: 0.3774 - val_acc: 0.9300\n", "Epoch 86/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0023 - acc: 0.9985 - val_loss: 0.4136 - val_acc: 0.9370\n", "Epoch 87/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 9.7421e-04 - acc: 0.9995 - val_loss: 0.3690 - val_acc: 0.9350\n", "Epoch 88/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0047 - acc: 0.9985 - val_loss: 0.3896 - val_acc: 0.9290\n", "Epoch 89/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0014 - acc: 0.9995 - val_loss: 0.3533 - val_acc: 0.9250\n", "Epoch 90/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 6.8825e-04 - acc: 1.0000 - val_loss: 0.3977 - val_acc: 0.9250\n", "Epoch 91/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0059 - acc: 0.9995 - val_loss: 0.3884 - val_acc: 0.9290\n", "Epoch 92/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 5.0845e-04 - acc: 1.0000 - val_loss: 0.6902 - val_acc: 0.9000\n", "Epoch 93/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0014 - acc: 0.9995 - val_loss: 0.4182 - val_acc: 0.9340\n", "Epoch 94/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0022 - acc: 0.9985 - val_loss: 0.3626 - val_acc: 0.9320\n", "Epoch 95/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0013 - acc: 0.9995 - val_loss: 0.5872 - val_acc: 0.9150\n", "Epoch 96/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0037 - acc: 0.9985 - val_loss: 0.4024 - val_acc: 0.9320\n", "Epoch 97/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 4.7160e-04 - acc: 1.0000 - val_loss: 0.5034 - val_acc: 0.9270\n", "Epoch 98/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 0.0012 - acc: 0.9995 - val_loss: 0.4289 - val_acc: 0.9330\n", "Epoch 99/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 6.1174e-04 - acc: 1.0000 - val_loss: 0.3862 - val_acc: 0.9400\n", "Epoch 100/100\n", "100/100 [==============================] - 13s 133ms/step - loss: 8.3751e-04 - acc: 1.0000 - val_loss: 0.3911 - val_acc: 0.9360\n" ] } ], "source": [ "model.compile(loss='binary_crossentropy',\n", " optimizer=optimizers.RMSprop(lr=1e-5),\n", " metrics=['acc'])\n", "\n", "history = model.fit_generator(\n", " train_generator,\n", " steps_per_epoch=100,\n", " epochs=100,\n", " validation_data=validation_generator,\n", " validation_steps=50)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "model.save('cats_and_dogs_small_4.h5')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "이전과 동일한 코드로 결과 그래프를 그려 보겠습니다:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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o7ft27fzxS9+kfvvv58dO3YAsGnTppynOx0FF70D6tefO1et/OAD6tYN3n8/Pt9YPWwaRqEyblzTtD2pqKhgwIABDBw4kIMPPpjjGyAW+pprruHiiy9mxIhB9OlTwSGHDKR9+9piUV5eziWXXMLAgQPp06cPwwNdbE6ePJkrrriCCRMmsN9++/Hkk09y5plnMm/ePIYOHUrLli0566yz+OlPf5rztKfEhz/ly3Tssce6+vLznzsHzo0aVXv5+PHOde8en3/xRd3uzTfrfUrDKAgWL17c1EnIG3bv3u127Njhdu1y7sknl7oDD+zr5szZ3dTJcs4lfk7ATBdBYwvW0ofa/nxQS7+qSitvS0vNvWMYRnK2bt3KKaecQk1NDdu3O66//l7226/5S2bzv4IEeNH3kTue7t21KfWmTRrCae4dwzCS0bFjR2bNmoVzMGuWLmvuDbOgAFjQmV4AAAsVSURBVCtyQQdTufRSHZszSLiBlkXvGIaRDpF4BE9z74IBCtTSF4H776+7PCj6Rx2l7p3S0rphZ4ZhGEF8/ztm6TczEln6HTrY0IWGYaSmkCx9E33z5xuGkQYv9mbpNzM6d9aH5kV/82bz5xtGPjF69Og6Da1+85vf8N///d8p92vbti0Aa9as4YILLkh67JkzZ6Y8zm9+8xu2B3qRO/3009m8efM+sTfRb2aUlGjUzv33w6hR8MYbZukbRj4xduxYHnvssVrLHnvsMcaOHRtp/wMPPJAnnngi6/OHRf+FF16gY8eOBeXeKciK3FR85zswdar+P+44uPjipk2PYeQr3/uetmzPJUOGQKxH44RccMEF3HjjjXz22We0atWKlStXsmbNGkaNGsXWrVs555xzqK6uZvfu3dx6662cc845tfZfuXIlZ555JgsXLmTHjh1885vfZPHixRx55JH7uj4AuOqqq3jnnXfYsWMHF1xwAT/5yU+4++67WbNmDSeffDJdunRh2rRp9O3bl5kzZ1Ja2oXJk3/Fiy8+QIsWcPnll/O9732PlStXctpppzFq1CjefPNNevbsybPPPruvQzXP888/z6233squXbsoLy9n8uTJdO/ena1bt3LNNdcwc+ZMRISbbrqJ888/n5deeokbbriBPXv20KVLF6ZMmZKzZ1B0on/DDToZhpF/lJeXM2zYMF566SXOOeccHnvsMb761a8iIrRu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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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6dWrFxdddBE7A385119//YF0wb/5jc4lPm7cONauXcugQYMYNGgQAJ06deK7774D4JFHHiE/P5/8/PwD6YJXrFhB9+7dufbaa+nRowenn356ifPEY+7cuRx33HH06tWL8847j02bNh04f15eHr169TqQsOyf//zngclKjj76aLZu3Vrue2sY1Z1cE/dqG+f+i19AuicY6tMHIroYl5YtW9KvXz/efvtthg0bxpQpU7jooosQEerXr8+rr75KkyZN+O677zjuuOMYOnRownlEn3zySRo0aMC8efOYN29eiZS9Y8eOpUWLFuzbt49TTz2VefPmcfPNN/PII48wY8YMWrVqVeJYc+bMYeLEiXzyySc45+jfvz8DBgygefPmLF68mBdeeIE//vGPXHjhhbzyyitJ87NffvnlPPHEEwwYMIDRo0dz33338dhjj/HAAw+wfPlyDjrooAOuoIcffpjx48dz4oknsm3bNurXr5/C3TaM7CLXxN0s9xiCrpmgS8Y5x1133UWvXr0YPHgwa9asYf369QmP88EHHxwQ2V69etGrV68Dv7300kv07duXo48+mvnz55eZFOyjjz7ivPPOo2HDhjRq1Ijzzz+fDz/8EIDOnTvTp08fIHlaYdD88ps3b2bAgAEAXHHFFXzwwQcH6njJJZcwadKkAyNhTzzxRG699VbGjRvH5s2bbYSskdPkmrhX2//WZBZ2ZXLuuedy66238umnn7Jz584DFvfkyZMpKipizpw51K1bl06dOsVN8xsknlW/fPlyHn74YWbNmkXz5s258soryzxOsvw/Pl0waMrgstwyifjb3/7GBx98wNSpU/ntb3/L/PnzGTVqFGeddRZvvvkmxx13HH//+9/p1q1buY5vGNUdL+h16uSGuJvlHkOjRo0YOHAgV199dYmO1C1btnDIIYdQt25dZsyYwcqVK5Me5+STTz4wCfaXX37JvHnzAE0X3LBhQ5o2bcr69et56623DuzTuHHjuH7tk08+mddee40dO3awfft2Xn31VX74wx+mfG1NmzalefPmB6z+559/ngEDBrB//35Wr17NoEGDePDBB9m8eTPbtm1j6dKl9OzZkzvuuIOCggK++uqrlM9pGNmCt4tatMgNca+2lnsmGTFiBOeff36JyJlLLrmEc845h4KCAvr06VOmBXv99ddz1VVX0atXL/r06UO/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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "acc = history.history['acc']\n", "val_acc = history.history['val_acc']\n", "loss = history.history['loss']\n", "val_loss = history.history['val_loss']\n", "\n", "epochs = range(len(acc))\n", "\n", "plt.plot(epochs, acc, 'bo', label='Training acc')\n", "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n", "plt.title('Training and validation accuracy')\n", "plt.legend()\n", "\n", "plt.figure()\n", "\n", "plt.plot(epochs, loss, 'bo', label='Training loss')\n", "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n", "plt.title('Training and validation loss')\n", "plt.legend()\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "그래프가 불규칙하게 보입니다. 그래프를 보기 쉽게하기 위해 지수 이동 평균으로 정확도와 손실 값을 부드럽게 표현할 수 있습니다. 다음은 지수 이동 평균을 구하기 위한 간단한 함수입니다:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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P/ccfPyx61c/cKCbvmiRa+3femvwNE9enruB+Q03QHr64fONqa6ScWjlqiznzTffZPz48UHL+bpghpKfn8/TTz9d+jrcoZoTTVIFfYBhw1zAf+45l+Z56y03jPFf/gIrV8JTTx3+npdegqIi8K5eNyYhJOvQylUxaNAgRo8+7D5PYQkM+uEO1Zxoki7oAzz2mMvNv/EGnH66m3bBBe6K2rFj3Yldf1OmuJubBBk91Ziw3H479O0b2cftt5e9zmQcWhng9NNPZ/ny5aWv+/bty+LFi/niiy/o2bMnp556Kj179mTVqlWHvdf/18e6devo0aMHXbt25b777istE2pI5NGjR/Ptt9/SuXNn7rjjjkOGat67dy/XXXcdWVlZnHrqqSzweoyUNYSzv4ceeoiuXbvSoUMHRo4cWTq+z9q1a+nfvz+dOnWiS5cupUNUPProo2RlZdGpU6dKH8RCCmcozlg+ojm08qpVqrVqqQ4dqlpS4qZ99ZUNlWwqx39429tuU+3TJ7KP224re/3JOrTy448/rvfff7+qqm7evFnbtGmjqqo7duzQAwcOqKrqe++9p5dccomq6iH18h+W+cILL9SpU6eqqupTTz2lDRo0UNXQQyL7D82seuhQzRMmTNARI0aoqurKlSu1efPmumfPnjKHcPbnG15ZVfWqq67SN998U1VVu3Xrpq+99pqqqu7Zs0d3796t8+bN0x49euju3bsPe69PtIdWThonn+y6Zd57LwwYANdf73rs1Krlev0YU1l/+Uvs15msQysPGTKEc845hwcffJA5c+Zw+eWXA26As2uvvZY1a9YgIhwopx/2J598wquvvgrA1VdfzV133QWEHhK5LB9//DG//e1vAWjbti2ZmZmlQzqHM4TzggULePTRRyksLGT79u20b9+evn37smnTJgYPHgxQOlro+++/z3XXXUd974pQ39DMkZJSQR9g9Gh3j9pRo1xKZ+ZMd49bO4FrElEyDq3crFkz0tPTWbp0KbNnz+bZZ58F4L777uOss87iH//4B7m5ufTt27fcZQVbX6ghkctS1mdS3hDOe/fu5ZZbbiEnJ4fmzZszduzY0iGYQ60rmkMzJ2VOvyxpaW48/IYNXd40L89O4JrElKxDKwNcccUVPProo+zYsYOsrCzAtfSbNXN3ag1nLJxevXqVDos80+9mxKGGRC5r+848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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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e/2/TaxZs4YOHTrQpk0bHn744dxt9uzZw3nnnUerVq1ISEhgxowZucf322+/kZSUxD333HPEEMIFDelb2NDCBZkyZQoJCQk0b96c++67D4CsrCwGDhyY+zvP+f2OGjUq9w7kPn36FLlvEx0OHoTNm/OvuYctL3c6BeNR1B2qt92mes45gX3cdlvhd35F6pC/zz//vA4bNkxVVTdu3KhNmjRRVdWdO3fqoUOHVFX1s88+08svv1xV9Yhy+Q8XfOmll+r48eNVVXX06NFarVo1VVU9dOiQ7ty5U1VVMzIy9NRTT9Xs7OwjhvBV9Takb2FDC/s755xzNCUlRTds2KD169fXrVu36qFDh7Rr16763nvvaWpqqnbr1i13+z/++ENVVevUqaMHDhw4Ylledodq9Fm92t19+vrroS5J0bA7VIsvUof8veqqq3j77bcBeOutt+jduzfgBgzr3bs3zZs354477jiidp+fb7/9lr59+wLkDscLroLwwAMPkJiYSLdu3diwYQNbtmwpdF8FDelb0O+gICkpKXTp0oXatWtTsWJF+vXrx5w5c2jcuDGrV6/mH//4B5988gnHHnssAImJifTr14+JEydSsaJ1FjNOft0gw125/evOueW3rOUM+dulSxcSEhIYP348AwcOBEI/5G/eUR8XLlzoacjfunXrUrNmTRYtWsS0adN49dVXAXj44Yfp2rUr7733HmlpaXTJ6e9ViPw+b9KkSWRkZDB//nxiY2Np1KgRBwoaM9WnsN+Jl6GFi9pPjRo1+Pnnn/n0008ZM2YMb731Fm+88QYfffQRc+bMYebMmTzxxBMsXrzYgryJyOBuNXc/kTrkL0CfPn0YOXIkO3fuJCEhAXA197p16wIc8Q2lIJ06dcodrneS33yGO3fu5MQTTyQ2NpbZs2fn1rQLO76ChvQtrnbt2vH111+zbds2srKymDJlCueccw7btm0jOzubK664gieeeIIFCxaQnZ3N+vXr6dq1KyNHjmTHjh25bRcmuuXcnRp1wV1EuovIchFZJSIFdp0QkStFREUkOXBFLDuROuQvwJVXXsnUqVO56qqrcpfde++93H///XTq1MnTGO4vvvgiY8aMoU2bNuzcuTN3eb9+/UhNTSU5OZlJkybRtGlTAGrWrEmnTp1o3rw599xzzxH7KmhI3+KqU6cOI0aMoGvXrrRo0YJW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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def smooth_curve(points, factor=0.8):\n", " smoothed_points = []\n", " for point in points:\n", " if smoothed_points:\n", " previous = smoothed_points[-1]\n", " smoothed_points.append(previous * factor + point * (1 - factor))\n", " else:\n", " smoothed_points.append(point)\n", " return smoothed_points\n", "\n", "plt.plot(epochs,\n", " smooth_curve(acc), 'bo', label='Smoothed training acc')\n", "plt.plot(epochs,\n", " smooth_curve(val_acc), 'b', label='Smoothed validation acc')\n", "plt.title('Training and validation accuracy')\n", "plt.legend()\n", "\n", "plt.figure()\n", "\n", "plt.plot(epochs,\n", " smooth_curve(loss), 'bo', label='Smoothed training loss')\n", "plt.plot(epochs,\n", " smooth_curve(val_loss), 'b', label='Smoothed validation loss')\n", "plt.title('Training and validation loss')\n", "plt.legend()\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "검증 정확도 곡선이 훨씬 깨끗하게 보입니다. 정확도가 확실히 1% 이상 향상되었습니다.\n", "\n", "손실 곡선은 실제 어떤 향상을 얻지 못했습니다(사실 악화되었습니다). 손실히 감소되지 않았는데 어떻게 정확도가 안정되거나 향상될 수 있을까요? 답은 간단합니다. 그래프는 개별적인 손실 값의 평균을 그린 것입니다. 하지만 정확도에 영향을 미치는 것은 손실 값의 분포이지 평균이 아닙니다. 정확도는 모델이 예측한 클래스 확률이 어떤 임계값을 넘었는지에 대한 결과이기 때문입니다. 모델이 더 향상더라도 평균 손실에 반영되지 않을 수 있습니다.\n", "\n", "이제 마지막으로 테스트 데이터에서 이 모델을 평가하겠습니다:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 1000 images belonging to 2 classes.\n", "test acc: 0.9409999907016754\n" ] } ], "source": [ "test_generator = test_datagen.flow_from_directory(\n", " test_dir,\n", " target_size=(150, 150),\n", " batch_size=20,\n", " class_mode='binary')\n", "\n", "test_loss, test_acc = model.evaluate_generator(test_generator, steps=50)\n", "print('test acc:', test_acc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "92%의 테스트 정확도를 얻을 것입니다. 이 데이터셋을 사용한 원래 캐글 경연 대회에서 꽤 높은 순위입니다. 하지만 최신 딥러닝 기법으로 훈련 데이터의 일부분(약 10%)만을 사용해서 이런 결과를 달성했습니다. 20,000개의 샘플에서 훈련하는 것과 2,000개의 샘플에서 훈련하는 것 사이에는 아주 큰 차이점이 있습니다!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 정리\n", "\n", "다음은 앞의 두 절에 있는 예제로부터 배운 것들입니다.\n", "\n", "* 컨브넷은 컴퓨터 비전 작업에 가장 뛰어난 머신 러닝 모델입니다. 아주 작은 데이터셋에서도 처음부터 훈련해서 괜찮은 성능을 낼 수 있습니다.\n", "* 작은 데이터셋에서는 과대적합이 큰 문제입니다. 데이터 증식은 이미지 데이터를 다룰 때 과대적합을 막을 수 있는 강력한 방법입니다.\n", "* 특성 추출 방식으로 새로운 데이터셋에 기존의 컨브넷을 쉽게 재사용할 수 있습니다. 작은 이미지 데이터셋으로 작업할 때 효과적인 기법입니다.\n", "* 특성 추출을 보완하기 위해 미세 조정을 사용할 수 있습니다. 미세 조정은 기존 모델에서 사전에 학습한 표현의 일부를 새로운 문제에 적응시킵니다. 이 기법은 조금 더 성능을 끌어올립니다.\n", "\n", "지금까지 이미지 분류 문제에서 특히 작은 데이터셋을 다루기 위한 좋은 도구들을 배웠습니다." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.6" } }, "nbformat": 4, "nbformat_minor": 2 }