{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "h4fjveID2nie" }, "source": [ "# 7장. 여러 개를 분류합니다" ] }, { "cell_type": "markdown", "metadata": { "id": "hamhQ0ZL2nig" }, "source": [ "이 노트북을 주피터 노트북 뷰어(nbviewer.jupyter.org)로 보거나 구글 코랩(colab.research.google.com)에서 실행할 수 있습니다.\n", "\n", "\n", " \n", " \n", "
\n", " 주피터 노트북 뷰어로 보기\n", " \n", " 구글 코랩(Colab)에서 실행하기\n", "
" ] }, { "cell_type": "markdown", "metadata": { "id": "aFdWY0sa2nig" }, "source": [ "이 노트북을 실행하려면 텐서플로 2.0.0-alpha0 버전 이상이 필요합니다." ] }, { "cell_type": "markdown", "metadata": { "id": "OBG8uzkf2nih" }, "source": [ "## 07-1 다중 분류 신경망을 만듭니다" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "id": "1YhFRgV02nih" }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "id": "WwDJQdgj2nih" }, "outputs": [], "source": [ "class MultiClassNetwork:\n", " \n", " def __init__(self, units=10, batch_size=32, learning_rate=0.1, l1=0, l2=0):\n", " self.units = units # 은닉층의 뉴런 개수\n", " self.batch_size = batch_size # 배치 크기\n", " self.w1 = None # 은닉층의 가중치\n", " self.b1 = None # 은닉층의 절편\n", " self.w2 = None # 출력층의 가중치\n", " self.b2 = None # 출력층의 절편\n", " self.a1 = None # 은닉층의 활성화 출력\n", " self.losses = [] # 훈련 손실\n", " self.val_losses = [] # 검증 손실\n", " self.lr = learning_rate # 학습률\n", " self.l1 = l1 # L1 손실 하이퍼파라미터\n", " self.l2 = l2 # L2 손실 하이퍼파라미터\n", "\n", " def forpass(self, x):\n", " z1 = np.dot(x, self.w1) + self.b1 # 첫 번째 층의 선형 식을 계산합니다\n", " self.a1 = self.sigmoid(z1) # 활성화 함수를 적용합니다\n", " z2 = np.dot(self.a1, self.w2) + self.b2 # 두 번째 층의 선형 식을 계산합니다.\n", " return z2\n", "\n", " def backprop(self, x, err):\n", " m = len(x) # 샘플 개수\n", " # 출력층의 가중치와 절편에 대한 그래디언트를 계산합니다.\n", " w2_grad = np.dot(self.a1.T, err) / m\n", " b2_grad = np.sum(err) / m\n", " # 시그모이드 함수까지 그래디언트를 계산합니다.\n", " err_to_hidden = np.dot(err, self.w2.T) * self.a1 * (1 - self.a1)\n", " # 은닉층의 가중치와 절편에 대한 그래디언트를 계산합니다.\n", " w1_grad = np.dot(x.T, err_to_hidden) / m\n", " b1_grad = np.sum(err_to_hidden, axis=0) / m\n", " return w1_grad, b1_grad, w2_grad, b2_grad\n", " \n", " def sigmoid(self, z):\n", " z = np.clip(z, -100, None) # 안전한 np.exp() 계산을 위해\n", " a = 1 / (1 + np.exp(-z)) # 시그모이드 계산\n", " return a\n", " \n", " def softmax(self, z):\n", " # 소프트맥스 함수\n", " z = np.clip(z, -100, None) # 안전한 np.exp() 계산을 위해\n", " exp_z = np.exp(z)\n", " return exp_z / np.sum(exp_z, axis=1).reshape(-1, 1)\n", " \n", " def init_weights(self, n_features, n_classes):\n", " self.w1 = np.random.normal(0, 1, \n", " (n_features, self.units)) # (특성 개수, 은닉층의 크기)\n", " self.b1 = np.zeros(self.units) # 은닉층의 크기\n", " self.w2 = np.random.normal(0, 1, \n", " (self.units, n_classes)) # (은닉층의 크기, 클래스 개수)\n", " self.b2 = np.zeros(n_classes)\n", " \n", " def fit(self, x, y, epochs=100, x_val=None, y_val=None):\n", " np.random.seed(42)\n", " self.init_weights(x.shape[1], y.shape[1]) # 은닉층과 출력층의 가중치를 초기화합니다.\n", " # epochs만큼 반복합니다.\n", " for i in range(epochs):\n", " loss = 0\n", " print('.', end='')\n", " # 제너레이터 함수에서 반환한 미니배치를 순환합니다.\n", " for x_batch, y_batch in self.gen_batch(x, y):\n", " a = self.training(x_batch, y_batch)\n", " # 안전한 로그 계산을 위해 클리핑합니다.\n", " a = np.clip(a, 1e-10, 1-1e-10)\n", " # 로그 손실과 규제 손실을 더하여 리스트에 추가합니다.\n", " loss += np.sum(-y_batch*np.log(a))\n", " self.losses.append((loss + self.reg_loss()) / len(x))\n", " # 검증 세트에 대한 손실을 계산합니다.\n", " self.update_val_loss(x_val, y_val)\n", "\n", " # 미니배치 제너레이터 함수\n", " def gen_batch(self, x, y):\n", " length = len(x)\n", " bins = length // self.batch_size # 미니배치 횟수\n", " if length % self.batch_size:\n", " bins += 1 # 나누어 떨어지지 않을 때\n", " indexes = np.random.permutation(np.arange(len(x))) # 인덱스를 섞습니다.\n", " x = x[indexes]\n", " y = y[indexes]\n", " for i in range(bins):\n", " start = self.batch_size * i\n", " end = self.batch_size * (i + 1)\n", " yield x[start:end], y[start:end] # batch_size만큼 슬라이싱하여 반환합니다.\n", " \n", " def training(self, x, y):\n", " m = len(x) # 샘플 개수를 저장합니다.\n", " z = self.forpass(x) # 정방향 계산을 수행합니다.\n", " a = self.softmax(z) # 활성화 함수를 적용합니다.\n", " err = -(y - a) # 오차를 계산합니다.\n", " # 오차를 역전파하여 그래디언트를 계산합니다.\n", " w1_grad, b1_grad, w2_grad, b2_grad = self.backprop(x, err)\n", " # 그래디언트에서 페널티 항의 미분 값을 뺍니다\n", " w1_grad += (self.l1 * np.sign(self.w1) + self.l2 * self.w1) / m\n", " w2_grad += (self.l1 * np.sign(self.w2) + self.l2 * self.w2) / m\n", " # 은닉층의 가중치와 절편을 업데이트합니다.\n", " self.w1 -= self.lr * w1_grad\n", " self.b1 -= self.lr * b1_grad\n", " # 출력층의 가중치와 절편을 업데이트합니다.\n", " self.w2 -= self.lr * w2_grad\n", " self.b2 -= self.lr * b2_grad\n", " return a\n", " \n", " def predict(self, x):\n", " z = self.forpass(x) # 정방향 계산을 수행합니다.\n", " return np.argmax(z, axis=1) # 가장 큰 값의 인덱스를 반환합니다.\n", " \n", " def score(self, x, y):\n", " # 예측과 타깃 열 벡터를 비교하여 True의 비율을 반환합니다.\n", " return np.mean(self.predict(x) == np.argmax(y, axis=1))\n", "\n", " def reg_loss(self):\n", " # 은닉층과 출력층의 가중치에 규제를 적용합니다.\n", " return self.l1 * (np.sum(np.abs(self.w1)) + np.sum(np.abs(self.w2))) + \\\n", " self.l2 / 2 * (np.sum(self.w1**2) + np.sum(self.w2**2))\n", "\n", " def update_val_loss(self, x_val, y_val):\n", " z = self.forpass(x_val) # 정방향 계산을 수행합니다.\n", " a = self.softmax(z) # 활성화 함수를 적용합니다.\n", " a = np.clip(a, 1e-10, 1-1e-10) # 출력 값을 클리핑합니다.\n", " # 크로스 엔트로피 손실과 규제 손실을 더하여 리스트에 추가합니다.\n", " val_loss = np.sum(-y_val*np.log(a))\n", " self.val_losses.append((val_loss + self.reg_loss()) / len(y_val))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "yGvPEbtg2nik" }, "outputs": [], "source": [ "import tensorflow as tf" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 39 }, "id": "lKF2_Oju2nil", "outputId": "b6c09f7c-592b-4783-be47-1141c1b97376" }, "outputs": [ { "data": { "application/vnd.google.colaboratory.intrinsic+json": { "type": "string" }, "text/plain": [ "'2.6.0'" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tf.__version__" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "kj9KlaWJ2nin", "outputId": "6598d13e-c0c1-4464-dbb2-310a99988506" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz\n", "32768/29515 [=================================] - 0s 0us/step\n", "40960/29515 [=========================================] - 0s 0us/step\n", "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz\n", "26427392/26421880 [==============================] - 0s 0us/step\n", "26435584/26421880 [==============================] - 0s 0us/step\n", "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz\n", "16384/5148 [===============================================================================================] - 0s 0us/step\n", "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz\n", "4423680/4422102 [==============================] - 0s 0us/step\n", "4431872/4422102 [==============================] - 0s 0us/step\n" ] } ], "source": [ "(x_train_all, y_train_all), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "tY8wVGtS2nin", "outputId": "b09140e0-465c-482c-fcca-bbcc14908443", "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(60000, 28, 28) (60000,)\n" ] } ], "source": [ "print(x_train_all.shape, y_train_all.shape)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "id": "RTQ8zaLQ2nin" }, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 265 }, "id": "u38CFCP22nin", "outputId": "0d63c980-6615-488a-f41d-d0f94ba3b9a4" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.imshow(x_train_all[0], cmap='gray')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Q_Sqy2pT2nio", "outputId": "d39d7921-5640-4011-a49b-25f86cb1c081" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[9 0 0 3 0 2 7 2 5 5]\n" ] } ], "source": [ "print(y_train_all[:10])" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "id": "KjFO73xY2nio" }, "outputs": [], "source": [ "class_names = ['티셔츠/윗도리', '바지', '스웨터', '드레스', '코트', \n", " '샌들', '셔츠', '스니커즈', '가방', '앵클부츠']" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ncYT4j4R2nio", "outputId": "3dccae24-9acc-44ad-a3e0-cb0f566e5d46" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "앵클부츠\n" ] } ], "source": [ "print(class_names[y_train_all[0]])" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "zxKo0BdS2nip", "outputId": "25b4b40a-4781-4acf-e65e-0bdcc8e2605a" }, "outputs": [ { "data": { "text/plain": [ "array([6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.bincount(y_train_all)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "id": "ssVomiIc2nip" }, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "id": "gxlyqHTy2nip" }, "outputs": [], "source": [ "x_train, x_val, y_train, y_val = train_test_split(x_train_all, y_train_all, stratify=y_train_all, \n", " test_size=0.2, random_state=42)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "c9rwsDTo2nip", "outputId": "e585781c-7ad7-4bc4-d51a-8edd72be3da1" }, "outputs": [ { "data": { "text/plain": [ "array([4800, 4800, 4800, 4800, 4800, 4800, 4800, 4800, 4800, 4800])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.bincount(y_train)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "0Iu9eg9j2nip", "outputId": "073802b1-cecc-4c0f-8ffa-3c1ca06077ea", "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.bincount(y_val)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "id": "gduvaGYw2nip" }, "outputs": [], "source": [ "x_train = x_train / 255\n", "x_val = x_val / 255" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "id": "qNgTv0372niq" }, "outputs": [], "source": [ "x_train = x_train.reshape(-1, 784)\n", "x_val = x_val.reshape(-1, 784)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "mcshPA5u2niq", "outputId": "2c695662-b86a-4fe2-a535-57ff17b069dd", "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(48000, 784) (12000, 784)\n" ] } ], "source": [ "print(x_train.shape, x_val.shape)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "3l_3P0_b2niq", "outputId": "293560aa-cf1e-42fc-89d4-64471bbc8015" }, "outputs": [ { "data": { "text/plain": [ "array([[1, 0, 0],\n", " [0, 1, 0],\n", " [0, 0, 1],\n", " [0, 1, 0]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.preprocessing import LabelBinarizer\n", "lb = LabelBinarizer()\n", "lb.fit_transform([0, 1, 3, 1])" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "UgMyp-f32niq", "outputId": "9f814a03-c817-4b73-87e9-991e7b7b9b6c", "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[1., 0., 0., 0.],\n", " [0., 1., 0., 0.],\n", " [0., 0., 0., 1.]], dtype=float32)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tf.keras.utils.to_categorical([0, 1, 3])" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "id": "5osbZcji2niq" }, "outputs": [], "source": [ "y_train_encoded = tf.keras.utils.to_categorical(y_train)\n", "y_val_encoded = tf.keras.utils.to_categorical(y_val)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "i5yPvL-h2nir", "outputId": "85652507-f79b-416a-ee82-1a7bbaa19ddf", "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(48000, 10) (12000, 10)\n" ] } ], "source": [ "print(y_train_encoded.shape, y_val_encoded.shape)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "IgHQ7lb12nir", "outputId": "e1b23026-5748-4ad3-ef03-0e141f872962" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6 [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]\n" ] } ], "source": [ "print(y_train[0], y_train_encoded[0])" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "hv_0vXIV2nir", "outputId": "87372462-2a99-4dec-e64b-935bc1b23b23" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "........................................" ] } ], "source": [ "fc = MultiClassNetwork(units=100, batch_size=256)\n", "fc.fit(x_train, y_train_encoded, \n", " x_val=x_val, y_val=y_val_encoded, epochs=40)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 279 }, "id": "esQP6aSf2nir", "outputId": "35523a50-c22c-483c-c16c-054b54444955", "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEGCAYAAAB/+QKOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3de3xV5Zn3/8+1D8lOSALhfD4p4AlFRdFRUatFtFY71XqoWm1tmVptbZ/Wqe10qrXO7+f8Oj+fmT5aHeo4tpZarUp1WuuhnqgnFCwqKAIihyASCCHnnWQn1/PHWoEd3AkQstmB/X2/Xuu117rXWntdWZpc3Pe91n2buyMiIrKzSK4DEBGRvkkJQkREMlKCEBGRjJQgREQkIyUIERHJKJbrAHrT4MGDffz48bkOQ0Rkv7F48eIt7j4k074DKkGMHz+eRYsW5ToMEZH9hpmt7WqfmphERCQjJQgREclICUJERDI6oPogROTA09raSkVFBclkMteh7NcSiQSjR48mHo/v9jlKECLSp1VUVFBaWsr48eMxs1yHs19yd6qqqqioqGDChAm7fZ6amESkT0smkwwaNEjJYS+YGYMGDdrjWpgShIj0eUoOe68n91AJAvj5syt5ccXmXIchItKnKEEAcxes5sX3lSBERNIpQQCliRh1ydZchyEifdC2bdv4xS9+scfnnXPOOWzbtm2Pz7vqqqt4+OGH9/i8bFCCAMoScWqVIEQkg64SRCqV6va8J554ggEDBmQrrH1Cj7nSUYPo/j+2iOTeT/5nGe9+VNur33nYyDJu+uzhXe6/8cYb+eCDD5g2bRrxeJxEIkF5eTnLly9nxYoVfO5zn2P9+vUkk0muv/565syZA+wYG66+vp6zzz6bk08+mVdeeYVRo0bx2GOPUVRUtMvYnn32Wb73ve+RSqU47rjjuOuuuygsLOTGG2/k8ccfJxaLMWvWLP7t3/6N3//+9/zkJz8hGo3Sv39/FixYsNf3RgkCKCuKU1mnl3BE5JNuu+02li5dypIlS3jhhRf4zGc+w9KlS7e/T3DvvfcycOBAmpqaOO6447jgggsYNGhQp+9YuXIlDzzwAL/85S+56KKLeOSRR7j88su7vW4ymeSqq67i2WefZfLkyXzpS1/irrvu4oorrmD+/PksX74cM9vejHXLLbfw1FNPMWrUqB41bWWiBEFQg/hgs2oQIn1dd//S31eOP/74Ti+b/fznP2f+/PkArF+/npUrV34iQUyYMIFp06YBcOyxx7JmzZpdXuf9999nwoQJTJ48GYArr7ySO++8k+uuu45EIsHVV1/Nueeey7nnngvASSedxFVXXcVFF13E5z//+d74UbPXB2FmY8zseTN718yWmdn1GY65zMzeNrN3zOwVMzsqbd+asHyJmWV1DG81MYnI7urXr9/29RdeeIG//OUvvPrqq7z11lscffTRGV9GKyws3L4ejUZ32X/RnVgsxuuvv86FF17IH//4R2bPng3A3Xffza233sr69es59thjqaqq6vE1tl9rr7+hayngu+7+ppmVAovN7Bl3fzftmA+BU9292szOBuYCM9L2n+7uW7IYIxB2Uje14u56IUdEOiktLaWuri7jvpqaGsrLyykuLmb58uW89tprvXbdKVOmsGbNGlatWsXBBx/M/fffz6mnnkp9fT2NjY2cc845nHTSSUycOBGADz74gBkzZjBjxgz+/Oc/s379+k/UZPZU1hKEu28ENobrdWb2HjAKeDftmFfSTnkNGJ2teLpTmoiTaneSre0UFURzEYKI9FGDBg3ipJNO4ogjjqCoqIhhw4Zt3zd79mzuvvtuDj30UKZMmcIJJ5zQa9dNJBL893//N1/4whe2d1J//etfZ+vWrZx//vkkk0ncndtvvx2AG264gZUrV+LunHHGGRx11FG7uMKumbvv9Zfs8iJm44EFwBHunvERBDP7HnCIu3813P4QqAYc+E93n9vFeXOAOQBjx449du3aLidH6tK8hWv5p/lLWfjDMxhWltjj80Uke9577z0OPfTQXIdxQMh0L81ssbtPz3R81t+DMLMS4BHg290kh9OBq4HvpxWf7O7HAGcD15rZzEznuvtcd5/u7tOHDMk4reoulSaC4W/1spyIyA5ZfYrJzOIEyWGeuz/axTFHAvcAZ7v79l4Vd98Qflaa2XzgeIJaSK8rTQS3oVYd1SKyj1x77bW8/PLLncquv/56vvzlL+cook/KWoKwoLf3v4D33P32Lo4ZCzwKXOHuK9LK+wGRsO+iHzALuCVbsZaFNYjaJtUgRGTfuPPOO3Mdwi5lswZxEnAF8I6ZLQnLfgiMBXD3u4EfA4OAX4RPD6XCtrBhwPywLAb81t2fzFagZWENQo+6iojskM2nmF4Cun1mNOyQ/mqG8tXA3nfB76aOPgiNxyQisoMG6wPKilSDEBHZmRIEUBSPEo2YnmISEUmjBEEwFV9ZIkZtk2oQIrJ3SkpKuty3Zs0ajjjiiH0Yzd5RggiVJuKqQYiIpNForqHSREzvQYj0dX++ET5+p3e/c/hUOPu2LnffeOONjBkzhmuvvRaAm2++mVgsxvPPP091dTWtra3ceuutnH/++Xt02WQyyTXXXMOiRYuIxWLcfvvtnH766Sxbtowvf/nLtLS00N7eziOPPMLIkSO56KKLqKiooK2tjX/+53/m4osv3qsfe3coQYTKVIMQkQwuvvhivv3tb29PEA899BBPPfUU3/rWtygrK2PLli2ccMIJnHfeeXs02Oedd96JmfHOO++wfPlyZs2axYoVK7j77ru5/vrrueyyy2hpaaGtrY0nnniCkSNH8qc//QkIBgncF5QgQqWJGOu2NuY6DBHpTjf/0s+Wo48+msrKSj766CM2b95MeXk5w4cP5zvf+Q4LFiwgEomwYcMGNm3axPDhw3f7e1966SW++c1vAnDIIYcwbtw4VqxYwYknnsi//Mu/UFFRwec//3kmTZrE1KlT+e53v8v3v/99zj33XE455ZRs/bidqA8iVFYU15vUIpLRF77wBR5++GEefPBBLr74YubNm8fmzZtZvHgxS5YsYdiwYRnngeiJL37xizz++OMUFRVxzjnn8NxzzzF58mTefPNNpk6dyo9+9CNuuSVrA0t0ohpESJMGiUhXLr74Yr72ta+xZcsWXnzxRR566CGGDh1KPB7n+eefpyejSJ9yyinMmzePT33qU6xYsYJ169YxZcoUVq9ezcSJE/nWt77FunXrePvttznkkEMYOHAgl19+OQMGDOCee+7Jwk/5SUoQodJEnLrmFG3tTjSiSYNEZIfDDz+curo6Ro0axYgRI7jsssv47Gc/y9SpU5k+fTqHHHLIHn/nN77xDa655hqmTp1KLBbjvvvuo7CwkIceeoj777+feDzO8OHD+eEPf8gbb7zBDTfcQCQSIR6Pc9ddd2Xhp/ykfTIfxL4yffp0X7SoZ7OT3vPX1dz6p/d466ZZ9C+K93JkItJTmg+i9/S5+SD2F2WaE0JEpBM1MYU6xmOqbUpBeY6DEZH92jvvvMMVV1zRqaywsJCFCxfmKKKeUYIIaVY5kb7L3ffoHYNcmzp1KkuWLNn1gftQT7oT1MQU0qxyIn1TIpGgqqqqR3/gJODuVFVVkUgk9ug81SBC6oMQ6ZtGjx5NRUUFmzdvznUo+7VEIsHo0aP36BwliFCpZpUT6ZPi8TgTJkzIdRh5SU1MoVLNSy0i0knWEoSZjTGz583sXTNbZmbXZzjGzOznZrbKzN42s2PS9l1pZivD5cpsxdmhIBYhEY9Q16wahIgIZLeJKQV8193fNLNSYLGZPePu76YdczYwKVxmAHcBM8xsIHATMB3w8NzH3b06i/FSmtB4TCIiHbJWg3D3je7+ZrheB7wHjNrpsPOBX3vgNWCAmY0AzgKecfetYVJ4BpidrVg7lGk8JhGR7fZJH4SZjQeOBnZ+S2QUsD5tuyIs66o803fPMbNFZrZob59yKE3EqdVTTCIiwD5IEGZWAjwCfNvda3v7+919rrtPd/fpQ4YM2avvKiuK6z0IEZFQVhOEmcUJksM8d380wyEbgDFp26PDsq7KsyoY8ls1CBERyO5TTAb8F/Ceu9/exWGPA18Kn2Y6Aahx943AU8AsMys3s3JgVliWVWWJWDAWk4iIZPUpppOAK4B3zKxjUJIfAmMB3P1u4AngHGAV0Ah8Ody31cx+CrwRnneLu2/NYqyA5qUWEUmXtQTh7i8B3Y6u5cHgKtd2se9e4N4shNal0kSM5lQ7zak2CmPRfXlpEZE+R29Sp9kxoquamURElCDSdMwJoQQhIqIE0UlpocZjEhHpoASRpqxITUwiIh2UINLsGPJbNQgRESWINDtmlVOCEBFRgkijJiYRkR2UINKUFMQwUye1iAgoQXQSiRglhTEN2CcighLEJwTDbShBiIgoQeykNBFTJ7WICEoQn6AB+0REAkoQOynVkN8iIoASxCeUFcWpa1YNQkRECWInwaxyqkGIiChB7KQjQQRTVYiI5C8liJ2UJeK0tTuNLW25DkVEJKeUIHbSMWmQHnUVkXyXtQRhZveaWaWZLe1i/w1mtiRclppZm5kNDPetMbN3wn2LshVjJpo0SEQkkM0axH3A7K52uvvP3H2au08DfgC86O5b0w45Pdw/PYsxfsKOaUdVgxCR/Ja1BOHuC4CtuzwwcCnwQLZi2RPbh/zWuxAikudy3gdhZsUENY1H0oodeNrMFpvZnF2cP8fMFpnZos2bN+91PGXqgxARAfpAggA+C7y8U/PSye5+DHA2cK2ZzezqZHef6+7T3X36kCFD9jqYsu2TBqkGISL5rS8kiEvYqXnJ3TeEn5XAfOD4fRWM+iBERAI5TRBm1h84FXgsrayfmZV2rAOzgIxPQmVDIh4hHjU9xSQieS+WrS82sweA04DBZlYB3ATEAdz97vCwvweedveGtFOHAfPNrCO+37r7k9mKM0PclCbimlVORPJe1hKEu1+6G8fcR/A4bHrZauCo7ES1e8o0HpOISJ/og+hzShNxPcUkInlPCSIDjegqIqIEkZFmlRMRUYLISLPKiYgoQWRUVqQahIiIEkQGpYkYDS1tpNracx2KiEjOKEFk0PE2dX2zmplEJH8pQWTQMR6TnmQSkXymBJFBRw2iRm9Ti0geU4LIQLPKiYgoQWSkOSFERJQgMipVH4SIiBJEJmWaE0JERAkikxLNSy0iogSRSTwaobggqhqEiOQ1JYgulCZi6qQWkbymBNGF0kRcndQikteUILqgWeVEJN9lLUGY2b1mVmlmS7vYf5qZ1ZjZknD5cdq+2Wb2vpmtMrMbsxVjdzSrnIjku2zWIO4DZu/imL+6+7RwuQXAzKLAncDZwGHApWZ2WBbjzCgY8ls1CBHJX1lLEO6+ANjag1OPB1a5+2p3bwF+B5zfq8HthmDSINUgRCR/5boP4kQze8vM/mxmh4dlo4D1acdUhGUZmdkcM1tkZos2b97ca4FpXmoRyXe5TBBvAuPc/Sjg/wB/6MmXuPtcd5/u7tOHDBnSa8GVJeK0tLWTbG3rte8UEdmf5CxBuHutu9eH608AcTMbDGwAxqQdOjos26c65oRQR7WI5KvdShBmdr2ZlVngv8zsTTObtTcXNrPhZmbh+vFhLFXAG8AkM5tgZgXAJcDje3OtnijdPh6TmplEJD/FdvO4r7j7f5jZWUA5cAVwP/B0VyeY2QPAacBgM6sAbgLiAO5+N3AhcI2ZpYAm4BJ3dyBlZtcBTwFR4F53X9aTH25vdMwJoY5qEclXu5sgLPw8B7jf3Zd1/Ou/K+5+6S723wHc0cW+J4AndjO2rFANQkTy3e72QSw2s6cJEsRTZlYKtGcvrNwrU4IQkTy3uzWIq4FpwGp3bzSzgcCXsxdW7pWqk1pE8tzu1iBOBN53921mdjnwI6Ame2Hl3o5Z5ZQgRCQ/7W6CuAtoNLOjgO8CHwC/zlpUfUC/ghgR06RBIpK/djdBpMInjM4H7nD3O4HS7IWVe5GIUVIYUw1CRPLW7vZB1JnZDwgebz3FzCKEj6weyDRgn4jks92tQVwMNBO8D/ExwdvNP8taVH2EhvwWkXy2WwkiTArzgP5mdi6QdPcDug8COqYdVQ1CRPLT7g61cRHwOvAF4CJgoZldmM3A+oKyRFxvUotI3trdPoh/Ao5z90oAMxsC/AV4OFuB9QWadlRE8tnu9kFEOpJDqGoPzt1vBZ3UqkGISH7a3RrEk2b2FPBAuH0xOR4raV8oTcSoa07R3u5EIt0OPSUicsDZrQTh7jeY2QXASWHRXHefn72w+obSRAx3aGhJbR+8T0QkX+xuDQJ3fwR4JIux9DkdA/bVJpUgRCT/dJsgzKwO8Ey7AHf3sqxE1UfsGPK7FSjKbTAiIvtYtwnC3Q/o4TQAaE3CQ1fAlLNh+lc67eqYNEhPMolIPjrgn0TapXgCqlbBik9OjtdRg9C7ECKSj5QgACbMhLUvQ1vnmsKOIb9VgxCR/JO1BGFm95pZpZkt7WL/ZWb2tpm9Y2avhEOJd+xbE5YvMbNF2Ypxu/GnQHMtfPxWp+IdndSqQYhI/slmDeI+YHY3+z8ETnX3qcBPgbk77T/d3ae5+/QsxbfDhJlhRAs6FasGISL5LGsJwt0XAFu72f+Ku1eHm68RjBCbGyVDYcihn0gQiXiUgmhENQgRyUt9pQ/iauDPadsOPG1mi81sTncnmtkcM1tkZos2b97c8wgmzIR1r0GqpVNxWVFMs8qJSF7KeYIws9MJEsT304pPdvdjgLOBa81sZlfnu/tcd5/u7tOHDBnS80AmnAKtjbBhcafi0oTGYxKR/JTTBGFmRwL3AOe7e1VHubtvCD8rgfnA8VkPZtxJgH2imalMc0KISJ7KWYIws7HAo8AV7r4irbyfmZV2rAOzgIxPQvWq4oEw4khY89dOxapBiEi+2u2xmPaUmT0AnAYMNrMK4CbCeazd/W7gx8Ag4BdmBpAKn1gaBswPy2LAb939yWzF2cn4U+D1udDaBPFgaI3SRIyPa5P75PIiIn1J1hKEu1+6i/1fBb6aoXw1cNQnz9gHJpwKr94B6xfCxNMAzSonIvkr553Ufcq4E8Gi8OGOZqZSzSonInlKCSJdYSmMOqZTR3VZUZym1jZa29pzGJiIyL6nBLGzCTODR12b6wC9TS0i+UsJYmcTZoK3BS/NsfOcECIi+UMJYmdjZkC0AD58EQjegwD0NrWI5B0liJ3Fi2D08dv7IVSDEJF8pQSRyYSZsPFtaNy6fVa5Gj3qKiJ5RgkikwmnAA5rX2HcoH4UxaO8uGIvBgIUEdkPKUFkMmo6xIrgwwWUFMY476iRPLbkIw37LSJ5RQkik1hB8NJc2A9x+QnjaGpt49HFFTkOTERk31GC6MqEmbD5PaivZOro/hw5uj/zFq7D3XMdmYjIPqEE0ZXx4RQU4eiul88Yx8rKel7/sMtJ8kREDihKEF0ZcRQUlm1vZvrsUSMpTcT4zcJ1OQ5MRGTfUILoSjQWTCIUDtxXVBDlgmNG8+TSjWypb85xcCIi2acE0Z0Jp8DWD6Am6Jy+/ISxtLY5Dy1an+PARESyTwmiOxPCfoiwFnHw0FJmTBjIbxeuo71dndUicmBTgujO0MOhaGCnaUgvP2EcFdVNvLhSL86JyIFNCaI7kQiMPznoqA4fbz3r8OEMLilg3mtrcxyciEh2ZTVBmNm9ZlZpZku72G9m9nMzW2Vmb5vZMWn7rjSzleFyZTbj7NaEmVCzHqo/BKAgFuGi6WN4bnklG7Y15SwsEZFsy3YN4j5gdjf7zwYmhcsc4C4AMxsI3ATMAI4HbjKz8qxG2pWDPhV8Lpy7vejS48fiwO9e1yOvInLgymqCcPcFQHdvlp0P/NoDrwEDzGwEcBbwjLtvdfdq4Bm6TzTZM+ggmH41LLwb1r4CwJiBxZw+ZSi/e2O9piIVkQNWrvsgRgHpz4xWhGVdlX+Cmc0xs0Vmtmjz5ix1HH/6FhgwBh67FloaAbhsxlg21zXzzLubsnNNEZEcy3WC2GvuPtfdp7v79CFDhmTnIoUlcP6dsHU1PHsLAKdNGcqoAUX8Rp3VInKAynWC2ACMSdseHZZ1VZ47E2bCcV/b3tQUjRiXHj+GVz6o4oPN9TkNTUQkG3KdIB4HvhQ+zXQCUOPuG4GngFlmVh52Ts8Ky3LrzJthwFj4wzegpYGLjhtDLGL8VuMzicgBKNuPuT4AvApMMbMKM7vazL5uZl8PD3kCWA2sAn4JfAPA3bcCPwXeCJdbwrLc6mhqqv4Qnr2FoaUJzjpiOA8vrqC+OZXr6EREepUdSPMbTJ8+3RctWpT9Cz1xA7w+F676E3+LHM4Fd73CmYcO4+7LjyUSsexfX0Skl5jZYnefnmlfrpuY9k9n3gzl4+Gxazl6eAH/9JnDePrdTfz7sytzHJiISO9RguiJgn5hU9Ma+MvNfOWk8Vx47Gh+/uxK/vzOxlxHJyLSK5Qgemr8yXD8P8Drc7E1L3Hr545g2pgB/K+H3uK9jbW5jk5EZK8pQeyNM2+C8gnw2LUkWmuYe8WxlBXF+NqvF7G1oSXX0YmI7BUliL1R0A/+/m6o+xh+dR5Dow3MvWI6lXXNfGPeYg3DISL7NSWIvTX2BLj0t1C1En71WY4amOJfL5jKa6u38tM/vpvr6EREekwJojccfCZc+rtgKI77zuXvJxUwZ+ZEfv3qWh7QiK8isp9SgugtB50OX3wQtq2F+87l+yeXM3PyEH782FLeWJP7d/xERPaUEkRvmngqXPZ7qKkg+qtzueMzwxldXszXfr2Iv2qKUhHZzyhB9LbxJ8PlD0PdRsoe/By/+cIYhpUm+NK9r3Pn86tobz9w3lwXkQObEkQ2jPs7uPxRqK9k1B8u4A9XjOO8o0bys6feZ879i6lpas11hCIiu6QEkS1jZ8AV86GxiqJfn82/H7WBm889lBfer+T8O15i+cd6mU5E+jYliGwacxxc+T+Q6I89eBlXrfsBj146isaWNj5358v84W+5neJCRKQ7ShDZNnIa/MMCmHUrrHmJIx+bxXPHvc4xo4r59oNLuOmxpbSk9EKdiPQ9ShD7QjQOf/dNuPZ1mDybklf+lXkt3+H/mVrJr15dy+fufJnXVlflOkoRkU6UIPal/qPgol/B5Y9iwBdXfpvXDvoVBQ0fccnc15jz60V8uKUh11GKiABKELlx8BnwjVfh9B8xfNOLzE9dy5/HPcDHq/7Gp29/kVv+5122NWqwPxHJLc0ol2vb1sEr/wfevB9STSwvPYGfVJ3JuwVHcv2Zk7n8hHEUxJTHRSQ7uptRLqsJwsxmA/8BRIF73P22nfb/b+D0cLMYGOruA8J9bcA74b517n7erq63XyaIDo1b4Y17YOF/QuMWPohP4faGs1hefhrXnTmFc6aOoDAWzXWUInKAyUmCMLMosAL4NFABvAFc6u4Zhzg1s28CR7v7V8Ltencv2ZNr7tcJokNrEyz5Lf7qHdjW1XwUGc69zWewIHE6Z804kstmjGN4/0SuoxSRA0SuEsSJwM3ufla4/QMAd/9/uzj+FeAmd38m3M7PBNGhvQ2W/wl/5Q6sYiFtRHi+bRqPtJ9G/NDZXH7SJI4bX46Z5TpSEdmP5SpBXAjMdvevhttXADPc/boMx44DXgNGu3tbWJYClgAp4DZ3/0MX15kDzAEYO3bssWvXrs3Gj5Nbm9+HJfNo+9sDRBsr2Uop81Mns7j8bGaecjqfOXIEpYl4rqMUkf3Q/pAgvk+QHL6ZVjbK3TeY2UTgOeAMd/+gu2seUDWITNpS8MGztL35G3j/CaKeYmn7eJ70E6kZdxbTpx/PGYcOo6QwlutIRWQ/0V2CyOZfkg3AmLTt0WFZJpcA16YXuPuG8HO1mb0AHA10myAOeNEYTD6L6OSzoHEr/s7vmfDGb/jelgeg4gFWrRvJPI6jeswsDj/uNM44bDjFBUoWItIz2axBxAg6qc8gSAxvAF9092U7HXcI8CQwwcNgzKwcaHT3ZjMbDLwKnN9VB3eHA74G0ZWaCtqXP0Hdkj9QsvE1orSxyQfwnE+natSnGH3EqZxwxMHq3BaRT8hJDcLdU2Z2HfAUwWOu97r7MjO7BVjk7o+Hh14C/M47Z6pDgf80s3aCl/lu21VyyGv9RxOZMYf+M+ZAUzXtK54mvvhRPl/xIoUb/wIbYf1TQ/hrwSRahx3JkMkzmDTtZBL9h+Y6chHpw/Si3IGstQlf9xqbVyyk7sNFlFQtY1jbR9t3b4kOpW7gVAoOOoVhUz9FbMQRENG7FiL5JGcvyu1rShC71lizhfeXvMzmFa8T2/QWk1qWMyYSTIfaYP2oLD+ayPiTGH7kGRSOOSYYaFBEDlhKENKlj2uSLH13KduWv0jxxoVMSb7NQZGNACQpZGPZVNpGHsfgQ09hwOS/g6LyHEcsIr1JCUJ2W01jK2+/v4LNy14gseFVxjW+wyGsJWrB/ycbC8ZRO/gYEhNPZMQRMykYOgUiGitKZH+lBCE91pxq4721G/lo2Su0rX2NQdVLOKxtOQMsGJY8SSFbisbTXD6JxIjDGDxxGoUjDoUB49SfIbIfUIKQXrWpppEVy/5G7cqXiWx+l/71q5ng6xlhW7cf02IF1PabQNugyRSPPISSUYdhgyfDoIMgXpTD6EUknRKEZJW7s2FbE++v3UDl6rdJfrSMwuoVjGxZx0H2EaNsC5Gwiaodo75oFKnygykcPoXioROx8nHQfwwMGAuJshz/NCL5JVdvUkueMDNGlxczunwSTJsEXABAVX0zKzbVs2BjJdXr36N10woSNR8wqn49BzV8yMQNr2DWeWKk5ngZrSVjiA4cS2LQGKx4MBQPDDrHiwdC8SAoGhisx4tBgxWKZI1qELJPuTtVDS2s2FTHqk11VH68gabNH9JevY5EwwZGeCWjbAujbTMjbCtl1tj1lxX2D5qsBk+CQQcHy+BJMPAgKCjedz+UyH5MTUyyX2hrdzbWNLGuqpE1VY2srWpg/ZZaqqs20VBdSWFrDeVWR7nVU04dBxXWMDn2MWPbN1Cequz0XV42ChswDkqHQekIKB3e+bNkGBSWqgYieU9NTFF5iwUAAA4zSURBVLJfiEY6mqqK+buDO+/rqHms29rIuqpG1lY1srC6kUeqG6mobqK6sYaxvpEJtpGJtpGJ1RsZV7uVYZG1DPYqEp78xPU8Xgwlw7DSEUEiKRne+bN4cNCkVTwI4hrHSvKPEoTsF8yMwSWFDC4p5Jixn3xZL9XWzqa6Ziq2NrJhWxPrtzbxRm0TH9ck+bi2mbqaagqaNjHMqhlKdfCZ2saI5hpG1dQw1NYysH0rCW/KeH0vKME6+kDSE8f2sp2WovJg9F2R/Zj+D5YDQiwaYdSAIkYN6PoR2mRrG5W1zXxcm+Tj2iSVtUn+VpPkybpmNtUk2VSXpLZmG/3bqhjKNsqtjoFWRzl1DGmvZ0RbI0Ma6xlo6+jvSylJ1VDQ3k0fSbwYCssg0T94OquwLPhM9A862vsNgX6Dw2VIsBQP0vAm0mcoQUjeSMSjjB1UzNhBXXdguzu1TSk+rk2ypb6ZzXXBsrG+mbfrdmxvqW+muqmFuLcwgPogkVgdAwk+h0QbGeLNDE41Ud6YpKypiRI+pp+vorCtnoKWGiKe6iLQAUEiKSgJlsISKOgHBaXBZ2EpFA0IaimZFr1nIr1ECUIkjZnRvzhO/+I4Uyjt9tj2dqc22UpVQwvVDS3bP7c2tlBV38KHDS1sqW+mqr6FqobgM9Xe8VCIU0YDg62WQdQyIl7PmIIGRsbrGRqto397kpLmJP2akxTVbSHRvo6C9iZiqQairfVYexfJBSASh1ghRAt2+iyEWEGQdPoNgZKhwdKv4zMsS/TXI8QCKEGI9FgkYgwoLmBAcQEM2fXx7k5NUytb6luobmxha8OOpbqhhY2NLbwbbm9raqW6oYXaZKZE4BTTzABrYGRhEyMLkwyPNzE01sigaCPlkUaKI20URdtIWIqEpSi0FAW0EqeVeLKBWPVarGEz1trQRbQWJImC4qDWEu8XrMc7tsN9Gcv7dbNeog7//YgShMg+YpaWUHZTqq2dmqZWqhtb2dbYwrbGVqobW6hpaqW2qZWacFnZ1MqiplZqk6nt+5pT7d1+dzxqDC1sY1yigdHxOkbG6hgarWWANVEaaabYmim2Foq9iUKaKUw1UdBSR6y2kmiqiUiqCWttDJKMd3+tTqKFYb9MuBQN2LFe0C+o8UQLgr6YSHzHerQgaD4rLAua3QpLg6Ug/Izt/n2V3aMEIdKHxaIRBpUUMqikcI/PTba2UZdMUZsMEkZtMrU9qXSU1yVbqW1KUZlsZVW4r745RV0yRWNL2y6vYQYlBVEGFMDgRIqB8VYGxVMMiLXQP9ZK/2gLpdEWSi1IOP1oop83UtReT2GqjsJUPfG6KqJVHxJpqcWa66G9FbprQutKRwKJFkIsETSrdSzRjvWdyrdvh5/ba0QZakbxos7JK339AG2OU4IQOUAl4lES8ShDSvc8uUDw4mJ9MkVd846kUZdspb65jfpkivrmzusNzW3UJltZ1Zyiob6N+uYUDS0p6pOptL6X7hXEIvQriNKvMEL/QiiNO6UFTmkMygraKIumKI8mKYsm6W9JSqyJfjRR7E0UtTdQ4C1BM5q3EPVWYu2tRNqbsVQztDRA01ZINUMq2fmztQnYi5eGowVBEooXBU1o8eIg6cSLd2zHi8LP4h3JJ33dMgyb35F4LAKxovA7wqXTdnFWmu6ymiDMbDbwHwRzUt/j7rfttP8q4GfAhrDoDne/J9x3JfCjsPxWd/9VNmMVkc6ikR0d9nvD3WlOtdPQnKKhOS1xNKfCshT1zW00Nqeob0nR1NJGQ3MbjS0pGlraqG5OUVHfRkNzisaWFPXNMZKtezaUSlE8SnFBkDCLC4KlqChKcUGMooIoxbFIkIxiLZRFWimNtNAv0kw/awmb2pIUeQsFkTYKrI0CUsTTlkh7C6RaoLUxSDqtjdAafjbXQX1lsN7SGH42gO+6hrbbigfDP37Qe98XylqCMLMocCfwaaACeMPMHnf3d3c69EF3v26ncwcCNwHTCdL64vDc6mzFKyLZYWbbazODSnrnO9vanYaWzgmmoTlILo2tbSRbggTT1NpOU0uKptY2Glvagv3hMU0tKSrrkp3Km1raaGlL70+JhUu/buOJR4OfMT0RFXUkoniURHHwWdSxHYtQHHNKI82URJopjrRSGDXisQiF0QgFMaMgahTGosF6BApppqC9hVh7Emtt6pyIsjT3SjZrEMcDq9x9NYCZ/Q44H9g5QWRyFvCMu28Nz30GmA08kKVYRWQ/Eo0YZYk4ZYnef6kw1dZOU2tbsHQkjnA9mVaeTLWT7NiXtr/j+I716obW7dsdx+3qAYLuRAwKYwUUxhMkYoMojEcYVprgoeN78SaEspkgRgHr07YrgBkZjrvAzGYCK4DvuPv6Ls4dlekiZjYHmAMwduzYXghbRPJZLBqhNBqhNAvJp0N7e9Ds1tQpaQSJo7m1nWSqjebW9qBs5+1UO8nWzp9F8f2vBrE7/gd4wN2bzewfgF8Bn9qTL3D3ucBcCEZz7f0QRUR6VyRiQXNTQd+eljebs81vAMakbY9mR2c0AO5e5e7N4eY9wLG7e66IiGRXNhPEG8AkM5tgZgXAJcDj6QeY2Yi0zfOA98L1p4BZZlZuZuXArLBMRET2kaw1Mbl7ysyuI/jDHgXudfdlZnYLsMjdHwe+ZWbnASlgK3BVeO5WM/spQZIBuKWjw1pERPYNzSgnIpLHuptRLptNTCIish9TghARkYyUIEREJCMlCBERyeiA6qQ2s83A2h6ePhjY0ovh9CbF1jOKrWcUW8/sr7GNc/eMU14dUAlib5jZoq568nNNsfWMYusZxdYzB2JsamISEZGMlCBERCQjJYgd5uY6gG4otp5RbD2j2HrmgItNfRAiIpKRahAiIpKREoSIiGSU9wnCzGab2ftmtsrMbsx1POnMbI2ZvWNmS8ws56MQmtm9ZlZpZkvTygaa2TNmtjL8LO9Dsd1sZhvC+7fEzM7JQVxjzOx5M3vXzJaZ2fVhec7vWzex9YX7ljCz183srTC2n4TlE8xsYfj7+mA4lUBfie0+M/sw7b5N29expcUYNbO/mdkfw+2e3Td3z9uFYBjyD4CJQAHwFnBYruNKi28NMDjXcaTFMxM4BliaVvb/ATeG6zcC/9qHYrsZ+F6O79kI4JhwvZRgat3D+sJ96ya2vnDfDCgJ1+PAQuAE4CHgkrD8buCaPhTbfcCFubxvaTH+L+C3wB/D7R7dt3yvQRwPrHL31e7eAvwOOD/HMfVZ7r6AYN6OdOcTTBVL+Pm5fRpUqIvYcs7dN7r7m+F6HcGkWKPoA/etm9hyzgP14WY8XJxgSuKHw/Jc3beuYusTzGw08BmCWToxM6OH9y3fE8QoYH3adgV95Bck5MDTZrbYzObkOpguDHP3jeH6x8CwXAaTwXVm9nbYBJWT5q8OZjYeOJrgX5x96r7tFBv0gfsWNpMsASqBZwhq+9vcPRUekrPf151jc/eO+/Yv4X3732ZWmIvYgH8H/hFoD7cH0cP7lu8Joq872d2PAc4GrjWzmbkOqDse1F/7zL+kgLuAg4BpwEbg/89VIGZWAjwCfNvda9P35fq+ZYitT9w3d29z92kEc9IfDxySizgy2Tk2MzsC+AFBjMcBA4Hv7+u4zOxcoNLdF/fG9+V7gtgAjEnbHh2W9QnuviH8rATmE/yS9DWbOuYWDz8rcxzPdu6+KfxFbgd+SY7un5nFCf4Az3P3R8PiPnHfMsXWV+5bB3ffBjwPnAgMMLOOqZJz/vuaFtvssMnO3b0Z+G9yc99OAs4zszUETeafAv6DHt63fE8QbwCTwh7+AuAS4PEcxwSAmfUzs9KOdWAWsLT7s3LiceDKcP1K4LEcxtJJxx/g0N+Tg/sXtv/+F/Ceu9+etivn962r2PrIfRtiZgPC9SLg0wR9JM8DF4aH5eq+ZYpteVrCN4I2/n1+39z9B+4+2t3HE/w9e87dL6On9y3Xve25XoBzCJ7e+AD4p1zHkxbXRIKnqt4ClvWF2IAHCJocWgnaMa8maN98FlgJ/AUY2Idiux94B3ib4A/yiBzEdTJB89HbwJJwOacv3LduYusL9+1I4G9hDEuBH4flE4HXgVXA74HCPhTbc+F9Wwr8hvBJp1wtwGnseIqpR/dNQ22IiEhG+d7EJCIiXVCCEBGRjJQgREQkIyUIERHJSAlCREQyUoIQycDMXgk/x5vZF3v5u3+Y6VoifY0ecxXphpmdRjCy6bl7cE7Md4x7k2l/vbuX9EZ8ItmkGoRIBmbWMVrnbcAp4fj+3wkHafuZmb0RDsr2D+Hxp5nZX83sceDdsOwP4UCLyzoGWzSz24Ci8PvmpV/LAj8zs6UWzANycdp3v2BmD5vZcjObF76tK5JVsV0fIpLXbiStBhH+oa9x9+PC0TpfNrOnw2OPAY5w9w/D7a+4+9ZwOIY3zOwRd7/RzK7zYKC3nX2eYIC8o4DB4TkLwn1HA4cDHwEvE4y581Lv/7giO6gGIbJnZgFfCod6XkgwZMakcN/rackB4Ftm9hbwGsGgkJPo3snAAx4MlLcJeJFgZNCO767wYAC9JcD4XvlpRLqhGoTInjHgm+7+VKfCoK+iYaftM4ET3b3RzF4AEntx3ea09Tb0uyv7gGoQIt2rI5iOs8NTwDXhMNmY2eRwtN2d9Qeqw+RwCMGUlB1aO87fyV+Bi8N+jiEE06i+3is/hUgP6F8hIt17G2gLm4ruIxhbfzzwZthRvJnM0zc+CXzdzN4D3idoZuowF3jbzN70YCjmDvMJ5jx4i2CU1X9094/DBCOyz+kxVxERyUhNTCIikpEShIiIZKQEISIiGSlBiIhIRkoQIiKSkRKEiIhkpAQhIiIZ/V+YMZEe8537DAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(fc.losses)\n", "plt.plot(fc.val_losses)\n", "plt.ylabel('loss')\n", "plt.xlabel('iteration')\n", "plt.legend(['train_loss', 'val_loss'])\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "NOzGo2pq2nir", "outputId": "15701f52-9f66-4af8-e384-12cb6d7f7317", "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "0.8150833333333334" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fc.score(x_val, y_val_encoded)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "gYZTz8tr2nir", "outputId": "827338c7-e886-4b49-bf82-15257b376b0a" }, "outputs": [ { "data": { "text/plain": [ "array([4, 6, 3, ..., 0, 6, 6])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.random.permutation(np.arange(12000)%10)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "vBkLG5iq2nir", "outputId": "3690d29b-4823-4bc9-de5d-293bce221d58", "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "0.10325" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(y_val == np.random.permutation(np.arange(12000)%10)) / 12000" ] }, { "cell_type": "markdown", "metadata": { "id": "d9YnWDuV2nis" }, "source": [ "## 07-2 텐서플로와 케라스를 소개합니다." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "id": "H2KtdO-J2nis" }, "outputs": [], "source": [ "from tensorflow.keras import Sequential\n", "from tensorflow.keras.layers import Dense" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "id": "GA7dLztS2nis" }, "outputs": [], "source": [ "model = Sequential()\n", "model.add(Dense(100, activation='sigmoid', input_shape=(784,)))\n", "model.add(Dense(10, activation='softmax'))" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "id": "_pJppZH62nis" }, "outputs": [], "source": [ "model.compile(optimizer='sgd', loss='categorical_crossentropy',\n", " metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_iSGRu7Q2nis", "outputId": "743082b2-7562-4e4b-b957-3dcee12831dd" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/40\n", "1500/1500 [==============================] - 7s 3ms/step - loss: 1.3560 - accuracy: 0.6576 - val_loss: 0.9579 - val_accuracy: 0.7210\n", "Epoch 2/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.8419 - accuracy: 0.7402 - val_loss: 0.7535 - val_accuracy: 0.7562\n", "Epoch 3/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.7128 - accuracy: 0.7647 - val_loss: 0.6663 - val_accuracy: 0.7745\n", "Epoch 4/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.6472 - accuracy: 0.7816 - val_loss: 0.6151 - val_accuracy: 0.7938\n", "Epoch 5/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.6047 - accuracy: 0.7940 - val_loss: 0.5774 - val_accuracy: 0.8018\n", "Epoch 6/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.5741 - accuracy: 0.8038 - val_loss: 0.5517 - val_accuracy: 0.8105\n", "Epoch 7/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.5511 - accuracy: 0.8104 - val_loss: 0.5309 - val_accuracy: 0.8168\n", "Epoch 8/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.5326 - accuracy: 0.8176 - val_loss: 0.5145 - val_accuracy: 0.8215\n", "Epoch 9/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.5178 - accuracy: 0.8213 - val_loss: 0.4999 - val_accuracy: 0.8264\n", "Epoch 10/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.5055 - accuracy: 0.8254 - val_loss: 0.4889 - val_accuracy: 0.8300\n", "Epoch 11/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4948 - accuracy: 0.8285 - val_loss: 0.4803 - val_accuracy: 0.8313\n", "Epoch 12/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4859 - accuracy: 0.8318 - val_loss: 0.4718 - val_accuracy: 0.8350\n", "Epoch 13/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.4781 - accuracy: 0.8335 - val_loss: 0.4642 - val_accuracy: 0.8380\n", "Epoch 14/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4710 - accuracy: 0.8371 - val_loss: 0.4568 - val_accuracy: 0.8394\n", "Epoch 15/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4645 - accuracy: 0.8372 - val_loss: 0.4514 - val_accuracy: 0.8403\n", "Epoch 16/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4588 - accuracy: 0.8405 - val_loss: 0.4482 - val_accuracy: 0.8427\n", "Epoch 17/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4536 - accuracy: 0.8420 - val_loss: 0.4415 - val_accuracy: 0.8437\n", "Epoch 18/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4486 - accuracy: 0.8429 - val_loss: 0.4370 - val_accuracy: 0.8455\n", "Epoch 19/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.4440 - accuracy: 0.8453 - val_loss: 0.4333 - val_accuracy: 0.8462\n", "Epoch 20/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4399 - accuracy: 0.8458 - val_loss: 0.4291 - val_accuracy: 0.8478\n", "Epoch 21/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.4359 - accuracy: 0.8482 - val_loss: 0.4257 - val_accuracy: 0.8514\n", "Epoch 22/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4322 - accuracy: 0.8485 - val_loss: 0.4218 - val_accuracy: 0.8511\n", "Epoch 23/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.4289 - accuracy: 0.8505 - val_loss: 0.4211 - val_accuracy: 0.8526\n", "Epoch 24/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4257 - accuracy: 0.8511 - val_loss: 0.4169 - val_accuracy: 0.8537\n", "Epoch 25/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4224 - accuracy: 0.8522 - val_loss: 0.4151 - val_accuracy: 0.8543\n", "Epoch 26/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.4196 - accuracy: 0.8532 - val_loss: 0.4116 - val_accuracy: 0.8561\n", "Epoch 27/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4166 - accuracy: 0.8543 - val_loss: 0.4083 - val_accuracy: 0.8568\n", "Epoch 28/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4137 - accuracy: 0.8544 - val_loss: 0.4067 - val_accuracy: 0.8584\n", "Epoch 29/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.4115 - accuracy: 0.8557 - val_loss: 0.4051 - val_accuracy: 0.8593\n", "Epoch 30/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4090 - accuracy: 0.8571 - val_loss: 0.4021 - val_accuracy: 0.8583\n", "Epoch 31/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.4065 - accuracy: 0.8576 - val_loss: 0.4005 - val_accuracy: 0.8602\n", "Epoch 32/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4042 - accuracy: 0.8585 - val_loss: 0.3994 - val_accuracy: 0.8603\n", "Epoch 33/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.4021 - accuracy: 0.8579 - val_loss: 0.3973 - val_accuracy: 0.8613\n", "Epoch 34/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3999 - accuracy: 0.8590 - val_loss: 0.3959 - val_accuracy: 0.8610\n", "Epoch 35/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3980 - accuracy: 0.8602 - val_loss: 0.3953 - val_accuracy: 0.8609\n", "Epoch 36/40\n", "1500/1500 [==============================] - 4s 3ms/step - loss: 0.3960 - accuracy: 0.8602 - val_loss: 0.3920 - val_accuracy: 0.8627\n", "Epoch 37/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3940 - accuracy: 0.8607 - val_loss: 0.3927 - val_accuracy: 0.8612\n", "Epoch 38/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3921 - accuracy: 0.8617 - val_loss: 0.3911 - val_accuracy: 0.8624\n", "Epoch 39/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3903 - accuracy: 0.8619 - val_loss: 0.3880 - val_accuracy: 0.8635\n", "Epoch 40/40\n", "1500/1500 [==============================] - 5s 3ms/step - loss: 0.3886 - accuracy: 0.8624 - val_loss: 0.3865 - val_accuracy: 0.8630\n" ] } ], "source": [ "history = model.fit(x_train, y_train_encoded, epochs=40, \n", " validation_data=(x_val, y_val_encoded))" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "9FXS_8Eo2nis", "outputId": "b7a0b363-764d-404b-df7b-168be3b64f67" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])\n" ] } ], "source": [ "print(history.history.keys())" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 282 }, "id": "XXdBzNv52nis", "outputId": "5aac9f10-02df-467c-ceb0-6fe53ba5bf46", "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(history.history['loss'])\n", "plt.plot(history.history['val_loss'])\n", "plt.ylabel('loss')\n", "plt.xlabel('epoch')\n", "plt.legend(['train_loss', 'val_loss'])\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 279 }, "id": "AyiRZ5p62nis", "outputId": "a624bf88-aa81-412b-c29c-79c7feebbe30", "scrolled": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEGCAYAAAB/+QKOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dd3ic1ZX48e/RqPdquUi23Itsy0UuYLqBOECAkBhTAyRAQoANkGRDAhu8JLvLL3XJhrABQuh4KQk44FAc25TgJmPjhhtuki1LsnqXRnN+f7yj8chIZmxrPCrn8zzzzLx1jl5b79G99733iqpijDHGHC0s1AEYY4zpmSxBGGOM6ZQlCGOMMZ2yBGGMMaZTliCMMcZ0KjzUAXSX9PR0zcnJCXUYxhjTq6xbt+6wqmZ0tq3PJIicnBwKCgpCHYYxxvQqIrKvq21WxWSMMaZTliCMMcZ0yhKEMcaYTlmCMMYY0ylLEMYYYzplCcIYY0ynLEEYY4zpVJ/pB2GMMX2Guxmq9kPlXufVWAlRiRCdCNFJzivK/3MChLm6PQxLEMYYcyJaG6H4EygqgIPrISoeMifCwMmQOcG5aX/R8eW74PBOKP/sSDKo3As1B4DA5+qpSs4l+a6PTuKH6ZwlCGNM36QKDRVQtQ+qC6GuFMKjICIWIuMgIgYivO+RsRAeDeICCXP+GhfpuFxd5CSDorVwoABKtoDH7XxX4hBoqYN1Tx35/pThMHCS80ofg9aX0XRoO+6S7bgqdxHTUIz4JYHDkkpx2EAOymiKws+gUDPYp5ns9QygxB1LhLuBRKknkQYSpcH77iwnuNO5KwiX0BKEMabna651/kpvrIS2VufG3Nbi97kV3E1Qc9BJBlX7nVdrQ7eH4g6PozplElWjv0V12mSq0/Jojc6godlNa8V+Isu3klC1jbS6HQzcuY7MTxcDIIBHo9irg9itOXzmOZ0DriHUJ46gNWk4EhlHhEuIcIUR7hIiwsIY7BKGucKICg8jMSaCxJgIkmIiSIwOd95jIkiMjiAxJji3cksQxpjg8HigvhSqD0BNkfPuboKkbEjOdt4TBn6+7lwVKvdA4VooXA2Fa6B0C6jni78zJsU5b9ooGHkeJA/1ft9QiM90kkprg/NqaYDWRrSljtraGg5X1VBR10R5bSOV9U1U1TVRWd+MetyEoVSQwHrPaD5rGoynLgwK2790v/fVbhAJUdkkxV5EclIEmVGtjHaVEJ0yiMSMoQxJjWVkcgxnp8SQFBOBiHTP9Q4CSxDGmJNTfxiKN0DxRijdeiQh1BSDp/XYx4ZFQNIQ7418KDRVOUmhvszZHpkAWflw1g8hayYkDKQFF4cblJI6N8X1bRTXujlQ46a4TomKjiElLpKU2EhS4iJJjY0kJSKCFCKJbnZRVNnAvnIP+8rb2Ffexv6KNvaVR9PYGgGkARDhEoalxZEzKI7h6bEMT48nJz2W1LhIwMlf6q0ZUtT3OTbSRXJsJInR4YS7+sYDopYgjDGBaWuF2mI4tNlpnD200XmvOXBkn/a/1rNnOzf+xCGQlAWJgyExCyKinbr89iqgqv1oVSEt5XvR4rdpCYvhYMJM9g6YyGdRE9hNNjUtSt1ON3Wb3ZTWHqK0ttl3U26XHBtBZkI0ja1VVNa3UNvsPuaPEhUextDUWIalxTJnVDrD0mIZlhbHiPQ4BifH4ArruX/Vn0qWIIwxzp/E1YVOI2zVfucv+LoS78v7ubHC7wCB9DEwbA4MmgyD8pzG2JiUY35NRX0L22rS2F4aybbiTLaVjGNnSS0NLW1+O0F4mBAfHU58VDXxUeEkRIeTFh/JuIEJDE6OYXByNIOTYxiU5HyOjex4K2txe6hqbKGyvpXKhhYq61toaGljSEoMw9JiyUyIJsySwBeyBGFMf+RudqqECldD0Rqnnr+2+Mj2iFiIH+DU26eNhGGnH1keMAEyc53HOjvR5lEOVjWyq6yOz0rr+Kysns/K6thdVsfhuhbffqlxkYzNTGDBjGzGDUxg7MBEhiTHkBAdTlR42EnVzUeGhzEgIZoBCdEnfA5jCcKYvqWxynmSp6kammuc96Zqp26/ybtctt15Iqit2TkmeRjknAHZsyBrhtPAGxVPs7uNospG9pXXs6+8gX3lDRTta6RlowePZwseVdo8ikcVjzqJobGljb3l9TS7jzQop8RGMDIjnrnjMhk1IJ6xAxMYNyiBjPioHt1AayxBGNP7NFVDxW6nc5Xv3fu5obzr48KjnV63ycNg5i1o9kwqUqayrzWBwooGiiobKVrVwL7yzewrb+BgdWOHuv64SBfZqbFERbhwCbjCBBEhPCyMsDAIEyE9Poqzx2YwMiOOkRnxjMiI9zXumt4nqAlCROYBDwMu4AlVfeio7UOBp4Fk7z73quoSEckBPgW2e3ddparfCWasxvQ4Ho/zuOehjU7DcMlm572mqON+iUMgdQSMu8SpDkrKguhkNDqJGo3jQFMkhfXh7K9po7DSSQSFWxoo+rCRxtZNHU6VFhdJdmosM3JSGJqWRU5arK8BNy0u0v7i72eCliBExAU8AlwAFAFrRWSxqm712+1+4CVVfVREJgBLgBzvts9UdUqw4jPmlGuphw0vQMGfneqfiBinrj8i1unJ296zN8wFh3dAyVZorXeOFZe3Ufg03OnjqY0fTnnUEEpcgzjc7KK8roXy+mYqSloo3dnslAYqD1PfUtIhhITocLJSYhmeHsdZYzLITokhOzWWrJRYslJiiIuySgVzRDD/N8wEdqnqbgARWQRcBvgnCAUSvZ+TgINBjMeY0KgtgTWPQcGfnJ7AQ6Y7T/201jvj8bQ0OENCtDY669panRLBtOshcyIViWNYVTuAVfvrWbOngm1ra70nPux9OVxhQkpsBOnxUQxNi+X0UWm+G7/ziiUpJiIkl8D0TsFMEEPw62uIU4qYddQ+C4F3ROROIA4432/bcBFZD9QA96vqB0d/gYjcCtwKMHTo0O6L3JjuUPopfPR72PSSc9MfdzGcfqfTGHxUVY3HozS7PTS1tlHd2MrH+ytZs6eCNcsq2H3YSQSxkS6mD0vhwtyBZCZGkRYXSWpcFKlxkaTFRZIUE2GPbppuFery5NXAU6r6axE5DXhWRCYCxcBQVS0XkenAayKSq6o1/ger6mPAYwD5+fmBD31oTDB4PFC11+k8tv452LUUwmNg2jfQWbexpTmDZdtKee/NlRyua6aptY2mVg+NrW20uD8/jERidDgzh6dy1cxsZg5PY+LgxD7TQ9f0DsFMEAeAbL/lLO86f98C5gGo6koRiQbSVbUUaPauXycinwFjgIIgxmtM4FoanGElDm3yNh5vckb3bKlztsdl0HrWT/go5VLe2uNm2WN7KanZjgjkZSUzJTuZ6HAX0RFhREe4iIrwfg53ERflYtKQZMYOTLAevSakgpkg1gKjRWQ4TmK4CrjmqH32A3OBp0RkPBANlIlIBlChqm0iMgIYDewOYqzGHNFY6TQQ1x060ou4rtR5ry9F60qh9pBvqGZ3RDw1iWOpGPwVSmJGURQ1kqUVGby/rJZm927io8I5a0w6543L5JyxGaTHR4X4BzQmMEFLEKrqFpE7gLdxHmF9UlW3iMiDQIGqLga+DzwuInfjNFjfqKoqImcBD4pIK+ABvqOqFV18lTEnzuNxJm3x71Fctq3jPmHheOIyqHWlctCdwI768exuPZ1PdShbdRhFTRlQ2/Ev/WFprVwzayjnj89kRk4qkeFWNWR6H9GjR73qpfLz87WgwGqgTBc8HqcEULXfGXOoYrcz8UvRWqfEABCdDNkzndfgqZRKGssPhPHWrkb+ubuSFreHhOhwzh6TwYycVJJiInzjBMVHh5MY7SzHRYVbQjC9hoisU9X8zraFupHamO6l6rQH7F7uTOXYPnlMdZEzF4D/rhnjaB19MeWpeeyLnciutkEcrG6muLiJTz+uYdsh56nrYWmxXDdrGOePH8CM4alEWEOx6ScsQZjer6kadq+Ane/Arn8cGXQuPhOSstFBU6gd/mWKNJ1dzSl8UpfE2sp4dpcqdYXtw0JXApWEhwmZidEMS4vlx18ex9zxmYzMiLMexKZfsgRhepc2t9N4XF0E+1fCzqVQuMqZdjIqCUaeS2POXN5unsjqsnC2Haplx6Za6v2Gk85OjWFsZgLTRsUyJDmGQd6howcnxZCREGVPDhnjZQnC9Cyqzs2/dKszCF3NAWe55qDzuba449STAyfB6f8Coy9ki2sMz605yOtvHKChpZjk2AjGZibw9elZjB2YyLhBCYzJTCDehpMwJiD2m2JCp6HCSQQlW5330q1O7+Nmv/6Q4TFHZiYbcY53ZjLvLGWZE2mKGcCbG4t57s19rN+/iqjwMC7NG8y1s4eRl5VkVUPGnARLEObUaqiALX+BTxY5TxC1i052JqGZfCUMmEBz2jgKJYuWyGQ84DfvgDP3QGubh+UflPLyuk1UNbQyIiOOf7tkAl+flkVSrI03ZEx3sARhgq+t1Rl2YsMLsOMt52miARPgvPth8FQYkAsJA0GE0tomnvloH8/9fR9VDZuPedrwMOHC3EyumzWM00amWWnBmG5mCcIEz8EN8MmLsOkVaDgMsekw42bIuwoGTu4wYN22QzU88cEeFm84SKvHwwXjM7l48iCiwsMIE8EVJoSJEBYmhAm4RBiVGW9TShoTRJYgTPfytMH2JfDR/zi9k12RMPbLkHcNjJoLriPVP6rKBzsP8/gHu/lg52FiIlxcNTObm+YMZ3h6XAh/CGMMWIIw3aWlATY8D6v+4PRSTh4G8x5ySgsxKb7dSmqa2FBYxcaiKpZuLWV7SS0ZCVH88EtjuXbWUJJjbXpKY3oKSxDm5NSVOpPhrP0TNFY4k+HMfwrGfYXqZmVjURWfFO7kk6JqNhZVUVLTDDiT20wcksSv5ufxlbxBRIW7QvtzGGM+xxKECZyq0xehbBuUbYeD62HrYqfRedzFcNodtGXN4v2dh3n+ufUs21aKxzvU14j0OE4bkcbkrGTyspOYMCiJmEhLCsb0ZJYgTOdUnZFNC1c5yaBsG5TtgJbaI/vEpsPUa+G0OyiLzOKlgkJeeHEFB6oaSY+P4jtnj2TOqHQmDkmyqS6N6YUsQZiO3C1OP4WVj8Chjc66+EzIGAtTrnHeM8ZBxlg0No2Vu8t5/u39vL15O26PcvrINH5y0XgumJBpI5oa08tZgjCO+nJY9ySsecIZ6yh9DFzyW5hwOcSmdti1pKaJv6w9wMvrNrO7rJ6kmAhuOD2Ha2YNZWRGfIh+AGNMd7ME0d+VbXeePPpkEbibYOR5cNkjznvYkRJAU2sbSz8t4eWCIj7YWYZHIX9YCt+dP4pLJg8iOsLaE4zpayxB9FdVhfDOfbD1dXBFQd4CmP1dGDDet4uqsrGomlfWFbH4k4NUN7YyKCma754ziq9Nz7K+Csb0cZYg+ht3C6z8Pbz/S6ch+uwfwcxbIS7dt4uq8u7WEh7+x062HKwhKjyMeRMHMn96NqeNTLPhsI3pJyxB9Ce734MlP4DDO2DcJfCl/4SUYb7Nqsry7aX85t0dbD5Qw/D0OP7jqxP5St5gEqPtKSRj+htLEP1BTbFTnbT5VUjJgWtegjFf8m1WVd7bUcZvl+7kk8IqhqbG8qv5eVw+ZTDhNr2mMf2WJYi+rK3V6eW8/L+czmxn3wtn3AURMYCTGP65q5zfvLudj/dXMSQ5hoeumMTXpmfZvMvGGEsQfdaupfDWT+Dwdhh1AVz0C0gdAThzK7yz5RCPf7Cbj/dXMSgpmp9fPpEr87Ot74IxxscSRF9zeCe8fR/sfBtShsNVL8DYi0CE+mY3LxUU8uQ/91BY0Uh2agwPXpbLlfnZ9piqMeZzLEH0FY1V8N4vYM0fnWk6L3gQZn0HwqM4VN3EUx/t5YXV+6hpcjN9WAo/+fJ4LswdaE8kGWO6ZAmit/O0wbqnYPl/ONN5Trsezvs3iB/AwapGfvX2BhZ/chCPKvMmDuTmM0cwbWjKF57WGGMsQfRmhzbDX78NJZth2ByY918wKA+ArQdruOmpNdQ0urn+tGF8c85wslNjQxywMaY3sQTRW32yCP52F0QnwfynYcJlvik8/7nrMN9+dh0J0eG8dvscxg5MCHGwxpjeyBJEb+Nugbd/DGufcEoNX/8zJGT6Nr++4QA/ePkTRqTH89Q3ZzAoKSaEwRpjejNLEL1J9QF46RtwoABOuwPOX+ib41lV+eP7u3no79uYPSKVP16fb3MwGGNOiiWI3mL3e/DKN50RV+c/DbmX+za1eZSfvbGVpz7ayyWTB/HrK/NsCk9jzEmzBNHTqcI//xv+8SCkjYYFz0HGGN/mptY27lq0gbe2HOLmM4bzk4vGE2aPrhpjuoEliJ7M3Qyvfgs+/RvkfhUu/T1EHZmQp6K+hW8/W8DavZXcf/F4bj5zRAiDNcb0NZYgeqo295HkcOHPnTYHOVIy+LS4hlueKaC0ppn/uXoqX8kbHMJgjTF9kSWInkgV/vY9JznMewhm39Zh85sbi/nBy5+QGBPOS985jSnZySEK1BjTl1mC6GlU4Z37YcNzzmQ+fsnB41F+8+4Ofr98F1OHJvPH66YzIDE6hMEaY/oySxA9zQe/dmZ8m3krnPNj3+qaplbuXrSBf2wrZUF+Ng9enmtPKhljgsoSRE+y9glY9jOYdCXM+3++NofdZXXc8kwB+8obePCyXK6fPQwRe1LJGBNcliB6ik2vwJs/gDHz4PI/QJgzL8Py7aX8y4vriXCF8ey3ZnHayLQQB2qM6S8sQfQEO95xBt0bdjrMf8rXO/qDnWXc/HQBYzMTeOwb08lKscH2jDGnTlCnDxOReSKyXUR2ici9nWwfKiLLRWS9iGwUkYv8tv3Ye9x2EfnS0cf2GftWwkvXQ2YuXP2ibzrQ3WV13P78x4zKiOel75xmycEYc8oFrQQhIi7gEeACoAhYKyKLVXWr3273Ay+p6qMiMgFYAuR4P18F5AKDgaUiMkZV24IVb0jsXwXPz4ekLLj2VWdkVqC6sZWbny4g3BXGEzfkEx9lBT1jzKkXzBLETGCXqu5W1RZgEXDZUfsokOj9nAQc9H6+DFikqs2qugfY5T1f37HnA3j2Cmck1m8shvgMANxtHu58cT37Kxp49NppNoeDMSZkgpkghgCFfstF3nX+FgLXiUgRTunhzuM4FhG5VUQKRKSgrKysu+IOvs+WOyWH5Gy48U1IOvKj/dfft/H+jjJ+dvlEZo2wBmljTOgEtQ0iAFcDT6lqFnAR8KyIBByTqj6mqvmqmp+RkRG0ILvVjnfghQWQOgJueAMSBvo2vbS2kD99uIcbT8/h6plDQxikMcYE9ymmA0C233KWd52/bwHzAFR1pYhEA+kBHtv7bHsTXroBMifA9a9BbKpvU8HeCu57bRNnjErn/ovHhzBIY4xxBLMEsRYYLSLDRSQSp9F58VH77AfmAojIeCAaKPPud5WIRInIcGA0sCaIsQbflr86k/0Mmuy0Ofglh6LKBr797DqGJMfw+2umEu4KdcHOGGOCWIJQVbeI3AG8DbiAJ1V1i4g8CBSo6mLg+8DjInI3ToP1jaqqwBYReQnYCriB23v1E0wbX4a/3gpZM+HalyE60bepvtnNLc+so8Xt4YkbZpAcGxnCQI0x5ghx7se9X35+vhYUFIQ6jM/b/BdnJricM+DqRR3mc1BV7nhxPX/fVMyfbpzBuWMHhDBQY0x/JCLrVDW/s21WlxFMbW54599g8FS45qUOyQHgbxuLeXNjMd+/cKwlB2NMj2MJIph2vAU1RXDm9yGyY3+Gw3XNPPD6ZvKyk/nO2SNDFKAxxnTNEkQwrXkMErOcAfiO8sDrW6hvbuNXX5+My+aQNsb0QJYggqVsO+x5D2Z8E1wdnwX4+6Zi3txUzPfOH83ozIQQBWiMMcdmCSJY1j4BrkiYdkOH1ZX1Lfzb65uZOCSRW88aEaLgjDHmi9kocMHQXAsbXoTcKyAuvcOmf//bFqoaWnn2W7OIsP4OxpgezO5QwfDJImipdaYN9bN0awmvbTjI7eeOYvygxC4ONsaYnsESRHdThTWPw+BpkDXdt7q6oZWf/HUT4wYmcPu5o0IYoDHGBMYSRHfb8z4c3g4zb+mw+udvbqW8voVfzc8jMtwuuzGm57M7VXdb+zjEpDrtD14rtpfy8roivnP2CCYOSQphcMYYEzhLEN2pqtAZsXX6DRARDUBtUys//ssmRg2I587zRoc4QGOMCZw9xdSd1v3Zec//pm/Vr9/ZQUlNE6/edjrREa4QBWaMMccvoBKEiPxFRC4+nsl8+h13M6x7GsZ8GZKdyX5Kapp4YfV+FszIZurQlBAHaIwxxyfQG/4fgGuAnSLykIiMDWJMvdOW16DhcIfG6cff302bKt89x55aMsb0PgElCFVdqqrXAtOAvcBSEflIRG4SkYhgBthrrHkM0kbDiHMAqKhv4fnV+7ksbzDZqbHHPNQYY3qigKuMRCQNuBG4GVgPPIyTMN4NSmS9yYGP4UCBU3oQZ+C9Jz/cQ5O7je+eayO1GmN6p4AaqUXkr8BY4FngK6pa7N30fyLSA2fpOcXWPgGR8ZB3NQA1Ta08vXIv83IHMmqADcZnjOmdAn2K6XequryzDV3NRNRv1JfDpldg6nW+qUSfXbmP2ia39Zg2xvRqgVYxTRCR5PYFEUkRke8GKabe5eOnoa3Z1zjd0OLmTx/u4dyxGdYpzhjTqwWaIG5R1ar2BVWtBG45xv79Q1urM+7SiHNgwHgAXli9n4r6Fu44z0oPxpjeLdAE4RIR37RnIuICIoMTUi+y5TWoPQizbweg2d3G4x/sZvaIVKYPSw1xcMYYc3ICTRBv4TRIzxWRucCL3nX9lyqs/D2kj4FR5wPwyroiSmqaueNcG1LDGNP7BdpI/SPg28Bt3uV3gSeCElFvsX8lFG+AS34LYWG42zz873ufMSU7mTmj0kIdnTHGnLSAEoSqeoBHvS8DsPIRZ9TWyVcBsPiTgxRWNPLAJbn41cYZY0yvFWg/iNHAfwETgOj29araPydVrtjtjNp65vchMhaPR3lk+S7GDUxg7vgBoY7OGGO6RaBtEH/GKT24gXOBZ4DnghVUj7fqfyEs3Pdo61tbDvFZWT23nzvKSg/GmD4j0AQRo6r/AERV96nqQuDi4IXVgzVWwfrnYNLXIWEgqk7pYUR6HBdNGhTq6IwxptsE2kjd7B3qe6eI3AEcAOKDF1YP9vHT0FoPs51+git2lLHlYA2//PpkXGFWejDG9B2BliC+B8QC/wJMB64DbghWUD1WWyus/iPknAmDJgPOo63p8ZFcPnVIiIMzxpju9YUlCG+nuAWq+gOgDrgp6FH1VFtfh5oDcPFvAGhsaWPZp6VcMW0IES6bS8kY07d84V1NVduAM05BLD2bqvNoa9ooGH0hACu2l9LY2sbF1vZgjOmDAm2DWC8ii4GXgfr2lar6l6BE1RMVroaDH8PFv4YwJ68u2XyItLhIZg63YTWMMX1PoAkiGigHzvNbp0D/SRArfw/Ryb45H5pa2/jHpyVcPnUI4Va9ZIzpgwLtSd1/2x0AKvY4HePm3AWRcQCs2F5GQ0sbF0206iVjTN8UaE/qP+OUGDpQ1W92e0Q90eo/goT5OsYBLNlUTGpcJLNHWPWSMaZvCrSK6Q2/z9HAV4GD3R9OD9RUDeufhYlfg8TBzipv9dKlUwZb9ZIxps8KtIrpVf9lEXkR+DAoEfU0O96BljqYcbNv1fs7yqhvaePLVr1kjOnDTvTP39FA/xiVrnAVRMbD4Gm+VUs2FZMcG8FpI21Yb2NM3xVoG0QtHdsgDuHMEdH37V8NWfngci5VU2sbSz8t5eJJg6xznDGmTwu0iinhRE4uIvOAhwEX8ISqPnTU9t/ijA4LzlAeA1Q12butDdjk3bZfVS89kRhOSlM1lGyGs4/kwg93Hqau2c1Fk616yRjTtwVagvgqsExVq73LycA5qvraMY5xAY8AFwBFwFoRWayqW9v3UdW7/fa/E5jqd4pGVZ1yPD9MtytaCygMne1btWRTMUkxEZxu1UvGmD4u0DqSB9qTA4CqVgEPfMExM4FdqrpbVVuARcBlx9j/apy5rnuO/audx1uz8gFodrfx7tYSLpyQadVLxpg+L9C7XGf7fVHpYwhQ6Ldc5F33OSIyDBgOLPNbHS0iBSKySkQu7+K4W737FJSVlX1BOCegcBVkToQop4btn7sOU2vVS8aYfiLQBFEgIr8RkZHe12+Add0Yx1XAK96BAdsNU9V84Brgv0Vk5NEHqepjqpqvqvkZGRndGA7Q5oaidR2ql97ceIjE6HDmjEzv3u8yxpgeKNAEcSfQAvwfTlVRE3D7FxxzAMj2W87yruvMVRxVvaSqB7zvu4EVdGyfCL6STc7EQNmzAGhxe3h36yEumDCQyHCrXjLG9H2BPsVUD9x7nOdeC4wWkeE4ieEqnNJAByIyDkgBVvqtSwEaVLVZRNKBOcAvjvP7T87+Vc770NMAp3qppsnNxZMHntIwjDEmVAL6U1hE3vU+udS+nCIibx/rGFV1A3cAbwOfAi+p6hYReVBE/B9ZvQpYpKr+/SzG41RrfQIsBx7yf/rplNi/CpKyIclpNlmyqZiEqHDmjLLqJWNM/xDoWEzp3ieXAFDVShH5wp7UqroEWHLUup8etbywk+M+AiYFGFv3U3Xmfxg2B4DWNg/vbC3hggmZRIW7QhaWMcacSoFWpntEZGj7gojk0Mnorn1G1X6oLfY1UP9z12GqG1u5yGaOM8b0I4GWIO4DPhSR9wABzgRuDVpUoVa42nn3NlAv2VRMfFQ4Z46x6iVjTP8RaCP1WyKSj5MU1gOvAY3BDCyk9q+CyATIzPVVL50/foBVLxlj+pVAh9q4GfgezqOqG4DZOE8dnXes43qt/asgewaEufh4dzlVDa3Ms6G9jTH9TKBtEN8DZgD7VPVcnD4JVcc+pJdqrILSrZDttD8UVToFpXEDT2i8QmOM6bUCTRBNqtoEICJRqroNGBu8sEKoqABngD6n/aGktgmAAYlRIQzKGGNOvUAbqYu8/SBeA94VkesrHQwAABVHSURBVEpgX/DCCqHCVSAuGOIM0Fda00x8VDixkYFeKmOM6RsCbaT+qvfjQhFZDiQBbwUtqlDavwoGToSoeADKapsZkGClB2NM/3Pcfxar6nvBCKRHaGuFA+tg2jd8q0prm6x6yRjTL9moc/4ObYTWBl//B4DS2mYGJESHMChjjAkNSxD+9ns7yHl7UKsqJTVNVsVkjOmXLEH4K1wFSUMhcTAAtc1umlo9VsVkjOmXLEG0U3VKEEP9qpdqmgGsiskY0y9ZgmhXtQ/qDnWYQa7U+kAYY/oxSxDt2icIyj6SIMpqrQRhjOm/LEG0278KohJhwHjfqpIaK0EYY/ovSxDtCldDljNAX7vSmmaiI8JIiLJe1MaY/scSBHgH6Pu0Q/sDOH0gMhOjEZEQBWaMMaFjCQKgaC2gHTrIgbcXtfWBMMb0U5YgwGl/EBdk5XdYXVpjvaiNMf2XJQhwEsSgyRAZ12F1aW0zGVaCMMb0U5Yg2gfoy+7Y/tDQ4qau2W1PMBlj+i1LEPVlTukh54wOq9t7UWdaFZMxpp+y5zcTB8O33vnc6tL2TnJWgjDG9FNWguiCr5OclSCMMf2UJYgu+EoQ1khtjOmnLEF0obS2iUhXGMmxEaEOxRhjQsISRBfKapxHXK0XtTGmv7IE0YXS2mZroDbG9GuWILpgU40aY/o7SxBdKK21YTaMMf2bJYhONLW2Ud3YaiUIY0y/ZgmiE+0zyWUmWgnCGNN/WYLoRHsfiAxrpDbG9GOWIDpR6utFbQnCGNN/WYLoxJFe1FbFZIzpvyxBdKK0tglXmJAWFxnqUIwxJmQsQXSitKaZjPgowsKsF7Uxpv+yBNEJ60VtjDFBThAiMk9EtovILhG5t5PtvxWRDd7XDhGp8tt2g4js9L5uCGacR7Ne1MYYE8QJg0TEBTwCXAAUAWtFZLGqbm3fR1Xv9tv/TmCq93Mq8ACQDyiwzntsZbDi9VdW28zUoSmn4quMMabHCmYJYiawS1V3q2oLsAi47Bj7Xw286P38JeBdVa3wJoV3gXlBjNWntc1DeX2LlSCMMf1eMBPEEKDQb7nIu+5zRGQYMBxYdjzHisitIlIgIgVlZWXdEvThOutFbYwx0HMaqa8CXlHVtuM5SFUfU9V8Vc3PyMjolkBKa2wmOWOMgeAmiANAtt9ylnddZ67iSPXS8R7brXxzUdtTTMaYfi6YCWItMFpEhotIJE4SWHz0TiIyDkgBVvqtfhu4UERSRCQFuNC7LuisF7UxxjiC9hSTqrpF5A6cG7sLeFJVt4jIg0CBqrYni6uARaqqfsdWiMjPcJIMwIOqWhGsWP2V1jYjAunx1ovaGNO/BS1BAKjqEmDJUet+etTywi6OfRJ4MmjBdaGstom0uCjCXT2lecYYY0LD7oJHKa1ptgZqY4zBEsTnlNQ2WQO1McZgCeJzrARhjDEOSxB+2jzK4bpm6yRnjDFYguigvL4Zj1onOWOMgSA/xdTbtPeizrA+EMZ8odbWVoqKimhqagp1KCYA0dHRZGVlEREREfAxliD8lNZaL2pjAlVUVERCQgI5OTmI2ORaPZmqUl5eTlFREcOHDw/4OKti8mPjMBkTuKamJtLS0iw59AIiQlpa2nGX9ixB+GkfZiPDEoQxAbHk0HucyL+VJQg/pbVNpMRGEBXuCnUoxhgTcpYg/JTUNNsgfcYY42UJwk9pbbM1UBvTS1RVVfGHP/zhuI+76KKLqKqqCkJEfY89xeSnrKaJkRlpoQ7DmF7n3/+2ha0Ha7r1nBMGJ/LAV3K73N6eIL773e92WO92uwkP7/rWtmTJki639QRfFP+pZCUIL1WlzHpRG9Nr3HvvvXz22WdMmTKFGTNmcOaZZ3LppZcyYcIEAC6//HKmT59Obm4ujz32mO+4nJwcDh8+zN69exk/fjy33HILubm5XHjhhTQ2Nnb5fY8//jgzZswgLy+Pr33tazQ0NABQUlLCV7/6VfLy8sjLy+Ojjz4C4JlnnmHy5Mnk5eVx/fXXA3DjjTfyyiuv+M4ZHx8PwIoVKwKO/6233mLatGnk5eUxd+5cPB4Po0ePpn3aZY/Hw6hRo+iWaZhVtU+8pk+friejvK5Zh/3oDX3yw90ndR5j+outW7eG9Pv37Nmjubm5qqq6fPlyjY2N1d27j/z+lpeXq6pqQ0OD5ubm6uHDh1VVddiwYVpWVqZ79uxRl8ul69evV1XV+fPn67PPPtvl97Ufr6p633336e9+9ztVVb3yyiv1t7/9raqqut1uraqq0s2bN+vo0aO1rKysQyw33HCDvvzyy77zxMXFHVf8paWlmpWV5duvfZ+FCxf6Ynj77bf1iiuu6PRn6OzfDGd+nk7vq1aC8PJNNWqN1Mb0SjNnzuzQCex3v/sdeXl5zJ49m8LCQnbu3Pm5Y4YPH86UKVMAmD59Onv37u3y/Js3b+bMM89k0qRJPP/882zZsgWAZcuWcdtttwHgcrlISkpi2bJlzJ8/n/T0dABSU1O7Jf5Vq1Zx1lln+fZrP+83v/lNnnnmGQCefPJJbrrppi/8vkD0jIquHsA31ag1UhvTK8XFxfk+r1ixgqVLl7Jy5UpiY2M555xzOu0kFhV15Pfd5XIds4rpxhtv5LXXXiMvL4+nnnqKFStWHHeM4eHheDwewKkKamlpOan422VnZ5OZmcmyZctYs2YNzz///HHH1hkrQXiV+koQliCM6Q0SEhKora3tdFt1dTUpKSnExsaybds2Vq1addLfV1tby6BBg2htbe1wA547dy6PPvooAG1tbVRXV3Peeefx8ssvU15eDkBFhTNjck5ODuvWrQNg8eLFtLa2Hlf8s2fP5v3332fPnj0dzgtw8803c9111zF//nxcru7py2UJwstXgrAqJmN6hbS0NObMmcPEiRP54Q9/2GHbvHnzcLvdjB8/nnvvvZfZs2ef9Pf97Gc/Y9asWcyZM4dx48b51j/88MMsX76cSZMmMX36dLZu3Upubi733XcfZ599Nnl5edxzzz0A3HLLLbz33nvk5eWxcuXKDqWGQOLPyMjgscce44orriAvL48FCxb4jrn00kupq6vrtuolAHHaKHq//Px8LSgoOOHjFy7ewqsfF7Fp4Ze6MSpj+q5PP/2U8ePHhzoM41VQUMDdd9/NBx980OU+nf2bicg6Vc3vbH9rg/AqqWmy6iVjTK/00EMP8eijj3Zb20M7q2LyKq21YTaMMXD77bczZcqUDq8///nPoQ7rmO6991727dvHGWec0a3ntRKEV2ltE9OHpoQ6DGNMiD3yyCOhDqHHsBIETmfB0ppmBlgvamOM8bEEAdQ0uWl2e6wNwhhj/FiC4EgfCJsoyBhjjrAEgfWBMMaYzliCwGmgBsi0YTaM6bPaR041gbOnmIDSmvZxmKwEYcwJ+fu9cGhT955z4CT48kPde84eoCfN9/BFrASBU8UUG+kiPqp3/KMZY5xn//0fSV24cCE///nPmTt3LtOmTWPSpEm8/vrrAZ2rrq6uy+M6m9ehszkg9u7dy8SJE33H/epXv2LhwoUAnHPOOdx1113k5+fz8MMP87e//Y1Zs2YxdepUzj//fEpKSnxx3HTTTUyaNInJkyfz6quv8uSTT3LXXXf5zvv4449z9913n/B1Oy5djQPe214nMx/E7c+v07N/seyEjzemPwr1fBAff/yxnnXWWb7l8ePH6/79+7W6ulpVVcvKynTkyJHq8XhU9cjcC51pbW3t9Liu5nXobA4I//kpVFV/+ctf6gMPPKCqqmeffbbedtttvm0VFRW+uB5//HG95557VFX1X//1X/V73/teh/1qa2t1xIgR2tLSoqqqp512mm7cuPF4L5eqHv98EPYnM9aL2pjeaOrUqZSWlnLw4EHKyspISUlh4MCB3H333bz//vuEhYVx4MABSkpKGDhw4DHPpar85Cc/+dxxXc3rsGzZMt/8C+1zQFRWVh7zO/wH1isqKmLBggUUFxfT0tLim99h6dKlLFq0yLdfSorTefe8887jjTfeYPz48bS2tjJp0qTjvFonxhIEUFbbTO7gxFCHYYw5TvPnz+eVV17h0KFDLFiwgOeff56ysjLWrVtHREQEOTk5x5xHod2JHufPf64H4HPH+4/ceuedd3LPPfdw6aWXsmLFCl9VVFduvvlm/vM//5Nx48Z162itX8TaIHD6QVgJwpjeZ8GCBSxatIhXXnmF+fPnU11dzYABA4iIiGD58uXs27cvoPN0dVxX8zp0NgdEZmYmpaWllJeX09zczBtvvHHM7xsyZAgATz/9tG/9BRdc0KFdpb1UMmvWLAoLC3nhhRe4+uqrA708J63fJ4i6Zjf1LW02k5wxvVBubi61tbUMGTKEQYMGce2111JQUMCkSZN45plnOszbcCxdHdfVvA6dzQERERHBT3/6U2bOnMkFF1xwzO9euHAh8+fPZ/r06b7qK4D777+fyspKJk6cSF5eHsuXL/dtu/LKK5kzZ46v2ulU6PfzQVTUt/DA4i1cmZ/FmaMzghCZMX2TzQdxal1yySXcfffdzJ0794TPcbzzQfT7EkRqXCT/c/VUSw7GmB6pqqqKMWPGEBMTc1LJ4URYI7Uxpt/YtGmTry9Du6ioKFavXh2iiL5YcnIyO3bsCMl3W4IwxpwwVUVEQh1GwCZNmsSGDRtCHUZInEhzQlCrmERknohsF5FdInJvF/tcKSJbRWSLiLzgt75NRDZ4X4uDGacx5vhFR0dTXl5+Qjcec2qpKuXl5URHH9/TmkErQYiIC3gEuAAoAtaKyGJV3eq3z2jgx8AcVa0UkQF+p2hU1SnBis8Yc3KysrIoKiqirKws1KGYAERHR5OVlXVcxwSzimkmsEtVdwOIyCLgMmCr3z63AI+oaiWAqpYGMR5jTDeKiIjw9QA2fVMwq5iGAIV+y0Xedf7GAGNE5J8iskpE5vltixaRAu/6yzv7AhG51btPgf0VY4wx3SvUjdThwGjgHCALeF9EJqlqFTBMVQ+IyAhgmYhsUtXP/A9W1ceAx8DpB3FqQzfGmL4tmCWIA0C233KWd52/ImCxqraq6h5gB07CQFUPeN93AyuAqUGM1RhjzFGC1pNaRMJxbvhzcRLDWuAaVd3it8884GpVvUFE0oH1wBTAAzSoarN3/UrgMv8G7k6+rwwIbOCVzqUDh0/i+GCy2E6MxXZiLLYT01tjG6aqnfYUDloVk6q6ReQO4G3ABTypqltE5EGc8ccXe7ddKCJbgTbgh6paLiKnA38UEQ9OKeehYyUH7/edVFdoESnoqrt5qFlsJ8ZiOzEW24npi7EFtQ1CVZcAS45a91O/zwrc43357/MRcGoGPDfGGNOpfj8WkzHGmM5ZgjjisVAHcAwW24mx2E6MxXZi+lxsfWa4b2OMMd3LShDGGGM6ZQnCGGNMp/p9gghkxNlQEZG9IrLJO6Lt8U+X1/3xPCkipSKy2W9dqoi8KyI7ve+nbj7EY8e1UEQO+I0IfNGpjssbR7aILPcbsfh73vU94bp1FVvIr52IRIvIGhH5xBvbv3vXDxeR1d7f1/8TkcgeFNtTIrLH77qFbLBREXGJyHoRecO7fGLXTVX77Qunf8ZnwAggEvgEmBDquPzi2wukhzoOv3jOAqYBm/3W/QK41/v5XuD/9ZC4FgI/6AHXbBAwzfs5Aafz6IQect26ii3k1w4QIN77OQJYDcwGXgKu8q7/X+C2HhTbU8DXQ/1/zhvXPcALwBve5RO6bv29BOEbcVZVW4D2EWdNJ1T1faDiqNWXAU97Pz8NdDqwYjB1EVePoKrFqvqx93Mt8CnOoJU94bp1FVvIqaPOuxjhfSlwHvCKd32orltXsfUIIpIFXAw84V0WTvC69fcEEciIs6GkwDsisk5Ebg11MF3IVNVi7+dDQGYogznKHSKy0VsFdcqrcI4mIjk4Y4qtpoddt6Nigx5w7bzVJBuAUuBdnNJ+laq6vbuE7Pf16NhUtf26/Yf3uv1WRKJCERvw38C/4gxZBJDGCV63/p4gerozVHUa8GXgdhE5K9QBHYs65dee8pfUo8BInLG9ioFfhzIYEYkHXgXuUtUa/22hvm6dxNYjrp2qtqkzaVgWTml/XCji6MzRsYnIRJzJz8YBM4BU4EenOi4RuQQoVdV13XG+/p4gAhlxNmT0yIi2pcBfcX5JepoSERkE4H3vEZM+qWqJ95fYAzxOCK+diETg3ICfV9W/eFf3iOvWWWw96dp546kClgOnAcnegUChB/y++sU2z1tlp6raDPyZ0Fy3OcClIrIXp8r8POBhTvC69fcEsRYY7W3hjwSuAnrE/NciEiciCe2fgQuBzcc+KiQWAzd4P98AvB7CWHzab75eXyVE185b//sn4FNV/Y3fppBft65i6wnXTkQyRCTZ+zkGZ+riT3Fuxl/37haq69ZZbNv8Er7g1PGf8uumqj9W1SxVzcG5ny1T1Ws50esW6tb2UL+Ai3Ce3vgMuC/U8fjFNQLnqapPgC09ITbgRZwqh1acesxv4dRv/gPYCSwFUntIXM8Cm4CNODfjQSG6ZmfgVB9tBDZ4Xxf1kOvWVWwhv3bAZJzh/zfi3Gh/6l0/AlgD7AJeBqJ6UGzLvNdtM/Ac3iedQvXCmYit/SmmE7puNtSGMcaYTvX3KiZjjDFdsARhjDGmU5YgjDHGdMoShDHGmE5ZgjDGGNMpSxDG9AAick77yJvG9BSWIIwxxnTKEoQxx0FErvPOBbBBRP7oHbStzjs42xYR+YeIZHj3nSIiq7yDt/21fdA7ERklIku98wl8LCIjvaePF5FXRGSbiDzv7ZFrTMhYgjAmQCIyHlgAzFFnoLY24FogDihQ1VzgPeAB7yHPAD9S1ck4PWzb1z8PPKKqecDpOL3AwRlN9S6cORlG4IyrY0zIhH/xLsYYr7nAdGCt94/7GJxB9jzA/3n3eQ74i4gkAcmq+p53/dPAy97xtYao6l8BVLUJwHu+Napa5F3eAOQAHwb/xzKmc5YgjAmcAE+r6o87rBT5t6P2O9Hxa5r9Prdhv58mxKyKyZjA/QP4uogMAN+80sNwfo/aR8q8BvhQVauBShE507v+euA9dWZuKxKRy73niBKR2FP6UxgTIPsLxZgAqepWEbkfZ5a/MJzRY28H6nEmjbkfp8ppgfeQG4D/9SaA3cBN3vXXA38UkQe955h/Cn8MYwJmo7kac5JEpE5V40MdhzHdzaqYjDHGdMpKEMYYYzplJQhjjDGdsgRhjDGmU5YgjDHGdMoShDHGmE5ZgjDGGNOp/w8bBV6iZdqXmQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(history.history['accuracy'])\n", "plt.plot(history.history['val_accuracy'])\n", "plt.ylabel('accuracy')\n", "plt.xlabel('epoch')\n", "plt.legend(['train_accuracy', 'val_accuracy'])\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "id": "3Jd7jkXG2nit" }, "outputs": [], "source": [ "loss, accuracy = model.evaluate(x_val, y_val_encoded, verbose=0)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "vuFjsstv2nit", "outputId": "cfea48d6-4699-4a27-df50-0160491faa9f" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.8629999756813049\n" ] } ], "source": [ "print(accuracy)" ] } ], "metadata": { "accelerator": "GPU", "colab": { "name": "Ch07.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.7.3" } }, "nbformat": 4, "nbformat_minor": 1 }