{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 08wk-1,2: 생성모형 – Generative Adversarial Network (GAN)\n", "\n", "최규빈 \n", "2024-04-22\n", "\n", "\n", "\n", "# 1. 강의영상\n", "\n", "\n", "\n", "# 2. Imports" ], "id": "b173541d-22b6-4080-bc88-e76867cec48a" }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [] }, "outputs": [], "source": [ "import torch \n", "import torchvision\n", "import fastai.vision.all \n", "import matplotlib.pyplot as plt " ], "id": "8f622828-1f15-4ee0-a2fd-680c24d412ad" }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. GAN (Goodfellow et al. 2014) intro\n", "\n", "`-` 저자: 이안굿펠로우\n", "\n", "- 천재임\n", "- 지도교수가 요수아 벤지오\n", "\n", "`-` 저는 아래의 논문 읽고 소름돋았어요..\n", "\n", "- https://arxiv.org/abs/1406.2661 (2021-09, 38751회 인용.. $\\to$\n", " 2022-09, 48978회 인용.. $\\to$ 2024-03, 66609 인용..)\n", "\n", "`-` 최근 10년간 머신러닝 분야에서 가장 혁신적인 아이디어이다. (얀르쿤,\n", "2014년 시점..)\n", "\n", "`-` 무슨내용? 생성모형\n", "\n", "## A. 생성모형이란? (쉬운 설명)\n", "\n", "> 만들수 없다면 이해하지 못한 것이다, 리처드 파인만 (천재 물리학자)\n", "\n", "`-` 사진속에 들어있는 동물이 개인지 고양이인지 맞출수 있는 기계와 개와\n", "고양이를 그릴수 있는 기계중 어떤것이 더 시각적보에 대한 이해가 깊다고 볼\n", "수 있는가?\n", "\n", "`-` 진정으로 인공지능이 이미지자료를 이해했다면, 이미지를 만들수도\n", "있어야 한다. $\\to$ 이미지를 생성하는 모형을 만들어보자 $\\to$ 성공\n", "\n", "![](https://upload.wikimedia.org/wikipedia/commons/1/1f/Woman_1.jpg)\n", "\n", "## B. GAN의 응용분야\n", "\n", "`-` 내가 찍은 사진이 피카소의 화풍으로 표현된다면?\n", "\n", "`-` 퀸의 라이브에이드가 4k로 나온다면?\n", "\n", "`-` 1920년대 서울의 모습이 칼라로 복원된다면?\n", "\n", "`-` 딥페이크: 유명인의 가짜 포르노, 가짜뉴스, 협박(거짓기소)\n", "\n", "`-` 거북이의 커버..\n", "\n", "`-` 너무 많아요…..\n", "\n", "## C. 생성모형이란? 통계학과 버전의 설명\n", "\n", "> 제한된 정보만으로 어떤 문제를 풀 때, 그 과정에서 원래의 문제보다\n", "> 일반적인 문제를 풀지 말고 (=문제를 괜히 어렵게 만들어서 풀지 말고),\n", "> 가능한 원래의 문제를 직접 풀어야한다. 배프닉 (SVM 창시자)\n", "\n", "`-` 이미지 $\\boldsymbol{X}$ 가 주어졌을 경우 라벨을 $y$ 라고 하자.\n", "\n", "`-` 이미지를 보고 라벨을 맞추는 일은 $p(y| \\boldsymbol{X})$에 관심이\n", "있다. – 판별모형\n", "\n", "`-` 이미지를 생성하는 일은 $p(\\boldsymbol{X},y)$에 관심이 있는것이다. –\n", "생성모형\n", "\n", "`-` 데이터의 생성확률 $p(\\boldsymbol{X},y)$을 알면 클래스의 사후확률\n", "$p(y|\\boldsymbol{X})$를 알 수 있음. (아래의 수식 참고) 하지만 역은\n", "불가능\n", "\n", "$$p(y|{\\boldsymbol X}) = \\frac{p({\\boldsymbol X},y)}{p({\\boldsymbol X})} = \\frac{p({\\boldsymbol X},y)}{\\sum_{y}p({\\boldsymbol X},y)}$$\n", "\n", "- 즉 이미지를 생성하는일은 분류문제보다 더 어려운 일이라 해석가능\n", "\n", "`-` 따라서 배프닉의 원리에 의하면 일반적인 분류문제를 해결할때\n", "“판별모형이 생성모형보다 더 바람직한 접근법”이라 할 수 있음. 즉 개와\n", "고양이를 구분할 때, 그려진 개와 고양이 사진을 잘 구분하면 되는 것이지\n", "굳이 개와 고양이를 그릴줄 알아야하는건 아니라는 의미.\n", "\n", "`-` 예전에는 머신러닝의 응용분야가 “분류/회귀”에 한정된 느낌이었는데\n", "요즘은 생성모형도 인기있음.\n", "\n", "## D. GAN의 원리\n", "\n", "`-` GAN은 생성모형 중 하나임\n", "\n", "`-` GAN의 원리는 경찰과 위조지폐범이 서로 선의의(?) 경쟁을 통하여 서로\n", "발전하는 모형으로 설명할 수 있다.\n", "\n", "> The generative model can be thought of as analogous to a team of\n", "> fakers, trying to produce fake currency and use it without detection,\n", "> while the discriminative model is analogous to the police, trying to\n", "> detect the counterfeit currency. Competition in this game drives both\n", "> teams to improve their methods until the counterfeits are\n", "> indistiguishable from the genuine articles.\n", "\n", "`-` 서로 적대적인(adversarial) 네트워크(network)를 동시에 학습시켜\n", "가짜이미지를 만든다(generate)\n", "\n", "`-` 무식한 상황극..\n", "\n", "- 위조범: 가짜돈을 만들어서 부자가 되어야지! (가짜돈을 그림)\n", "- 경찰: (위조범이 만든 돈을 보고) 이건 가짜다!\n", "- 위조범: 걸렸군.. 더 정교하게 만들어야지..\n", "- 경찰: 이건 진짠가?… –\\> 상사에게 혼남. 그것도 구분못하냐고 –\\>\n", " (판별능력 업그레이드) –\\> 이건 가짜다!!\n", "- 위조범: 더 정교하게 만들자..\n", "- 경찰: 더 판별능력을 업그레이드 하자!\n", "- 반복..\n", "\n", "`-` 굉장히 우수한 경찰조차도 진짜와 가짜를 구분하지 못할때(=진짜\n", "이미지를 0.5의 확률로만 진짜라고 말할때 = 가짜 이미지를 0.5의 확률로만\n", "가짜라고 말할때) 학습을 멈춘다.\n", "\n", "# 4. GAN의 구현\n", "\n", "## A. Data" ], "id": "972875d9-1cdc-4f6a-aa0a-63bc97d9b098" }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [] }, "outputs": [], "source": [ "path = fastai.data.external.untar_data(fastai.data.external.URLs.MNIST)\n", "path" ], "id": "8ce06afe-ad52-41bb-82ce-6184c8a714c9" }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [] }, "outputs": [], "source": [ "X_real = torch.stack([torchvision.io.read_image(str(l)) for l in (path/'training/3').ls()],axis=0)/255\n", "X_real.shape" ], "id": "891fca54-9896-45a0-a66d-3037a3a831e9" }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [] }, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "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\nWzGTl5enUCgUNzfu3r2rqqqqXj03JKmpqUn19fU9an4457R8+XLt3r1bR48eVV5eXtz+3jIfHnUd\nOtJt54PhmyI8+cMf/uD69+/v3nnnHfePf/zDrVq1yg0ePNhdvnzZurUus2bNGldZWekuXbrkampq\n3AsvvOACgUCPvwbNzc3u9OnT7vTp006S27x5szt9+rT717/+5Zxz7vXXX3fBYNDt3r3bnTt3zr34\n4osuHA67aDRq3HlydXYdmpub3Zo1a1x1dbWrq6tzx44dc5MmTXJf/OIXe9R1+MEPfuCCwaCrrKx0\n165di41bt27FjukN8+FR1yGd5kPahJBzzv361792ubm5bsCAAe7ZZ5+Neztib7Bw4UIXDodd//79\nXXZ2tps3b547f/68dVspd+zYMSep3SguLnbO3X9b7oYNG1woFHJ+v99NnjzZnTt3zrbpFOjsOty6\ndcsVFha6YcOGuf79+7sRI0a44uJid+XKFeu2k6qjr1+SKy8vjx3TG+bDo65DOs0HfpUDAMBMWrwm\nBADomQghAIAZQggAYIYQAgCYIYQAAGYIIQCAGUIIAGCGEAIAmCGEAABmCCEAgBlCCABghhACAJj5\nfwUFHO8WffH6AAAAAElFTkSuQmCC\n" } } ], "source": [ "plt.imshow(X_real[0].reshape(28,28),cmap=\"gray\")" ], "id": "86de9668-5aca-4737-af82-184aaa8a4e27" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## B. 페이커 생성\n", "\n", "> “net_faker: noise $\\to$ 가짜이미지” 를 만들자.\n", "\n", "`-` 네트워크의 입력: (n,??) 인 랜덤으로 뽑은 숫자.\n", "\n", "`-` 네트워크의 출력: (n,1,28,28)의 텐서" ], "id": "9a26efc1-28c9-44d3-8e15-7000300d0e06" }, { "cell_type": "code", "execution_count": 6, "metadata": { "tags": [] }, "outputs": [], "source": [ "torch.randn(1,4) # 이게 들어온다고 상상하자." ], "id": "129f9915-26e0-4716-896d-a4c382194e0b" }, { "cell_type": "code", "execution_count": 7, "metadata": { "tags": [] }, "outputs": [], "source": [ "class Reshape2828(torch.nn.Module):\n", " def __init__(self):\n", " super().__init__()\n", " def forward(self,X):\n", " return X.reshape(-1,1,28,28) " ], "id": "c7feb28e-432f-4b2e-9a9b-f35529a5b1c9" }, { "cell_type": "code", "execution_count": 8, "metadata": { "tags": [] }, "outputs": [], "source": [ "net_faker = torch.nn.Sequential(\n", " torch.nn.Linear(in_features=4, out_features=64), # (n,4) -> (n,64) \n", " torch.nn.ReLU(),\n", " torch.nn.Linear(in_features=64, out_features=64), # (n,64) -> (n,64) \n", " torch.nn.ReLU(),\n", " torch.nn.Linear(in_features=64, out_features=784), # (n,64) -> (n,784) \n", " torch.nn.Sigmoid(), # 출력을 0~1로 눌러주는 역할.. -- 저는 이 레이어가 일종의 문화충격이었어요.. (시그모이드를 이렇게 쓴다고??)\n", " Reshape2828()\n", ")" ], "id": "441bb7d0-4fdb-469f-9b77-4e5aa0fdaba1" }, { "cell_type": "code", "execution_count": 9, "metadata": { "tags": [] }, "outputs": [], "source": [ "net_faker(torch.randn(1,4)).shape # 가짜이미지!" ], "id": "5580ac62-1319-48bf-9340-01adc92afcd5" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## C. 경찰 생성\n", "\n", "> net_police: 진짜이미지 $\\to$ 0 // 가짜이미지 $\\to$ 1 와 같은\n", "> 네트워크를 설계하자.\n", "\n", "`-` 네트워크의 입력: (n,1,28,28) 인 이미지\n", "\n", "`-` 네트워크의 출력: 0,1" ], "id": "d08a0f72-aca6-4378-aec0-029445c4e8e1" }, { "cell_type": "code", "execution_count": 10, "metadata": { "tags": [] }, "outputs": [], "source": [ "net_police = torch.nn.Sequential(\n", " torch.nn.Flatten(),\n", " torch.nn.Linear(in_features=784,out_features=30),\n", " torch.nn.ReLU(),\n", " torch.nn.Linear(in_features=30,out_features=1),\n", " torch.nn.Sigmoid()\n", ")" ], "id": "aec6eca9-78a4-4a6c-9214-b4e3b5e19288" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## D. 바보경찰, 바보페이커\n", "\n", "> 스토리를 전개해볼까?\n", "\n", "`-` 경찰네트워크가 가짜이미지를 봤을때 어떤 판단을 하는지, 진짜 이미지를\n", "봤을떄 어떤 판단을 하는지 살펴보자.\n", "\n", "***<경찰이 진짜이미지를 봤다면>***\n", "\n", "`-` 진짜이미지" ], "id": "feb7137a-1307-4dae-9a79-fe752cc0b6e3" }, { "cell_type": "code", "execution_count": 11, "metadata": { "tags": [] }, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaEAAAGdCAYAAAC7EMwUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9h\nAAAPYQGoP6dpAAAaOklEQVR4nO3df2xVd/3H8dfl14Xh7U0YtPdWSr+NgWhWQjJAoG78ilSaDPkZ\nYTOmJIqb/AgICxGJoTNKF+JwiRUW51LBjYmR34EMqtCCqZ2MQSC4YAlFqtA0dHhvKVDC+vn+Qbjx\n0q5wLvf23ds+H8kn4Z5z3px3Dx/66rk/PvU555wAADDQx7oBAEDvRQgBAMwQQgAAM4QQAMAMIQQA\nMEMIAQDMEEIAADOEEADATD/rBh7W1tamq1evKhAIyOfzWbcDAPDIOafm5mZlZ2erT5/O73W6XQhd\nvXpVOTk51m0AAJ5QfX29hg8f3ukx3e7puEAgYN0CACAJHuf7ecpCaMuWLcrLy9PAgQM1duxYnThx\n4rHqeAoOAHqGx/l+npIQ2rlzp1atWqX169fr9OnTev7551VUVKQrV66k4nQAgDTlS8Uq2hMmTNCz\nzz6rrVu3xrZ95Stf0Zw5c1RaWtppbTQaVTAYTHZLAIAuFolElJGR0ekxSb8Tunv3rk6dOqXCwsK4\n7YWFhaqurm53fGtrq6LRaNwAAPQOSQ+h69ev67PPPlNWVlbc9qysLDU0NLQ7vrS0VMFgMDZ4ZxwA\n9B4pe2PCwy9IOec6fJFq3bp1ikQisVFfX5+qlgAA3UzSPyc0dOhQ9e3bt91dT2NjY7u7I0ny+/3y\n+/3JbgMAkAaSfic0YMAAjR07VhUVFXHbKyoqVFBQkOzTAQDSWEpWTFi9erW+853vaNy4cZo0aZJ+\n85vf6MqVK3rllVdScToAQJpKSQgtXLhQTU1N+ulPf6pr164pPz9fhw4dUm5ubipOBwBIUyn5nNCT\n4HNCANAzmHxOCACAx0UIAQDMEEIAADOEEADADCEEADBDCAEAzBBCAAAzhBAAwAwhBAAwQwgBAMwQ\nQgAAM4QQAMAMIQQAMEMIAQDMEEIAADOEEADADCEEADBDCAEAzBBCAAAzhBAAwAwhBAAwQwgBAMwQ\nQgAAM4QQAMAMIQQAMEMIAQDMEEIAADOEEADADCEEADBDCAEAzBBCAAAzhBAAwAwhBAAwQwgBAMwQ\nQgAAM4QQAMAMIQQAMEMIAQDMEEIAADOEEADADCEEADBDCAEAzBBCAAAzhBAAwAwhBAAwQwgBAMwQ\nQgAAM4QQAMAMIQQAMEMIAQDMEEIAADOEEADATD/rBoBUWLNmTUJ1ffv29VyzcuVKzzUff/yx55oX\nXnjBc82+ffs810hSdXW155ozZ854rjly5IjnGvQs3AkBAMwQQgAAM0kPoZKSEvl8vrgRCoWSfRoA\nQA+QkteEnnnmGf35z3+OPU7keXYAQM+XkhDq168fdz8AgEdKyWtCtbW1ys7OVl5enhYtWqRLly59\n7rGtra2KRqNxAwDQOyQ9hCZMmKDt27fr8OHDevvtt9XQ0KCCggI1NTV1eHxpaamCwWBs5OTkJLsl\nAEA3lfQQKioq0vz58zV69Gh9/etf18GDByVJ27Zt6/D4devWKRKJxEZ9fX2yWwIAdFMp/7Dq4MGD\nNXr0aNXW1na43+/3y+/3p7oNAEA3lPLPCbW2tuqTTz5ROBxO9akAAGkm6SH06quvqqqqSnV1dfrw\nww+1YMECRaNRFRcXJ/tUAIA0l/Sn4/7973/rxRdf1PXr1zVs2DBNnDhRNTU1ys3NTfapAABpzuec\nc9ZN/K9oNKpgMGjdBh7DL37xC881o0aN8lwzceJEzzVPP/205xo8mTt37niuSeQZkj/96U+ea2Aj\nEokoIyOj02NYOw4AYIYQAgCYIYQAAGYIIQCAGUIIAGCGEAIAmCGEAABmCCEAgBlCCABghhACAJgh\nhAAAZgghAIAZFjCFxowZk1BdVVWV55pAIJDQudAzVVdXe6755je/6bnmxo0bnmvw5FjAFADQrRFC\nAAAzhBAAwAwhBAAwQwgBAMwQQgAAM4QQAMAMIQQAMEMIAQDMEEIAADOEEADADCEEADBDCAEAzPSz\nbgD2Bg0alFBdd14R++9//3tCdT/72c8810QikYTO1RXmzJmTUN0Pf/jD5DbyOQoKCjzXjBw50nNN\novMBqcedEADADCEEADBDCAEAzBBCAAAzhBAAwAwhBAAwQwgBAMwQQgAAM4QQAMAMIQQAMEMIAQDM\nEEIAADMsYAr985//TKhuwYIFSe4kefbt25dQXVtbW5I7SZ5+/bz/d71+/XpC5+qqBUwB7oQAAGYI\nIQCAGUIIAGCGEAIAmCGEAABmCCEAgBlCCABghhACAJghhAAAZgghAIAZQggAYIYQAgCYYQFT6NNP\nP02obs+ePUnuJHkGDBiQUN2kSZM81yxatCihc3k1ePBgzzXf/va3U9BJ8pw+fdpzzeXLl5PfCMxw\nJwQAMEMIAQDMeA6h48ePa9asWcrOzpbP59PevXvj9jvnVFJSouzsbA0aNEhTp07V+fPnk9UvAKAH\n8RxCLS0tGjNmjMrKyjrcv2nTJm3evFllZWU6efKkQqGQZsyYoebm5iduFgDQs3h+Y0JRUZGKioo6\n3Oec05tvvqn169dr3rx5kqRt27YpKytLO3bs0Msvv/xk3QIAepSkviZUV1enhoYGFRYWxrb5/X5N\nmTJF1dXVHda0trYqGo3GDQBA75DUEGpoaJAkZWVlxW3PysqK7XtYaWmpgsFgbOTk5CSzJQBAN5aS\nd8f5fL64x865dtseWLdunSKRSGzU19enoiUAQDeU1A+rhkIhSffviMLhcGx7Y2Nju7ujB/x+v/x+\nfzLbAACkiaTeCeXl5SkUCqmioiK27e7du6qqqlJBQUEyTwUA6AE83wndvHlTFy9ejD2uq6vTmTNn\nNGTIEI0YMUKrVq3Sxo0bNXLkSI0cOVIbN27UU089pZdeeimpjQMA0p/nEProo480bdq02OPVq1dL\nkoqLi/W73/1Oa9eu1e3bt7V06VLduHFDEyZM0JEjRxQIBJLXNQCgR/A555x1E/8rGo0qGAxat4E0\nt3LlyoTqNm/enORO0Jldu3Z5rvnWt76Vgk6QCpFIRBkZGZ0ew9pxAAAzhBAAwAwhBAAwQwgBAMwQ\nQgAAM4QQAMAMIQQAMEMIAQDMEEIAADOEEADADCEEADBDCAEAzBBCAAAzrKKNHqmlpSWhuoEDBya5\nE3Smra3Nc83atWs91/zyl7/0XIMnxyraAIBujRACAJghhAAAZgghAIAZQggAYIYQAgCYIYQAAGYI\nIQCAGUIIAGCGEAIAmCGEAABmCCEAgJl+1g0Aj5LIgpUsRJoe+vTx/nPwxo0bPdecPXvWc40k/eUv\nf0moDo+POyEAgBlCCABghhACAJghhAAAZgghAIAZQggAYIYQAgCYIYQAAGYIIQCAGUIIAGCGEAIA\nmCGEAABmWMAU3d7vf/97zzUtLS0Jnev73/++55r8/HzPNQcOHPBcs2HDBs81/fol9l/85z//ueea\n6dOne67p27ev55oBAwZ4rhk9erTnGokFTLsCd0IAADOEEADADCEEADBDCAEAzBBCAAAzhBAAwAwh\nBAAwQwgBAMwQQgAAM4QQAMAMIQQAMEMIAQDM+JxzzrqJ/xWNRhUMBq3bQC8VCoU81ySygOnHH3/s\nuebTTz/1XNOVpk2b5rnm3Xff9VyTyL9RogvaLliwwHPNkSNHEjpXTxSJRJSRkdHpMdwJAQDMEEIA\nADOeQ+j48eOaNWuWsrOz5fP5tHfv3rj9ixcvls/nixsTJ05MVr8AgB7Ecwi1tLRozJgxKisr+9xj\nZs6cqWvXrsXGoUOHnqhJAEDP5PnXLhYVFamoqKjTY/x+f0IvHgIAepeUvCZUWVmpzMxMjRo1SkuW\nLFFjY+PnHtva2qpoNBo3AAC9Q9JDqKioSO+9956OHj2qN954QydPntT06dPV2tra4fGlpaUKBoOx\nkZOTk+yWAADdlOen4x5l4cKFsT/n5+dr3Lhxys3N1cGDBzVv3rx2x69bt06rV6+OPY5GowQRAPQS\nSQ+hh4XDYeXm5qq2trbD/X6/X36/P9VtAAC6oZR/TqipqUn19fUKh8OpPhUAIM14vhO6efOmLl68\nGHtcV1enM2fOaMiQIRoyZIhKSko0f/58hcNhXb58WT/+8Y81dOhQzZ07N6mNAwDSn+cQ+uijj+LW\niHrwek5xcbG2bt2qc+fOafv27frvf/+rcDisadOmaefOnQoEAsnrGgDQI3gOoalTp6qzNU8PHz78\nRA0BlhoaGrqkpic6duyY55rbt2+noJP2Bg8enFBddnZ2kjvBw1g7DgBghhACAJghhAAAZgghAIAZ\nQggAYIYQAgCYIYQAAGYIIQCAGUIIAGCGEAIAmCGEAABmCCEAgBlCCABgJuW/WRVA79C3b1/PNT6f\nLwWdIJ1wJwQAMEMIAQDMEEIAADOEEADADCEEADBDCAEAzBBCAAAzhBAAwAwhBAAwQwgBAMwQQgAA\nM4QQAMAMC5gCSIr333/fc83//d//Jb+RDly/fj2hujNnziS3EbTDnRAAwAwhBAAwQwgBAMwQQgAA\nM4QQAMAMIQQAMEMIAQDMEEIAADOEEADADCEEADBDCAEAzBBCAAAzLGDajf3qV7/yXDN+/HjPNXPn\nzvVcI0nXrl1LqA5d52tf+1pCdStXrvRcM3/+/ITO1RUOHDiQUB0LmKYed0IAADOEEADADCEEADBD\nCAEAzBBCAAAzhBAAwAwhBAAwQwgBAMwQQgAAM4QQAMAMIQQAMEMIAQDMsIBpN7Zw4ULPNU8//bTn\nmu9+97ueaySpvLzcc81//vOfhM4FacaMGZ5r/vjHPyZ0royMjITqusI777zjuWbVqlXJbwRJwZ0Q\nAMAMIQQAMOMphEpLSzV+/HgFAgFlZmZqzpw5unDhQtwxzjmVlJQoOztbgwYN0tSpU3X+/PmkNg0A\n6Bk8hVBVVZWWLVummpoaVVRU6N69eyosLFRLS0vsmE2bNmnz5s0qKyvTyZMnFQqFNGPGDDU3Nye9\neQBAevP0xoQPPvgg7nF5ebkyMzN16tQpTZ48Wc45vfnmm1q/fr3mzZsnSdq2bZuysrK0Y8cOvfzy\ny8nrHACQ9p7oNaFIJCJJGjJkiCSprq5ODQ0NKiwsjB3j9/s1ZcoUVVdXd/h3tLa2KhqNxg0AQO+Q\ncAg557R69Wo999xzys/PlyQ1NDRIkrKysuKOzcrKiu17WGlpqYLBYGzk5OQk2hIAIM0kHELLly/X\n2bNn9f7777fb5/P54h4759pte2DdunWKRCKxUV9fn2hLAIA0k9CHVVesWKH9+/fr+PHjGj58eGx7\nKBSSdP+OKBwOx7Y3Nja2uzt6wO/3y+/3J9IGACDNeboTcs5p+fLl2r17t44ePaq8vLy4/Xl5eQqF\nQqqoqIhtu3v3rqqqqlRQUJCcjgEAPYanO6Fly5Zpx44d2rdvnwKBQOx1nmAwqEGDBsnn82nVqlXa\nuHGjRo4cqZEjR2rjxo166qmn9NJLL6XkCwAApC9PIbR161ZJ0tSpU+O2l5eXa/HixZKktWvX6vbt\n21q6dKlu3LihCRMm6MiRIwoEAklpGADQc/icc866if8VjUYVDAat2+gWampqPNeMHz8+BZ107OLF\ni55rEll88sMPP/Rc091973vf81zzjW98w3NNIgvadqVjx455rpkzZ47nmps3b3quwZOLRCKPXAyX\nteMAAGYIIQCAGUIIAGCGEAIAmCGEAABmCCEAgBlCCABghhACAJghhAAAZgghAIAZQggAYIYQAgCY\nIYQAAGZYRbsby8nJ8Vyza9cuzzVjx471XIOe7fr1655rDhw44Lnmwa+H8eLUqVOea2CDVbQBAN0a\nIQQAMEMIAQDMEEIAADOEEADADCEEADBDCAEAzBBCAAAzhBAAwAwhBAAwQwgBAMwQQgAAMyxg2sMU\nFhZ6rtm+fXtC53rUwoQd8fv9CZ0LUltbm+ea8vLyhM61ZcsWzzVnzpxJ6FzouVjAFADQrRFCAAAz\nhBAAwAwhBAAwQwgBAMwQQgAAM4QQAMAMIQQAMEMIAQDMEEIAADOEEADADCEEADDDAqZI2OzZsz3X\njB492nPNa6+95rmmK9XW1nqu+e1vf+u55ubNm55r3nrrLc81QLKwgCkAoFsjhAAAZgghAIAZQggA\nYIYQAgCYIYQAAGYIIQCAGUIIAGCGEAIAmCGEAABmCCEAgBlCCABghgVMAQApwQKmAIBujRACAJjx\nFEKlpaUaP368AoGAMjMzNWfOHF24cCHumMWLF8vn88WNiRMnJrVpAEDP4CmEqqqqtGzZMtXU1Kii\nokL37t1TYWGhWlpa4o6bOXOmrl27FhuHDh1KatMAgJ6hn5eDP/jgg7jH5eXlyszM1KlTpzR58uTY\ndr/fr1AolJwOAQA91hO9JhSJRCRJQ4YMidteWVmpzMxMjRo1SkuWLFFjY+Pn/h2tra2KRqNxAwDQ\nOyT8Fm3nnGbPnq0bN27oxIkTse07d+7UF77wBeXm5qqurk4/+clPdO/ePZ06dUp+v7/d31NSUqLX\nXnst8a8AANAtPc5btOUStHTpUpebm+vq6+s7Pe7q1auuf//+bteuXR3uv3PnjotEIrFRX1/vJDEY\nDAYjzUckEnlklnh6TeiBFStWaP/+/Tp+/LiGDx/e6bHhcFi5ubmqra3tcL/f7+/wDgkA0PN5CiHn\nnFasWKE9e/aosrJSeXl5j6xpampSfX29wuFwwk0CAHomT29MWLZsmd59913t2LFDgUBADQ0Namho\n0O3btyVJN2/e1Kuvvqq//e1vunz5siorKzVr1iwNHTpUc+fOTckXAABIY15eB9LnPO9XXl7unHPu\n1q1brrCw0A0bNsz179/fjRgxwhUXF7srV6489jkikYj585gMBoPBePLxOK8JsYApACAlWMAUANCt\nEUIAADOEEADADCEEADBDCAEAzBBCAAAzhBAAwAwhBAAwQwgBAMwQQgAAM4QQAMAMIQQAMEMIAQDM\nEEIAADOEEADADCEEADBDCAEAzBBCAAAzhBAAwAwhBAAwQwgBAMwQQgAAM4QQAMAMIQQAMEMIAQDM\ndLsQcs5ZtwAASILH+X7e7UKoubnZugUAQBI8zvdzn+tmtx5tbW26evWqAoGAfD5f3L5oNKqcnBzV\n19crIyPDqEN7XIf7uA73cR3u4zrc1x2ug3NOzc3Nys7OVp8+nd/r9Ouinh5bnz59NHz48E6PycjI\n6NWT7AGuw31ch/u4DvdxHe6zvg7BYPCxjut2T8cBAHoPQggAYCatQsjv92vDhg3y+/3WrZjiOtzH\ndbiP63Af1+G+dLsO3e6NCQCA3iOt7oQAAD0LIQQAMEMIAQDMEEIAADNpFUJbtmxRXl6eBg4cqLFj\nx+rEiRPWLXWpkpIS+Xy+uBEKhazbSrnjx49r1qxZys7Ols/n0969e+P2O+dUUlKi7OxsDRo0SFOn\nTtX58+dtmk2hR12HxYsXt5sfEydOtGk2RUpLSzV+/HgFAgFlZmZqzpw5unDhQtwxvWE+PM51SJf5\nkDYhtHPnTq1atUrr16/X6dOn9fzzz6uoqEhXrlyxbq1LPfPMM7p27VpsnDt3zrqllGtpadGYMWNU\nVlbW4f5NmzZp8+bNKisr08mTJxUKhTRjxowetw7ho66DJM2cOTNufhw6dKgLO0y9qqoqLVu2TDU1\nNaqoqNC9e/dUWFiolpaW2DG9YT48znWQ0mQ+uDTx1a9+1b3yyitx27785S+7H/3oR0Yddb0NGza4\nMWPGWLdhSpLbs2dP7HFbW5sLhULu9ddfj227c+eOCwaD7q233jLosGs8fB2cc664uNjNnj3bpB8r\njY2NTpKrqqpyzvXe+fDwdXAufeZDWtwJ3b17V6dOnVJhYWHc9sLCQlVXVxt1ZaO2tlbZ2dnKy8vT\nokWLdOnSJeuWTNXV1amhoSFubvj9fk2ZMqXXzQ1JqqysVGZmpkaNGqUlS5aosbHRuqWUikQikqQh\nQ4ZI6r3z4eHr8EA6zIe0CKHr16/rs88+U1ZWVtz2rKwsNTQ0GHXV9SZMmKDt27fr8OHDevvtt9XQ\n0KCCggI1NTVZt2bmwb9/b58bklRUVKT33ntPR48e1RtvvKGTJ09q+vTpam1ttW4tJZxzWr16tZ57\n7jnl5+dL6p3zoaPrIKXPfOh2q2h35uFf7eCca7etJysqKor9efTo0Zo0aZK+9KUvadu2bVq9erVh\nZ/Z6+9yQpIULF8b+nJ+fr3Hjxik3N1cHDx7UvHnzDDtLjeXLl+vs2bP661//2m5fb5oPn3cd0mU+\npMWd0NChQ9W3b992P8k0Nja2+4mnNxk8eLBGjx6t2tpa61bMPHh3IHOjvXA4rNzc3B45P1asWKH9\n+/fr2LFjcb/6pbfNh8+7Dh3prvMhLUJowIABGjt2rCoqKuK2V1RUqKCgwKgre62trfrkk08UDoet\nWzGTl5enUCgUNzfu3r2rqqqqXj03JKmpqUn19fU9an4457R8+XLt3r1bR48eVV5eXtz+3jIfHnUd\nOtJt54PhmyI8+cMf/uD69+/v3nnnHfePf/zDrVq1yg0ePNhdvnzZurUus2bNGldZWekuXbrkampq\n3AsvvOACgUCPvwbNzc3u9OnT7vTp006S27x5szt9+rT717/+5Zxz7vXXX3fBYNDt3r3bnTt3zr34\n4osuHA67aDRq3HlydXYdmpub3Zo1a1x1dbWrq6tzx44dc5MmTXJf/OIXe9R1+MEPfuCCwaCrrKx0\n165di41bt27FjukN8+FR1yGd5kPahJBzzv361792ubm5bsCAAe7ZZ5+Neztib7Bw4UIXDodd//79\nXXZ2tps3b547f/68dVspd+zYMSep3SguLnbO3X9b7oYNG1woFHJ+v99NnjzZnTt3zrbpFOjsOty6\ndcsVFha6YcOGuf79+7sRI0a44uJid+XKFeu2k6qjr1+SKy8vjx3TG+bDo65DOs0HfpUDAMBMWrwm\nBADomQghAIAZQggAYIYQAgCYIYQAAGYIIQCAGUIIAGCGEAIAmCGEAABmCCEAgBlCCABghhACAJj5\nfwUFHO8WffH6AAAAAElFTkSuQmCC\n" } } ], "source": [ "plt.imshow(X_real[0].reshape(28,28),cmap=\"gray\")" ], "id": "bd8dea27-2d63-477e-b4b2-d4412cc1139d" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` 진짜 이미지를 경찰한테 한장 줘볼까? $\\to$ yhat이 나올텐데, 이 값이\n", "0이어야 함" ], "id": "5960c455-f844-40b3-acd3-d3c0b9b2d5e2" }, { "cell_type": "code", "execution_count": 12, "metadata": { "tags": [] }, "outputs": [], "source": [ "yhat_real = net_police(X_real[[0]]) # 이 값이 0이어야 하는데..\n", "yhat_real" ], "id": "7390b7a2-0712-4c19-81c5-9186f847d55d" }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 진짜 이미지가 입력으로 왔으므로 `yhat_real` $\\approx$ `0` 이어야 함\n", "- 그런데 0과 거리가 멀어보임. (=배운것이 없는 무능한 경찰)\n", "\n", "***<경찰이 가짜이미지를 봤다면>***\n", "\n", "`-` 가짜이미지 – 데이터셋이 있는게 아니고 net_faker가 생성해야하는\n", "데이터" ], "id": "e9542343-73d9-40b7-b715-c95f2dd083d6" }, { "cell_type": "code", "execution_count": 13, "metadata": { "tags": [] }, "outputs": [], "source": [ "Noise = torch.randn(1,4)\n", "Noise" ], "id": "b529a779-e18e-4cc8-a8fb-33e234161034" }, { "cell_type": "code", "execution_count": 14, "metadata": { "tags": [] }, "outputs": [], "source": [ "net_faker(Noise).shape # 페이커가 만든 가짜 이미지" ], "id": "810e572d-9e08-4748-a68e-364153a11938" }, { "cell_type": "code", "execution_count": 15, "metadata": { "tags": [] }, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "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\nH8speixs/mp2AAAAAElFTkSuQmCC\n" } } ], "source": [ "plt.imshow(net_faker(Noise).data.reshape(28,28),cmap=\"gray\")" ], "id": "76f27f7e-1dee-425f-b9c1-d0372a9b6e77" }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 누가봐도 가짜이미지\n", "\n", "`-` 가짜 이미지를 경찰한테 한장 줘볼까? $\\to$ yhat이 나올텐데, 이 값이\n", "1이어야 함" ], "id": "e3577f2e-3cd3-442a-97a4-6be011ee0825" }, { "cell_type": "code", "execution_count": 16, "metadata": { "tags": [] }, "outputs": [], "source": [ "yhat_fake = net_police(net_faker(Noise).data) # 이 값이 1이어야 하는데..\n", "yhat_fake" ], "id": "4d018efd-49f3-4491-a204-1f93b41fd6c4" }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 가짜 이미지가 입력으로 왔으므로 `yhat_fake` $\\approx$ `1` 이어야 함\n", "- 그런데 1과 거리가 멀어보임. (=배운것이 없는 무능한 경찰)\n", "\n", "`-` 페이커의 무능함 (왼쪽 이미지를 가짜이미라고 만들어 놓았음) + 경찰의\n", "무능함 (왼쪽과 오른쪽을 보고 뭐가 진짜인지도 모름)" ], "id": "5d171b17-3679-4088-bd88-fdf2fe9e5bf7" }, { "cell_type": "code", "execution_count": 17, "metadata": { "tags": [] }, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "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\nSFBISEjBpUWLFuW9JABVXGnrhkTtAKqzcm8+Bg8erBtvvFGxsbEaOHCgPvroI0nSvHnzir395MmT\nlZ6eXnBJSUkp7yUBqOJKWzckagdQnVX4qbZBQUGKjY3V7t27i80DAgJcvz4dQO3iVjckagdQnVV4\n85GTk6OdO3eqd+/epdru4YcfVlBQULGZ26fg3fJjx46Z+bhx48z8k08+MXO388jd5ohI0sCBA838\n6NGjZu5WlGfPnm3mvXr1MvPw8HAzd5u10qNHDzPfuXOnma9du9bM3Z7fO++8Y+ZRUVFm3rBhQzOX\nyj4r5NlnnzXz1q1bm3lsbKyZ+3y+c8q8cK51A9Lf/vY3M2/Tpo2Zu80patq0aanXVBpDhgwxc7fX\n1XXXXVem3G0G0OjRo838n//8p5njX8r9bZe//OUvSkpKUnJysr788kuNGDFCGRkZrj8wALUXdQOo\nXcr9yMeBAwd0yy236PDhw7rgggvUvXt3ffHFF4qOji7vhwJQQ1A3gNql3JuPhQsXlvddAqjhqBtA\n7cIXywEAAE/RfAAAAE/RfAAAAE/RfAAAAE/5HMdxKnsRhWVkZCgkJETTp09XYGBgsbcJCQkx7yMm\nJsbM3c7D7tevn5kvW7bMzN3Wt3nzZjOXpKFDh5p58+bNzbxJkyZm/t///d9m7jbnonHjxmberl07\nMz9w4ICZf/PNN2Z+zTXXmLnbLJWePXuauduckrS0NDOXpAEDBph5amqqmbvNW3Cb5WKNJpdknkly\n4sQJjRkzRunp6a6/S1VFfu2oyTp27Oh6m6SkJDMPDg4ur+XUSm5znK6//noz//XXX8tzOVVSSeoG\nRz4AAICnaD4AAICnaD4AAICnaD4AAICnaD4AAICnaD4AAICnaD4AAICnaD4AAICnyv1bbcvLyZMn\nz3lbtwFTbgOi3B7bbUDVzJkzzfzSSy81c0ny+Xxm/thjj5n5VVddZeZuQ7pyc3PN3I3bkLKjR4+a\n+YgRI8y8Xj37V9dtgJfb78All1xi5jfddJOZS/8atGO58MILzXzXrl1m7vYc3fahNeitLK8/VBx/\ngxcLq+ghYl999ZWZ/+d//qeZu70uyuqGG24w8wcffLBM9+9W/1u3bm3mbvuvtuDIBwAA8BTNBwAA\n8BTNBwAA8BTNBwAA8BTNBwAA8BTNBwAA8BTNBwAA8FSVnfOxZcsW1a9fv9gsJibG3HbevHlm3q1b\nNzP/29/+ZuYDBw408+nTp5v53r17zbwkQkJCyvQYjzzyiJlfeeWVZv7000+b+ZdffmnmWVlZZu6m\nTh27b27atKmZu83pOHXqlJmff/75Zi5JK1euNHO3eQyRkZFmfsEFF5j5/v37zdzah47jmNuicrjN\nfpHc57uU1eLFi808Ly+vQh/fbcbP4cOHzbyscz5QPjjyAQAAPEXzAQAAPEXzAQAAPEXzAQAAPEXz\nAQAAPEXzAQAAPEXzAQAAPOVzSnlC/+rVq/Xss89q06ZNSk1N1fvvv68bbrihIHccR0899ZRefvll\n/frrr+rWrZtefPFFtW/fvkT3n5GRoZCQEE2cOFEBAQHF3ubiiy8276NFixZm/tlnn5n55s2bzdxt\nhsTll19u5m3btjVzSWrQoIGZN2vWzMzXrl1r5m7n4u/bt8/M3c71/+qrr8x8zpw5Zv7dd9+Z+XXX\nXWfm2dnZZu42p8NtxobbDA9JioqKMvPGjRub+ZQpU8z89ttvN/PmzZubufWazMzMVI8ePZSenq4m\nTZqY91MSFV03pP+/dqBiudWmHj16mPnNN99cpscPCgoy8z/+8Y9lun83W7ZsMfMhQ4aYeVpaWnku\np0oqSd0o9ZGPrKwsdezYUTNnziw2nz59umbMmKGZM2dqw4YNioiI0KBBg3T8+PHSPhSAGoK6AaCw\nUk84HTx4sAYPHlxs5jiOXnjhBT322GMaPny4pH9NGw0PD9eCBQs0bty4sq0WQLVE3QBQWLl+5iM5\nOVkHDx5UXFxcwXUBAQHq27ev1q1bV+w2OTk5ysjIKHIBUHucS92QqB1AdVauzcfBgwclSeHh4UWu\nDw8PL8h+KyEhQSEhIQUXt89rAKhZzqVuSNQOoDqrkLNdfD5fkX87jnPWdfkmT56s9PT0gktKSkpF\nLAlAFVeauiFRO4DqrFy/1TYiIkLSv/6SKXy2QFpa2ll/1eQLCAjwe1YLgJrvXOqGRO0AqrNyPfIR\nExOjiIgIJSYmFlyXm5urpKQk9ezZszwfCkANQd0Aap9SH/nIzMzUnj17Cv6dnJysrVu3KjQ0VC1b\nttSECRM0depUtW7dWq1bt9bUqVPVqFEj3XrrraV6nOHDh/udg+A2A2LRokVmnv+Xlj9Dhw418y+/\n/NLMV6xYYeZnzpwxc0kKDQ01819++cXM3c4137Vrl5lnZmaa+fTp08383XffNXO3Dwe6vX9fmvkP\n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\nTkSuQmCC\n" } } ], "source": [ "fig, ax = plt.subplots(1,2)\n", "ax[0].imshow(net_faker(Noise).data.reshape(28,28),cmap=\"gray\"); ax[0].set_title(\"fake\")\n", "ax[1].imshow(X_real[[0]].reshape(28,28),cmap=\"gray\"); ax[1].set_title(\"real\")" ], "id": "4207b17b-77a1-4514-b3c9-73a1064d139e" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## E. 똑똑해진 경찰" ], "id": "a00f3b49-6f23-4bc0-a958-887121dc6d74" }, { "cell_type": "code", "execution_count": 18, "metadata": { "tags": [] }, "outputs": [], "source": [ "X_real.shape" ], "id": "0464e239-fd21-479b-9104-54e57d0dfe87" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` 데이터 정리\n", "\n", "- 원래 $n=6131$개의 이미지 자료가 있음. 이를 ${\\bf X}_{real}$ 라고\n", " 하자. 따라서 ${\\bf X}_{real}$ 의 차원은 (6131,1,28,28).\n", "- 위조범이 만든 가짜자료를 원래 자료와 같은 숫자인 6131개 만듦. 이\n", " 가짜자료를 ${\\bf X}_{fake}$ 라고 하자. 따라서 ${\\bf X}_{fake}$ 의\n", " 차원은 (6131,1,28,28).\n", "- 진짜자료는 0, 가짜자료는 1으로 라벨링." ], "id": "505b2b9b-e438-40a5-ad18-5ecc9045a5f0" }, { "cell_type": "code", "execution_count": 19, "metadata": { "tags": [] }, "outputs": [], "source": [ "Noise = torch.randn(6131,4)\n", "X_fake = net_faker(Noise).data\n", "y_real = torch.tensor([0]*6131).reshape(-1,1).float()\n", "y_fake = torch.tensor([1]*6131).reshape(-1,1).float()" ], "id": "cbfedf23-b6ec-4bc2-baa7-c1716a627627" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` step1: X_real, X_fake를 보고 각가 yhat_real, yhat_fake를 만드는 과정" ], "id": "c2fac5f9-6d34-4c7a-adff-fb5da83cdb0a" }, { "cell_type": "code", "execution_count": 20, "metadata": { "tags": [] }, "outputs": [], "source": [ "yhat_real = net_police(X_real)\n", "yhat_fake = net_police(X_fake)" ], "id": "67b57d56-7e6d-486b-aeb7-d98b4cdb8bc0" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` step2: 손실을 계산 – 경찰의 미덕은 (1) 가짜이미지를 가짜라고 하고\n", "(yhat_fake $\\approx$ y_fake) (2) 진짜이미지를 진짜라고 해야한다.\n", "(yhat_real $\\approx$ y_real)" ], "id": "862b52ce-d3e6-46af-8ac5-5a0af4105e1d" }, { "cell_type": "code", "execution_count": 21, "metadata": { "tags": [] }, "outputs": [], "source": [ "bce = torch.nn.BCELoss()\n", "loss_police = bce(yhat_fake,y_fake) + bce(yhat_real,y_real)\n", "loss_police" ], "id": "631023f4-4a9c-4284-9788-4204065ddaa3" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` step3~4는 별로 특별한게 없음. 그래서 바로 epoch을 진행시켜보자." ], "id": "e16c3783-4aa4-41fa-8d33-e062d1fed5b1" }, { "cell_type": "code", "execution_count": 22, "metadata": { "tags": [] }, "outputs": [], "source": [ "##\n", "net_police = torch.nn.Sequential(\n", " torch.nn.Flatten(),\n", " torch.nn.Linear(in_features=784,out_features=30),\n", " torch.nn.ReLU(),\n", " torch.nn.Linear(in_features=30,out_features=1),\n", " torch.nn.Sigmoid()\n", ")\n", "bce = torch.nn.BCELoss()\n", "optimizr_police = torch.optim.Adam(net_police.parameters())\n", "##\n", "for epoc in range(30):\n", " Noise = torch.randn(6131,4) \n", " X_fake = net_faker(Noise).data\n", " ## step1 \n", " yhat_real = net_police(X_real)\n", " yhat_fake = net_police(X_fake)\n", " ## step2\n", " loss_police = bce(yhat_real,y_real) + bce(yhat_fake,y_fake)\n", " ## step3 \n", " loss_police.backward()\n", " ## step4 \n", " optimizr_police.step()\n", " optimizr_police.zero_grad()" ], "id": "f4efa266-0721-40c2-85d8-78ced44d5873" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` 훈련된 경찰의 성능을 살펴보자." ], "id": "2884b32e-0a3f-4909-845a-9c1ddea5ca8e" }, { "cell_type": "code", "execution_count": 23, "metadata": { "tags": [] }, "outputs": [], "source": [ "net_police(X_real) # 거의 0으로!" ], "id": "0d50c334-f5ab-43b6-ba27-1520d27ff07a" }, { "cell_type": "code", "execution_count": 24, "metadata": { "tags": [] }, "outputs": [], "source": [ "net_police(X_fake) # 거의 1로!" ], "id": "04a58343-0e34-4624-b5fa-3b5120a84249" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` 꽤 우수한 경찰이 되었음" ], "id": "04017582-2948-4073-b0e8-7b5c05f2afce" }, { "cell_type": "code", "execution_count": 25, "metadata": { "tags": [] }, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAEhCAYAAADfxcKRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9h\nAAAPYQGoP6dpAAAuEklEQVR4nO3de1RVdf7/8ddJAdEQReLi/Z6llmVeMu8pidWqzBnNqa/2TatJ\nbcxplda3kWrSrNHxO1lONWXWZFmZqeWUmIqWl1HT1OyieUMFbykoKoru3x/zhZ8kvD8gsAF9PtY6\na8V5nX34sD28e7PP2e8d8DzPEwAAgE8uKe0FAACAiwvNBwAA8BXNBwAA8BXNBwAA8BXNBwAA8BXN\nBwAA8BXNBwAA8BXNBwAA8BXNBwAA8BXNB/I1Y8YMNW/eXKGhoQoEAlq3bl2BtnvrrbcUCAS0evXq\nkl0ggItadq3Zvn17aS8FhUTzgTzt379f99xzjxo1aqTPP/9cy5cvV9OmTUt7WQCAC0DF0l4Ayqaf\nfvpJp06d0t13360uXbqU9nIAlHPHjh1T5cqVS3sZKCM48oFzDBo0SB07dpQk9evXT4FAQF27dtXq\n1avVv39/1a9fX6Ghoapfv77uuusu7dixw/mcKSkpat26tZo0aaLNmzdLktLT0/Xoo4+qQYMGCg4O\nVq1atTRixAhlZGSU6M8HoGQlJCQoEAjom2++Ud++fVW9enU1atRInufplVdeUatWrRQaGqrq1aur\nb9++2rp1a67tExMTddttt6l27dqqVKmSGjdurAceeEAHDhwopZ8IxY0jHzjHU089pbZt22ro0KEa\nO3asunXrpqpVq2rTpk26/PLL1b9/f0VERCglJUVTpkxRmzZttGnTJkVGRub5fBs3blTv3r1Vu3Zt\nLV++XJGRkTp27Ji6dOmiXbt26YknntBVV12l7777Tn/605+0YcMGLViwQIFAwOefHEBx6tOnj/r3\n768HH3xQGRkZeuCBB/TWW2/p4Ycf1vjx4/XLL7/omWeeUYcOHfTtt98qOjpakvTzzz/r+uuv1+DB\ngxUeHq7t27dr4sSJ6tixozZs2KCgoKBS/slQZB6Qh0WLFnmSvA8//DDfx2RlZXlHjx71qlSp4v3v\n//5vzv1Tp071JHmrVq3yEhMTvapVq3p9+/b1jh8/nvOYcePGeZdccom3atWqXM/50UcfeZK8efPm\nFf8PBcAXY8aM8SR5f/rTn3LuW758uSfJmzBhQq7HJicne6Ghod5jjz2W53OdOXPGO3XqlLdjxw5P\nkjd79uycLLvWbNu2rUR+DpQc3nZBgR09elSPP/64GjdurIoVK6pixYq69NJLlZGRoe+///6cx0+b\nNk29e/fW4MGD9cEHH6hSpUo52aeffqoWLVqoVatWysrKyrnddNNNCgQCWrx4sY8/GYCScOedd+b8\n96effqpAIKC777471+98TEyMrr766ly/8/v27dODDz6oOnXqqGLFigoKClK9evUkKc9ag/KHt11Q\nYAMGDNCXX36pp556Sm3atFHVqlUVCATUu3dvHT9+/JzHv//++woNDdXgwYPPeQtl79692rJlS76H\nT3lvFyj/YmNjc/5779698jwv562VX2vYsKEk6cyZM4qLi9OePXv01FNPqWXLlqpSpYrOnDmj9u3b\n51lrUP7QfKBA0tLS9Omnn2rMmDEaNWpUzv2ZmZn65Zdf8tzm3Xff1VNPPaUuXbpo/vz5atWqVU4W\nGRmp0NBQvfnmm3lum9/nRwCUH2f/0REZGalAIKClS5cqJCTknMdm37dx40Z9++23euuttzRw4MCc\nfMuWLSW/YPiG5gMFEggE5HneOUXjH//4h06fPp3nNhEREVqwYIFuueUWdevWTf/617/Uvn17SdIt\nt9yisWPHqkaNGmrQoEGJrx9A6brlllv0/PPPa/fu3frtb3+b7+OyG5Zf15pXX321RNcHf9F8oECq\nVq2qzp0768UXX1RkZKTq16+vpKQkvfHGG6pWrVq+24WFhenzzz9Xnz591LNnT82ZM0fdunXTiBEj\nNHPmTHXu3FmPPPKIrrrqKp05c0Y7d+7U/Pnz9cc//lHt2rXz7wcEUKJuuOEG3X///br33nu1evVq\nde7cWVWqVFFKSoq++uortWzZUr///e/VrFkzNWrUSKNGjZLneYqIiNDcuXOVmJhY2j8CihHNBwps\n+vTp+sMf/qDHHntMWVlZuuGGG5SYmKibb77Z3C40NFSzZ8/WgAED1Lt3b82cOVO9e/fW0qVL9fzz\nz+u1117Ttm3bFBoaqrp166pHjx6qX7++Pz8UAN+8+uqrat++vV599VW98sorOnPmjGrWrKkbbrhB\nbdu2lSQFBQVp7ty5+sMf/qAHHnhAFStWVI8ePbRgwQLVrVu3lH8CFJeA53leaS8CAABcPDjVFgAA\n+IrmAwAA+IrmAwAA+IrmAwAA+IrmAwAA+IrmAwAA+KrMzfk4c+aM9uzZo7CwMC6pDpQSz/N05MgR\n1axZU5dcUj7+RqF2AKWrUHWjpC6X+/LLL3v169f3QkJCvGuvvdZbsmRJgbZLTk72JHHjxq0M3JKT\nk0uqROTpfOuG51E7uHErK7eC1I0SOfIxY8YMjRgxQq+88opuuOEGvfrqq4qPj9emTZucE+rCwsIk\n/edSzPld8XT79u3mc9SuXdvMXdcS6datm5mPHz/ezAcMGGDmM2fONHPJvca0tDQz3717t5mffZG3\nvHiO2XNff/21maekpJj5ww8/bOY///yzma9Zs6ZIz5+VlWXm69atM/NFixaZuSTn5NeuXbua+cKF\nC8388OHDZm6NvZdkTpE9fvy4Hn/88ZzfRz8UpW5I8nWtAPJXkN/FEmk+Jk6cqPvuu0+DBw+WJE2a\nNElffPGFpkyZonHjxpnbZh8uDQoKUnBwcJ6PqVjRXnZ+TUu2vK6oeLYqVaqYuev7h4aGmrlrfZLy\n/dkLmrvW6NoHruajQoUKZu465FapUiUzd/18ru9fuXJlMz916pSZu/aP6/sX5DlcrzPX9q595Nre\n9TqV5OvbF0WpG5K/awWQv4L8Lhb7m7knT57UmjVrFBcXl+v+uLg4LVu27JzHZ2ZmKj09PdcNwMWl\nsHVDonYA5VmxNx8HDhzQ6dOnFR0dnev+6OhopaamnvP4cePGKTw8POdWp06d4l4SgDKusHVDonYA\n5VmJfYz914ddPM/L81DM6NGjlZaWlnNLTk4uqSUBKOMKWjckagdQnhX7Zz4iIyNVoUKFc/5a2bdv\n3zl/1Uj/eV/a9d40gAtbYeuGRO0AyrNibz6Cg4PVunVrJSYm6o477si5PzExUbfddluBnyciIiLf\nwhIbG2tuu23bNjM/cuSImf/97383c9cn713bu87EkKT9+/eb+aZNm8y8adOmZu46W6ZJkyZm7jrT\n4t133zVz19kqrk9L16xZ08zr1atn5s8995yZu85EadiwoZlL0q5du8x848aNZu4646lt27Zm/sEH\nH5i5ddaY6wO5xa246gaA8qFEznYZOXKk7rnnHl133XW6/vrr9dprr2nnzp168MEHS+LbAbgAUDeA\ni0eJNB/9+vXTwYMH9cwzzyglJUUtWrTQvHnznH+NArh4UTeAi0eJjVd/6KGH9NBDD5XU0wO4AFE3\n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\nYOZjx4418yFDhpj5s88+a+au+Q+SdOTIETNv06aNmS9YsMDMO3bsaOaufdSzZ08zj4yMNPMtW7aY\nuWvOiWsOSI0aNYr0/H379jXzqKgoM5ekOXPmmPlf//pXM7/tttvM3DUPoWHDhmb+008/5ZudPHnS\n3BZl1+DBg8382muvNfP86m62o0ePmvmHH35o5q45I19++aWZu16bL730kplXq1bNzF31+YUXXjBz\nFAxHPgAAgK9oPgAAgK9oPgAAgK9oPgAAgK9oPgAAgK9oPgAAgK9oPgAAgK8KPedjyZIlevHFF7Vm\nzRqlpKRo1qxZuv3223Nyz/P09NNP67XXXtOhQ4fUrl07vfzyy2revHmhvs+JEyd0+vTpPDPXc913\n331m/tFHH5l5o0aNzDw1NdXMO3XqZOYbNmwwc0m64oorzLxHjx5m/uabb5r5ihUrzLx79+5m7pq1\n8pe//MXMd+3aZeaTJ08285tvvtnMW7VqZeauOSCuOSULFy40c0kaPXq0mX/99ddmvnbtWjO/6qqr\nzLx69epmHhMTk2924sQJc9vC8qtuQNq8ebOZu16733zzjZm/+uqrZr5161YzL6oJEyaY+f3332/m\nZ86cMfPnnnvOzDdt2mTmKJhCH/nIyMjQ1Vdfne//HF544QVNnDhRkydP1qpVqxQTE6OePXs6h2YB\nuHBRNwCcrdBHPuLj4xUfH59n5nmeJk2apCeffFJ9+vSRJE2bNk3R0dGaPn26HnjggaKtFkC5RN0A\ncLZi/czHtm3blJqaqri4uJz7QkJC1KVLFy1btizPbTIzM5Wenp7rBuDicT51Q6J2AOVZsTYf2Z+F\niI6OznV/dHR0vp+TGDdunMLDw3NuderUKc4lASjjzqduSNQOoDwrkbNdAoFArq89zzvnvmyjR49W\nWlpazi05ObkklgSgjCtM3ZCoHUB5VqxXtc3+9Hxqamquq47u27fvnL9qsoWEhCgkJKQ4lwGgHDmf\nuiFRO4DyrFiPfDRo0EAxMTFKTEzMue/kyZNKSkpShw4divNbAbhAUDeAi0+hj3wcPXpUW7Zsyfl6\n27ZtWrdunSIiIlS3bl2NGDFCY8eOVZMmTdSkSRONHTtWlStX1oABAwr1fapVq6bg4OA8M9d52pMm\nTTLzpk2bmnmTJk3MfM+ePWb+zjvvmHmVKlXMXJLq169v5q5zzV1zQI4fP27m4eHhZt6yZUszd80a\n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\n7bXXmrlrOFVERISZ//qS8HlxzTvYsGGDmTdq1MjMf/nlFzN3zcNp0aJFvtmJEyfMbVF+ueZs9OrV\ny6eVlI6goCAzHzRokJlbH5yWpGuuucbMmfPxHxz5AAAAvqL5AAAAvqL5AAAAvqL5AAAAvqL5AAAA\nvqL5AAAAvqL5AAAAviqzcz6Cg4MVHBycZ7Z582Zz24MHD5r53r17i5THx8eb+c6dO808EAiYuSRd\ncondFzZu3NjMMzMzzbxevXpmvmDBAjN3zToZMmSImb/00ktm/re//c3Mf/zxRzPfunVrkfLY2Fgz\nP3z4sJlL0po1a8y8Vq1aZv7GG2+YecuWLc28bt26Zm69DgvyGgXKo//6r/8yc9eMJNcMpHfeeaew\nS7ooceQDAAD4iuYDAAD4iuYDAAD4iuYDAAD4iuYDAAD4iuYDAAD4iuYDAAD4qszO+Vi6dKmCgoLy\nzGJiYsxtw8PDzfyyyy4z8/zmi2SrXr26mS9dutTMmzVrZuaSe1bJgQMHzLxz585m7ppV4vr+Lunp\n6WZ+xx13mPnPP/9s5snJyWZ+5513mvm3335r5idPnjTzDh06mLkkpaSkmHlUVJSZt2nTxsyzsrLM\n3PUzpKam5pu55sSgZPTo0cPMXfN34K7PgwcPLtLzr1+/3sxdv5f4D458AAAAX9F8AAAAX9F8AAAA\nX9F8AAAAX9F8AAAAX9F8AAAAX9F8AAAAX5XZOR/x8fEKDQ3NM6tTp4657Z49e8z8lVdeMfOnn37a\nzJcvX27mrvXt3LnTzCVpw4YNZu6aFfLmm2+aed26dc28Ro0aZv7TTz+ZeatWrcx8/vz5Zu6aE1K/\nfn0zP3XqlJnv3r27SNu7/n0k6dixY2aelpZm5v369TPzhg0bmvlf/vIXM2/atGm+2YkTJ8xtcX4e\nffRRM3/hhRfM3DU7RpLuvvtuM1+0aJHzOcoyV22aMmWKmbdr187MXbVh5syZZo6CKdSRj3HjxqlN\nmzYKCwtTVFSUbr/9dv3444+5HuN5nhISElSzZk2Fhoaqa9eu+u6774p10QDKF2oHgLMVqvlISkrS\n0KFDtWLFCiUmJiorK0txcXHKyMjIecwLL7ygiRMnavLkyVq1apViYmLUs2dPHTlypNgXD6B8oHYA\nOFuh3nb5/PPPc309depURUVFac2aNercubM8z9OkSZP05JNPqk+fPpKkadOmKTo6WtOnT9cDDzxQ\n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\nmo/hw4drzpw5WrJkifPKm7GxsapXr542b96cZx4SEuK8giuACwO1A4BUyObD8zwNHz5cs2bN0uLF\ni9WgQQPnNgcPHlRycrJiY2PPe5EAyjdqB4CzFar5GDp0qKZPn67Zs2crLCxMqampkqTw8HCFhobq\n6NGjSkhI0J133qnY2Fht375dTzzxhCIjI3XHHXcUamGHDx/Od86Ba0ZEr169zNw1N+Cdd94x84ED\nB5q56y+6lStXmrkkdevWzcy//vprM//mm2/M3PUzbNmyxcwPHz5s5ldeeaWZu85o+PLLL828VatW\nZv7rDzL+Ws2aNc3cNeejffv2Zi5J11xzjZm7Zo24fobx48ebec+ePc3cmvNx6tQpc9vC8rN2ACj7\nCtV8TJkyRZLUtWvXXPdPnTpVgwYNUoUKFbRhwwa9/fbbOnz4sGJjY9WtWzfNmDFDYWFhxbZoAOUL\ntQPA2Qr9toslNDRUX3zxRZEWBODCQ+0AcDau7QIAAHxF8wEAAHxF8wEAAHxF8wEAAHxF8wEAAHwV\n8FwfQ/dZenq6wsPD1bdvXwUFBeX5mPzmf2RzzWho27atmR87dszMXbusatWqZr5161Yzl9wzHipX\nrmzm+e27bHPnzjXzpk2bmvnZ1+TIS1ZWlpnnd72ObL/88ouZHz161Mxd/0bXXXedmZ8+fdrMXf8+\nkrR79+4ifY89e/aY+e23327mEyZMOO/8yJEjatWqldLS0pyv57Iiu3YAKF0FqRsc+QAAAL6i+QAA\nAL6i+QAAAL6i+QAAAL6i+QAAAL6i+QAAAL4q1IXl/JB9iqR1Se8zZ86Yz+G6HLjrVFxX7jqNMzg4\n2MxPnjxp5pL7VNRLLrH7RtdpnK5TYV1rPH78eJG+v+vnc+Wu9bn+jYq6ftfp2JL7dVTUfZSRkWHm\nrt+DI0eO5Jtln8pcxs7EN5WntQIXsoL8Lpa5OR+7du1SnTp1SnsZACQlJyerdu3apb2MAqF2AGVD\nQepGmWs+zpw5oz179igsLEyBQEDp6emqU6eOkpOTy82wo7KGfVh0F9s+9DxPR44cUc2aNZ1H2coK\nakfxYx8WzcW2/wpTN8rc2y6XXHJJnh1T1apVL4p/vJLEPiy6i2kflrdpodSOksM+LJqLaf8VtG6U\njz9pAADABYPmAwAA+KrMNx8hISEaM2aMQkJCSnsp5Rb7sOjYh+UP/2ZFxz4sGvZf/srcB04BAMCF\nrcwf+QAAABcWmg8AAOArmg8AAOArmg8AAOArmg8AAOCrMt98vPLKK2rQoIEqVaqk1q1ba+nSpaW9\npDJryZIluvXWW1WzZk0FAgF98sknuXLP85SQkKCaNWsqNDRUXbt21XfffVc6iy2Dxo0bpzZt2igs\nLExRUVG6/fbb9eOPP+Z6DPuwfKBuFBx1o2ioG+enTDcfM2bM0IgRI/Tkk09q7dq16tSpk+Lj47Vz\n587SXlqZlJGRoauvvlqTJ0/OM3/hhRc0ceJETZ48WatWrVJMTIx69uxpXt30YpKUlKShQ4dqxYoV\nSkxMVFZWluLi4nJdPZZ9WPZRNwqHulE01I3z5JVhbdu29R588MFc9zVr1swbNWpUKa2o/JDkzZo1\nK+frM2fOeDExMd7zzz+fc9+JEye88PBw7+9//3sprLDs27dvnyfJS0pK8jyPfVheUDfOH3Wj6Kgb\nBVNmj3ycPHlSa9asUVxcXK774+LitGzZslJaVfm1bds2paam5tqfISEh6tKlC/szH2lpaZKkiIgI\nSezD8oC6Ubx4zRcedaNgymzzceDAAZ0+fVrR0dG57o+OjlZqamoprar8yt5n7M+C8TxPI0eOVMeO\nHdWiRQtJ7MPygLpRvHjNFw51o+AqlvYCXAKBQK6vPc875z4UHPuzYIYNG6b169frq6++OidjH5Z9\n/BsVL/ZnwVA3Cq7MHvmIjIxUhQoVzukM9+3bd04HCbeYmBhJYn8WwPDhwzVnzhwtWrRItWvXzrmf\nfVj2UTeKF6/5gqNuFE6ZbT6Cg4PVunVrJSYm5ro/MTFRHTp0KKVVlV8NGjRQTExMrv158uRJJSUl\nsT//j+d5GjZsmD7++GMtXLhQDRo0yJWzD8s+6kbx4jXvRt04T6X1SdeCeP/9972goCDvjTfe8DZt\n2uSNGDHCq1Klird9+/bSXlqZdOTIEW/t2rXe2rVrPUnexIkTvbVr13o7duzwPM/znn/+eS88PNz7\n+OOPvQ0bNnh33XWXFxsb66Wnp5fyysuG3//+9154eLi3ePFiLyUlJed27NixnMewD8s+6kbhUDeK\nhrpxfsp08+F5nvfyyy979erV84KDg71rr7025/QlnGvRokWepHNuAwcO9DzvP6d8jRkzxouJifFC\nQkK8zp07exs2bCjdRZchee07Sd7UqVNzHsM+LB+oGwVH3Sga6sb5CXie5/l3nAUAAFzsyuxnPgAA\nwIWJ5gMAAPiK5gMAAPiK5gMAAPiK5gMAAPiK5gMAAPiK5gMAAPiK5gMAAPiK5gMAAPiK5gMAAPiK\n5gMAAPjq/wFMpMPJVG5wMgAAAABJRU5ErkJggg==\n" } } ], "source": [ "fig, ax = plt.subplots(1,2)\n", "ax[0].imshow(X_fake[[-1]].data.reshape(28,28),cmap=\"gray\"); ax[0].set_title(\"fake\")\n", "ax[1].imshow(X_real[[-1]].reshape(28,28),cmap=\"gray\"); ax[1].set_title(\"real\")" ], "id": "27f00013-439e-4f03-b8d1-e7af75f616d3" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## F. 더 똑똑해지는 페이커\n", "\n", "`-` step1: Noise $\\to$ X_fake" ], "id": "dad573cc-eae1-46fe-b205-4c435b4baa18" }, { "cell_type": "code", "execution_count": 26, "metadata": { "tags": [] }, "outputs": [], "source": [ "Noise = torch.randn(6131,4)\n", "X_fake = net_faker(Noise) " ], "id": "9c11b5e0-2844-46d8-815b-d39f68c195a4" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` step2: 손실함수 – 페이커의 미덕은 (잘 훈련된) 경찰이 가짜이미지를\n", "진짜라고 판단하는 것. 즉 `yhat_fake` $\\approx$ `y_real` 이어야 페이커의\n", "실력이 우수하다고 볼 수 있음." ], "id": "519aed3d-fcb1-4cf8-8cce-eb135983afbe" }, { "cell_type": "code", "execution_count": 27, "metadata": { "tags": [] }, "outputs": [], "source": [ "yhat_fake = net_police(X_fake) \n", "loss_faker = bce(yhat_fake,y_real) ## 가짜이미지를 보고 잘 훈련된 경찰조차 진짜이미지라고 깜빡 속으면 위조범의 실력이 좋은 것임" ], "id": "ded32ace-c36c-4c3e-a82e-107ec746bb6a" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` step3~4는 별로 특별한게 없음. 그래서 바로 epoch을 진행시켜보자." ], "id": "2e49a44d-3b2b-4eab-ba26-f168c83d7fa1" }, { "cell_type": "code", "execution_count": 28, "metadata": { "tags": [] }, "outputs": [], "source": [ "net_faker = torch.nn.Sequential(\n", " torch.nn.Linear(in_features=4, out_features=64), # (n,4) -> (n,64) \n", " torch.nn.ReLU(),\n", " torch.nn.Linear(in_features=64, out_features=64), # (n,64) -> (n,64) \n", " torch.nn.ReLU(),\n", " torch.nn.Linear(in_features=64, out_features=784), # (n,64) -> (n,784) \n", " torch.nn.Sigmoid(), # 출력을 0~1로 눌러주는 역할.. -- 저는 이 레이어가 일종의 문화충격이었어요.. (시그모이드를 이렇게 쓴다고??)\n", " Reshape2828()\n", ")\n", "#bce = torch.nn.BCELoss()\n", "optimizr_faker = torch.optim.Adam(net_faker.parameters())\n", "#--#" ], "id": "71129701-5022-4a79-8448-c2744e85c9d6" }, { "cell_type": "code", "execution_count": 61, "metadata": { "tags": [] }, "outputs": [], "source": [ "for epoc in range(1):\n", " # step1\n", " Noise = torch.randn(6131,4) \n", " X_fake = net_faker(Noise) \n", " # step2\n", " yhat_fake = net_police(X_fake) \n", " loss_faker = bce(yhat_fake,y_real)\n", " # step3 \n", " loss_faker.backward()\n", " # step4 \n", " optimizr_faker.step()\n", " optimizr_faker.zero_grad()" ], "id": "0811cd56-b380-428d-860f-65ed893019fd" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` 위조범의 실력향상을 감상해보자." ], "id": "5de98b71-d495-4b58-85f1-b50608d7bb01" }, { "cell_type": "code", "execution_count": 62, "metadata": { "tags": [] }, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9sAAAGMCAYAAADKnbG6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9h\nAAAPYQGoP6dpAADCLklEQVR4nOydd3yN9/v/ryAiEmKEROyIPWPvxKw9iyqK2lSrfKtVrdIWrba6\nVKeW2hQxahOxN7X33jsxsr1/f/SXfHKf64WjTiKS1/PxyKM9L/c55x7v6z1yzv2MkzHGCCGEEEII\nIYQQQhxGmue9A4QQQgghhBBCSEqDi21CCCGEEEIIIcTBcLFNCCGEEEIIIYQ4GC62CSGEEEIIIYQQ\nB8PFNiGEEEIIIYQQ4mC42CaEEEIIIYQQQhwMF9uEEEIIIYQQQoiD4WKbEEIIIYQQQghxMFxsE0II\nIYQQQgghDuaFXmx369ZNChQoYMkKFCgg3bp1S/L9cHd3d+hrTpw4USZPnuzQ13wadu/eLfXr1xd3\nd3fJkiWLtGnTRk6dOmXXc6OiomTEiBFSsGBBSZ8+veTPn1+GDRsm4eHhatsPPvhAmjVrJrlz5xYn\nJ6dHXrvffvtNWrVqJQUKFBBXV1fx8/OTfv36yeXLl9W2BQoUECcnJ/XTt2/fpzoHLyKsicQjKWpi\n165dMmDAACldurRkypRJvLy8pH79+rJ27Vr1mqwJ+2BNJB5JNU4kZPXq1fHt98aNG+rfp0+fLv7+\n/pIhQwbx9PSUV199Vc6fP//Y17x69apkz55dnJyc5K+//rJr/19kWBOJR1LUxPnz56V169bi6+sr\nbm5u4uHhIf7+/jJhwgSJiYmxbPuovt/JyUkyZMhg2bZnz55SqlQpyZIli7i6ukqRIkXknXfegXWW\n0mBNJB5JOU4cOHBA2rVrJzly5BAXFxcpUKCA9O/f37LNwYMHpX///lKtWjVxc3MTJycnWbduHXw9\nR9VEuqfa+gVgwYIFkjlz5ue9G8/MxIkTxdPTM8kLXUTkyJEjEhgYKOXKlZM5c+ZIRESEjBgxQmrV\nqiV79+6VHDlyPPb5HTt2lKVLl8qIESOkUqVKsmXLFvn000/l4MGDsmjRIsu2X3/9tZQpU0ZatGgh\nv//++yNf86OPPpI6derImDFjJHfu3HL06FH55JNPZOHChbJnzx7x8vKybF+jRg358ssvLZntNqkF\n1sSzk1Q1MXPmTNm+fbu8/vrrUrZsWbl//7789NNPUq9ePZkyZYq89tpr8duyJv47rIlnJynHiTju\n3bsnvXr1Eh8fH7l06ZL69++//17efPNN6dmzp3z22Wdy4cIF+fDDD6VWrVqyZ88eyZo1K3zdAQMG\nqIVHaoM18ewkVU3cv39fMmfOLB9++KHky5dPoqKiZOnSpTJw4EDZu3ev/Pbbb/HbLliwQCIjIy3v\nc+7cOenQoYO0bt3akt+/f1969+4tfn5+kiFDBtm5c6eMHj1ali5dKnv27JH06dM74Cy9OLAmnp2k\nHCeCg4OladOmUqtWLfnpp5/E09NTzp07J3v27LFst3PnTgkKChJ/f3+pV6+eLF68+JHv77CaMC8w\nXbt2Nfnz53/eu2G6du1q3NzcHPqaJUuWNAEBAQ59TXtp166d8fT0NKGhofHZmTNnjLOzsxk6dOhj\nn7tlyxYjIuarr76y5GPGjDEiYlauXGnJY2Nj4//fzc3NdO3aFb7u1atXVbZjxw4jIuaTTz6x5Pnz\n5zdNmzZ97H6mVFgTiUNS1QRq5zExMaZMmTKmUKFClpw1YR+sicQhKceJOAYMGGD8/f3NBx98YETE\nXL9+Pf7fIiIijIeHh2nevLnlOZs3bzYiYt5//334mn/99Zdxd3c3U6ZMMSJi5s6d+9h9TwmwJhKH\n51ETCWnfvr1Jly6diYiIeOx2I0eONCJiVq9e/cTXnDhxohERs2bNmidu+yLDmkgckqom7t+/b3Ll\nymWaNm1qHj58+NjXTbjumDt3rhERExwcbPcx/ZeaSLKvkY8cOVKcnJxkz5490qZNG8mcObN4eHhI\n586d5fr165ZtHz58KOPGjZNixYqJi4uL5MyZU1577TW5cOHCE98Hfe3jzp07MmTIEPH19Y1/vSZN\nmsiRI0fit4mKipJPP/00/j1z5Mgh3bt3V/v2OE6cOCFNmjQRd3d3yZs3rwwZMkT9RnHUqFFSpUoV\nyZYtm2TOnFnKly8vkyZNEmOM5RgOHjwoISEh8V/3sf16S2IRExMjS5YskbZt21p+o5c/f36pU6eO\nLFiw4LHP37Rpk4iINGnSxJI3a9ZMRETmzZtnydOksa8J5syZU2UVKlSQtGnTPvErgskV1sS/sCb+\nVxOonadNm1YqVKig2jlrgjWRGmoijg0bNsgvv/wiv/32m6RNm1b9+4EDByQ0NFS9ZrVq1SRbtmzw\n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\nzXh5eZkLFy48cl9YE6yJ510TTzNOxDF27Nj4/XNycjLDhw9/7D4+6euB/fv3N7///rsJCQkxQUFB\nplOnTkZE1O0ezxvWhIY1Yd84cfnyZSMiJnPmzCZPnjxmypQpZs2aNaZv376qTcTVV+bMmU3Lli3N\n8uXLzbx580yZMmVMhgwZzD///PPY409KWBOa1F4TT7ueiONx44QjayLJBWmdOnWyPG7fvr107dpV\ngoODpVOnThIcHCwior66UblyZSlevLisWbNGRo8ebff7LVu2TIoUKSL169d/5DZLliyRLFmySPPm\nzS1203Llyom3t7esW7dO+vXr99j3cXJykubNm1uyMmXKyNq1ay3Z2rVrZcyYMbJjxw4JCwuz/Nu1\na9f+s5zl559/lrt37z5xO09PT7tez8nJ6T/9W+PGjcXPz0/effdd8fLykkqVKsnWrVvl/fffl7Rp\n06qvb9j7PsuXL5fOnTtLu3btpH379pIuXTpZtGiRdOvWTaKioh75Cd306dMlIiJCevbs+cj3ed6w\nJlJ2TYiIjB49Wr788ksZOXKk1KpVS8LCwmTChAnSoEEDWblypfj7+4uIyPbt2+Wbb76R5cuXi6ur\n62Nfs0uXLpbHderUkTp16ki1atVk3Lhx8u2338LnsSY0rAkryW2cEPn3WtevX19u3bola9eulS++\n+EJCQ0Mf+dcrnsQPP/xgedyyZUvJmjWrTJgwQQYPHhxfk8kF1gRrIg57x4m4Tx7DwsJkxYoVUrVq\nVRERqVu3rly5ckXGjx8vw4YNE3d39/ht8+TJI/PmzYv/Wnq1atXEz89Pxo0bJ9OmTbPrHCQVrAnW\nhCPe51E4siaSfLFt+xF/unTpJHv27HLz5k0Rkfj/5sqVSz3Xx8dHzp49+1Tvd/36dcmXL99jt7l6\n9arcuXNH0qdPD//dnq+aZMyYUd176eLiYvmKxPbt26Vhw4YSGBgov/76q+TJk0fSp08vQUFBMnr0\naLu+XvIo/Pz8LF8JehRPulche/bsIvK/65CQW7duiZOTk2TJkuWRz0+fPr0sW7ZMunTpIg0bNhQR\nETc3NxkzZox88sknkjt3bst77d27V73G/fv3JSoqSrJlyyYi/3598PXXX5fatWvL77//Hr9d/fr1\nJTQ0VAYOHCjt27cXNzc39VqTJk2SHDlySMuWLR973M8T1kTKronDhw/LiBEjZNy4cZZbHho3biwl\nSpSQwYMHx08KXn/9dWnTpo1UrFhR7ty5IyISf77CwsLExcVFMmXK9Mj3qly5shQpUkS2bt36yG1Y\nExrWhJXkNE7E4e3tHd8uGjZsKFmzZpX33ntPXn/9dYctjDt37iwTJkyQrVu3JrvFNmuCNRGHveNE\n1qxZxcnJSTJlyhS/0I6jcePGEhQUJIcOHZLKlSvH73/9+vUt93/nypVLypYtK7t3737s8T8PWBOs\niYTvZc964mlwZE0k+WL7ypUrlhMUExMjN2/ejD+ouP9evnxZ8uTJY3nupUuX7P5NShw5cuR4ogjB\n09NTsmfPbrmBPiGPm9w+DbNmzRJnZ2dZsmSJpZCCgoKe+bXr1asnISEhT9yua9euj/17e4UKFRJX\nV1fZv3+/+rf9+/eLn5/fE4Vkfn5+smXLFrl48aLcunVLChUqJKGhofLWW29J7dq147crXbq0zJo1\nS65cuWLpNOPeu1SpUiLyb+d1+fJl6dOnj3qvSpUqyZ9//ilnzpyRkiVLWv5tz549smfPHhkyZIg4\nOzs/dp+fJ6yJlF0T//zzjxhjpFKlSpbc2dlZypYta9nHgwcPysGDB2Xu3LlwP8qWLQsHlIQYYx45\nCLImMKwJK8lpnHgUcX8u79ixYw5bGMdNMJOjaI01wZqIw95xwtXVVQoXLixXrlxR29m2dXRfbcJt\nWROsCVuSU03Yu554GhxZE0m+2J4+fbpUqFAh/vGcOXMkJiZGAgMDReTfr7eIiEybNs0yOd2xY4cc\nPnxYhg8f/lTv17hxYxkxYoSsXbs2/rVtadasmcyaNUtiY2OlSpUqT3lE9uPk5CTp0qWz/IYkPDxc\npk6dqrZ1cXF5qt9MOeprH+nSpZPmzZvL/PnzZdy4cfEdw7lz5yQ4ODj+71nbQ+7cueM7wg8++EDc\n3NykR48e8f/esmVL+eCDD2TKlCny7rvvxueTJ08WV1dXadSokYiIZM2aVTJkyAA/rduyZYukSZMG\n/uZy0qRJIiKW90yOsCZSdk34+PiIiMjWrVslICAgPo+MjJTdu3dbJgFxn3AnZPLkyfFyNfSJX0K2\nbt0qx48flzfffBP+O2sCw5qwkpzGiUcRVyt+fn52v9eT+PPPP0VE1KeAyQHWBGsijqcZJ9q2bStj\nx46VzZs3S/Xq1ePzpUuXiru7e/yHFFWqVJE8efLIypUrJTY2Nv5cX7p0Sf755x959dVX7d7/pII1\nwZqIw971xNPg0Jqw++7uZyROaJA/f37zzjvvmJUrV5qvv/7auLu7m7Jly5rIyMj4bXv37m2cnJzM\noEGDzIoVK8zPP/9scubMafLmzWtu3LgRv509QoOwsDBTsmRJ4+7ubj799FOzcuVKs3DhQjN48GCz\ndu1aY4wxMTExpnHjxiZbtmxm1KhRZtmyZWb16tVm8uTJpmvXrmb+/PmPPbZH/V28uGOOY82aNUZE\nzMsvv2xWrlxpZs6caSpUqGAKFy5sRMScPn3a8pouLi5m1qxZZvv27Wbfvn32nGaHcPjwYePu7m5q\n165tli5daubPn29KlSplfHx8zLVr1yzbpk2b1tStW9eSff7552bKlCkmODjYzJo1y7Rp08akSZPG\nTJ8+Xb1Xz549jYuLi/niiy/MunXrzPvvv2+cnJzM6NGjLdsNHjzYiIjp0qWLWbJkiVm2bJnp06eP\nERHTo0cP9brh4eEma9aspnr16g44I4kDayJ11ERsbKypVKmSyZAhgxkxYoRZvXq1mTdvngkMDITy\nD1seJUgrU6aMGTdunFm8eLFZtWqVGT16tMmSJYvx8fGB0hHWxP9gTTw7STVOjBgxwvTp08dMnz7d\nrFu3zgQFBZm+ffuatGnTmnbt2lm2vX//vpk7d66ZO3euGTJkiBERM3LkSDN37lyzdOnS+O2mT59u\n2rZta37//XezZs0aM2/ePPPKK68YETHdunVz8Jl6NlgTrAk0d7LlUePEzZs3Tb58+YyPj4+ZNGmS\nWbFihenVq5cREfPll19atp07d65xcnIyTZs2NUuWLDGzZ882pUqVMh4eHubEiRP/8aw4HtYEa+JZ\n1hP2jhPGOK4mknyxvWvXLtO8eXPj7u5uMmXKZDp27GiuXr1q2TY2NtZ8/vnnpkiRIsbZ2dl4enqa\nzp07m/Pnz1u2s6c4jPnXvvvWW2+ZfPnyGWdnZ5MzZ07TtGlTc+TIkfhtoqOjzZdffmnKli1rMmTI\nYNzd3U2xYsVMnz59zPHjxx97bPYWhzHG/P7776Zo0aLGxcXF+Pr6mrFjx8ab9RIWx5kzZ0zDhg1N\npkyZ4juVpGTnzp2mXr16JmPGjCZz5symVatWsGGJiLIcjho1yhQqVMi4uLiYLFmymEaNGpn169fD\n94mKijIfffSRyZcvn0mfPr0pUqSI+e6779R2sbGx5tdffzUVK1Y0WbJkMZkzZzb+/v5mwoQJJioq\n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\n" } } ], "source": [ "fig,ax = plt.subplots(2,5,figsize=(10,4))\n", "k = 0 \n", "for i in range(2):\n", " for j in range(5):\n", " ax[i][j].imshow(X_fake[k].reshape(28,28).data,cmap=\"gray\")\n", " ax[i][j].set_title(f\"police hat = {yhat_fake[k].item():.4f}\")\n", " k = k+1 \n", "fig.tight_layout()" ], "id": "e70408f5-be17-4957-83b8-51e1144aa5a9" }, { "cell_type": "code", "execution_count": 63, "metadata": { "tags": [] }, "outputs": [], "source": [ "((yhat_fake > 0.5) == 0).float().mean() # 경찰이 가짜이미지를 진짜라고 생각한 비율 = 페이커가 사기에 성공한 비율" ], "id": "87735657-7b6f-4138-8f01-39c8378b70ae" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## G. 경쟁학습\n", "\n", "> 두 적대적인 네트워크를 경쟁시키자!" ], "id": "b97cbb0a-534b-46d7-ad3f-681e55113785" }, { "cell_type": "code", "execution_count": 375, "metadata": { "tags": [] }, "outputs": [], "source": [ "torch.manual_seed(43052)\n", "net_police = torch.nn.Sequential(\n", " torch.nn.Flatten(),\n", " torch.nn.Linear(in_features=784,out_features=30),\n", " torch.nn.ReLU(),\n", " torch.nn.Linear(in_features=30,out_features=1),\n", " torch.nn.Sigmoid()\n", ")\n", "net_faker = torch.nn.Sequential(\n", " torch.nn.Linear(in_features=4, out_features=64), # (n,4) -> (n,64) \n", " torch.nn.ReLU(),\n", " torch.nn.Linear(in_features=64, out_features=64), # (n,64) -> (n,64) \n", " torch.nn.ReLU(),\n", " torch.nn.Linear(in_features=64, out_features=784), # (n,64) -> (n,784) \n", " torch.nn.Sigmoid(), \n", " Reshape2828()\n", ")\n", "bce = torch.nn.BCELoss()\n", "optimizr_police = torch.optim.Adam(net_police.parameters(),lr=0.001,betas=(0.5,0.999))\n", "optimizr_faker = torch.optim.Adam(net_faker.parameters(),lr=0.0002,betas=(0.5,0.999))" ], "id": "82987ccd-4000-478e-978d-0819fbb3eff2" }, { "cell_type": "code", "execution_count": 382, "metadata": { "tags": [] }, "outputs": [], "source": [ "for epoc in range(1000):\n", " # net_police 을 훈련\n", " Noise = torch.randn(6131,4) \n", " X_fake = net_faker(Noise).data # net_faker에 대한 미분꼬리표는 여기선 필요없으므로 .data 만을 이용\n", " ## step1 \n", " yhat_real = net_police(X_real)\n", " yhat_fake = net_police(X_fake)\n", " ## step2 \n", " loss_police = bce(yhat_real,y_real) + bce(yhat_fake,y_fake)\n", " ## step3 \n", " loss_police.backward()\n", " ## step4 \n", " optimizr_police.step()\n", " optimizr_police.zero_grad()\n", " # net_faker 를 훈련\n", " ## step1 \n", " Noise = torch.randn(6131,4) \n", " X_fake = net_faker(Noise)\n", " ## step2 \n", " yhat_fake = net_police(X_fake)\n", " loss_faker = bce(yhat_fake,y_real) \n", " ## step3\n", " loss_faker.backward()\n", " ## step4 \n", " optimizr_faker.step()\n", " optimizr_faker.zero_grad()" ], "id": "6a13b02e-d9ae-46dc-9558-78432453abca" }, { "cell_type": "code", "execution_count": 383, "metadata": { "tags": [] }, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9sAAAGMCAYAAADKnbG6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9h\nAAAPYQGoP6dpAACGZklEQVR4nO3deVxU9f4/8PfIviOyiQiI4pIm7mbmrqSWpVaaaWFdS027md1W\nM0lNzbre7v2a2WJqZZqWonnVoEDM1NxwX9LcUEFcAZFF8PP7wx9zPb7fyEEOzMLr+XjMw4cvDjNn\nhvOecw4z88KklFIEAAAAAAAAAIapYekVAAAAAAAAALA3ONkGAAAAAAAAMBhOtgEAAAAAAAAMhpNt\nAAAAAAAAAIPhZBsAAAAAAADAYDjZBgAAAAAAADAYTrYBAAAAAAAADIaTbQAAAAAAAACD4WQbAAAA\nAAAAwGA2fbI9fPhwioiI0GQRERE0fPjwKl8PT09PQ69zzpw5tGDBAkOvszx27txJPXv2JE9PT/L1\n9aWBAwfSsWPHdH3vhAkTqGXLluTn50eurq4UGRlJL7zwAp08efKO3/fLL7+QyWQik8lEFy5c0Hwt\nIiLC/LXbL66urubl0tPT6Z133qEOHTqQv78/eXt7U+vWrenzzz+n4uLi8j8QNgYzUXmqYibS0tJo\nwIABFBkZSR4eHuTj40MtW7ak2bNnU1FREbveH3/8kTp27Eh+fn7k6+tL7dq1o2+++YYtl52dTRMm\nTKCGDRuSu7s71alTh5544gnav3//3T0YNgQzUXmqaj9x9OhRevrppyksLIzc3Nyofv36NH78eLp4\n8SJbFjNRNsxE5amKmYiLiyv1eMhkMtGSJUvMy3755ZfUv39/ioiIIDc3N2rQoAGNHj2a0tPT2e1j\nJiI0GWbCGBWZiVvl5eVRw4YNyWQy0UcffSQus2/fPnriiScoICCAXFxcKCIigl588UXNMqXNz63n\nEpJz585RrVq1yGQy0Q8//FCudXcs19I2YMWKFeTt7W3p1aiwOXPmkL+/f5UPOhHRoUOHqGvXrtSi\nRQtaunQp5efn07vvvkudOnWiXbt2UUBAwB2//8qVKzRkyBBq0qQJeXl50YEDB2jq1Km0atUq2r9/\nP9WqVYt9z9WrV+n555+nkJAQOnv2LPv6ihUrqKCgQJOdOnWKBg8eTAMGDDBnO3bsoK+//pqeeeYZ\nmjhxIjk5OdHatWtp9OjRtGXLFvrqq6/u8lGxXZiJiquqmcjNzSVvb2+aOHEihYWFUWFhIa1Zs4Ze\neukl2rVrF3355Zfm6/zqq6/ob3/7Gz322GP0zjvvkMlkooULF9IzzzxDFy5coFdeecW8bL9+/Wj7\n9u0UFxdHbdq0odOnT9PkyZOpQ4cOtHfvXgoPD6+cB85KYSYqrqpm4vz583TfffeRt7c3TZkyhcLC\nwig1NZUmTZpEycnJtGPHDqpR4+brBpiJu4eZqLiqmokRI0ZQ79692fc///zz9Ndff2m+NmnSJOrW\nrRtNmzaN6tSpQ4cPH6YpU6bQypUrKTU1lYKCgszLYia0MBMVV9GZuNXEiRMpNze31K8nJyfTQw89\nRJ06daK5c+eSv78/nTp1ilJTU8Xl161bRz4+Pub/l+xHSjNmzJgyT8hLpWxYbGysCg8Pt/RqqNjY\nWOXh4WHodTZt2lR16dLF0OvU64knnlD+/v4qKyvLnJ04cUI5OTmp119//a6uc82aNYqI1Lx588Sv\njxkzRrVs2VK98847iojU+fPny7zOuLg4RUTql19+MWeXLl1ShYWF4vUTkTp16tRdrb+twExUDkvM\nxK0GDRqkHB0dVX5+vjnr2LGjCg8PV8XFxebsxo0bqnHjxqp58+bm7MiRI4qI1DvvvKO5zk2bNiki\nUrNmzbqr9bcVmInKUVUz8cUXX7DneaWUmjZtmiIitXPnTnOGmdAHM1E5LLmfOH78uDKZTGrYsGGa\n/Ny5c2zZbdu2KSJSU6ZMMWeYCcxEZTBqJv744w/l7Oysli1bpohIffjhh5qv5+bmqtq1a6uHHnpI\n3bhx447XNWnSJN3nGSV++OEH5enpqRYuXKiISC1btkz39yqlVJW9jbzkZfvU1FQaOHAgeXt7k4+P\nDw0bNozOnz+vWfbGjRs0c+ZMaty4Mbm4uFBgYCA988wzdPr06TJvR3rbx5UrV+jVV1+lyMhI8/X1\n7duXDh06ZF6msLCQpk6dar7NgIAAevbZZ9m63cnRo0epb9++5OnpSXXr1qVXX32VvRr73nvvUfv2\n7cnPz4+8vb2pVatWNG/ePFJKae7D/v37KSUlxfz2htvf3lJZioqKaPXq1fTYY49pfqMXHh5O3bp1\noxUrVtzV9Zb89srRkb+Z4rfffqPPP/+cvvzyS3JwcNB1fUopmj9/PkVGRlL37t3Nec2aNcnJyYkt\n365dOyIiXdtQVcFM3ISZKPsNRgEBAVSjRg3NfDg5OZGnp6fmt7Emk4m8vb01v30tmYdbf4NLROTr\n60tEdPe/qa0EmImbMBP/m4nybL+YCcxEdZgJyVdffUVKKRoxYoQmDwwMZMu2bt2aHBwcKC0tzZxh\nJjjMRMUYNROFhYX03HPP0ZgxY6hNmzbiMsuWLaP09HR67bXXyGQyGbL+JS5dukRjxoyh999/n8LC\nwu7uSsp1al4BJb9JCA8PV6+99pr6+eef1axZs5SHh4dq2bKl5tXIF154QRGRGjt2rFq3bp2aO3eu\nCggIUHXr1tX8JkL6TVR4eLiKjY01/z87O1s1bdpUeXh4qMmTJ6uff/5Z/fjjj+rll19WSUlJSiml\niouLVe/evZWHh4d67733VGJiovryyy9VnTp11D333KOuXbt2x/sWGxurnJ2dVZMmTdRHH32kfvnl\nF/Xuu+8qk8mk3nvvPc2yw4cPV/PmzVOJiYkqMTFRTZkyRbm5uWmW27lzp4qMjFQtW7ZUmzdvVps3\nb9b89l5SVFSkrl+/Xubl1t/4Sw4dOqSISH3yySfsa//4xz+UyWRSeXl5d7yOEtevX1fXrl1TO3fu\nVB07dlQNGzZUOTk5mmWuXbumoqKi1GuvvaaU0v8bp4SEBEVEaurUqbrWJTY2Vjk6OqoLFy7oWr4q\nYCZuwkzksOVu3Lihrl+/ri5duqSWLFmiPDw81FtvvaVZ5scff1Q1atRQU6dOVZmZmer8+fPqww8/\nVA4ODmrp0qWaZR999FEVEhKikpKSVE5Ojjp48KDq2bOnCgsLU5cuXdK17lUBM3ETZuJ/M3HlyhUV\nFhamOnfurPbt26dycnJUSkqKCgsLU/369dNcF2YCM1EdZuJ2xcXFqm7duqpBgwa6rj85OVkRkfr3\nv/+tyTET4ZrbwUxYx0xMmDBBRUREqKtXr6rjx4+Lr2w/99xziojUr7/+qjp27KicnJyUr6+vevLJ\nJ9WZM2c0y5ZsP8HBwapGjRoqMDBQPf300+rkyZPi7Q8dOlTdd999qri42Dw75X1lu8pPtl955RVN\nvmjRIkVE6ttvv1VKKXXw4EFFROrFF1/ULPfHH38oIlJvv/22OdMzHJMnT1ZEpBITE0tdt8WLFysi\nUj/++KMmL3mrzZw5c+5432JjYxURsZ153759VaNGjUr9vuLiYnX9+nU1efJkVatWLc1bH8r7to8u\nXbooIirzcutjI/n9998VEanFixezr5W8be/s2bNlrk96errmdtu3b882eKWUevXVV1VkZKT5CUjv\nyfbgwYOVg4ODOn36dJnr8vPPP6saNWqwbc/SMBMcZuKm6dOnm5czmUxqwoQJ4nLx8fHKx8fHvKyb\nm5t5u7lVYWGhev755zW337x5c3X8+PEy17sqYSY4zIRSZ8+eVR06dNAs+8QTT2g+VlECM4GZqA4z\ncau1a9cqIlLTp08v8/qzs7NVkyZNVN26ddkJPGYiXLMcZsLyM5GamqqcnJzUunXrlFKq1JPtBx98\nUBGR8vX1Va+//rpKSkpSc+fOVbVq1VINGjRQubm55mW//vpr9f7776s1a9aopKQkNWPGDOXn56eC\ngoLYOcXq1auVk5OT2rt3r1JK3fXJdpUXpA0dOlTz/0GDBlFsbCwlJyfT0KFDKTk5mYiIvXWjXbt2\n1KRJE/r111/p/fff1317a9eupYYNG1LPnj1LXWb16tXk6+tL/fr10zT+tmjRgoKDg2n9+vU0evTo\nO96OyWSifv36abLmzZtTUlKSJktKSqJp06bRtm3bKDs7W/O1zMxMTVlFeXz22WeUk5NT5nL+/v66\nru9Ob8PQ8xYNf39/2rZtGxUUFNDBgwdp5syZ1K1bN1q/fj3Vrl2biIi2bt1KH3/8Ma1bt47c3Nx0\nrRfRzbd0xMfHU+/evalOnTp3XHbnzp00aNAguu+++2j69Om6b6MqYSYwEyUzUWL48OHUs2dPunTp\nEiUlJdGHH35IWVlZ9H//93/mZdatW0fDhg2jJ554ggYNGkSOjo60atUqGj58OBUWFtKzzz5rXnb0\n6NG0YsUK+te//kWtWrWijIwM+vDDD6l79+6UnJxsdcU3mAnMRMlMXL58mR599FG6du0aLVq0iOrW\nrUv79u2jKVOm0COPPEL//e9/zW+xxUxgJsrLFmfidvPmzSNHR8cyC7Dy8/Np4MCBdPLkSUpKSmKt\n15iJO8NMaFX2TBQVFdFzzz1HgwcPpgcffPCOt3Hjxg0iIho8eDB98MEHRETUrVs3Cg4Opv79+9N3\n331n/ojF008/rfnebt26Ubdu3ahDhw40c+ZM+ve//01ERFlZWTRy5Eh64403qFmzZmXf0Tuo8pPt\n4OBg7Qo4OlKtWrXMf8Kj5F/pSSUkJKTMPx91u/Pnz5f5Hvtz587RlStXyNnZWfz67X+GSuLu7s4+\n0+Li4kL5+fnm/2/dupViYmKoa9eu9MUXX1BoaCg5OztTfHw8vf/++5SXl6fjHskaNGig+ZxGacpq\n2ytpu5T+pMqlS5fIZDKZP8NzJ46OjubPVnTs2JF69+5N9erVoxkzZpg35Oeee44GDhxIbdq0oStX\nrhARmR+v7OxscnFxIS8vL3bd3377LRUUFLDPJt0uNTWVevXqRVFRUbRmzRpycXEpc70tATOBmSiZ\niRLBwcHm7SImJoZq1qxJb775Jj333HPUsmVLUkrRc889R507d9Y07Pfs2ZOysrLopZdeokGDBpGH\nhwetW7eO5s2bR8uWLaPHH3/cvGxMTAxFRERQXFwczZ8/v8z1r0qYCcxEyUx88MEHtGvXLjp58qT5\n592pUydq3Lgxde/enRYtWkSxsbGYCczEXbHFmbjVhQsXaNWqVfTQQw+xbeRWBQUFNGDAANq4cSOt\nXr2a2rdvr/k6ZqJsmAmtyp6Jjz/+mI4dO0ZLly41nyOU/FIhPz+frly5Ql5eXuTg4GC+rdtPyh98\n8EEymUy0c+fOO65ru3btqGHDhrRlyxZzNmHCBHJycqKxY8eab//q1atERHTt2jW6cuUK+fj46Pol\nWpWfbGdkZGhejSwqKqKLFy+aH6iSf9PT0yk0NFTzvWfPntX9m5QSAQEBZRYh+Pv7U61atWjdunXi\n16UTvruxZMkScnJyotWrV2sGKT4+vsLX3aNHD0pJSSlzudjY2Dv+vb369euTm5sb7d27l31t7969\n1KBBg7sqyggNDaWQkBD6888/zdn+/ftp//79tGzZMnE9oqOjadeuXexr8+bNo6CgIHr44YdLvb3U\n1FTq2bMnhYeHU0JCAiv9sCaYCcxEWUoK/v78809q2bIlnTt3jtLT02nkyJFs2bZt29LXX39NJ06c\noKZNm5pnqG3btprlfH19qUGDBrRv375yr3tlw0xgJkrs2rWL6tSpww6YS7bnku0XM4GZuBu2OBO3\n+uabb6iwsPCOLz4UFBRQ//79KTk5mVauXEk9evRgy2AmyoaZ0Krsmdi3bx9lZWVRVFQU+9rEiRNp\n4sSJlJqaSi1atKDmzZtr/r787cr6xQARkVJKs9y+ffvoxIkT4i+xYmNjiejmO690/RKtzCUMtmjR\nImrdurX5/0uXLqWioiLq2rUrEZG5Wfrbb7/VDP22bdvo4MGDNGHChHLdXp8+fejdd9+lpKQkTWv1\nrR5++GFasmQJFRcXs9/2GclkMpGjo6OmUTgvL4+++eYbtqyLi0u5fjNl1Ns+HB0dqV+/frR8+XKa\nOXOm+Ynh1KlTlJycrPk7peVx9OhROn36ND3yyCPmrOQtPrdasGABLVy4kOLj48W3iG/fvp327NlD\nr7/+eqntnLt27aKePXtSaGgoJSYmUs2aNe9qnasKZgIzUZaSWWnQoAER3Wzdd3V11fwWtsTmzZup\nRo0a5pOTkJAQIiLasmWL5m2AFy9epD///FM88LI0zARmokRISAj9+uuvdObMGc0+YfPmzURE5oNo\nzARmgqh6zMSt5s2bRyEhIdSnTx/x6yWvaCclJdHy5ctLfTsuZqJsmAmtyp6JN998k30EICMjg4YM\nGUKjRo2iwYMHm4+JBgwYQBMmTKC1a9fSgAEDzMuvXbuWlFJ033333fG2tmzZQkeOHKG///3v5uzj\njz82v6JdYteuXfTKK69QXFwcdenShX0Uo1Tl+oR3BdzeHpiQkKD+9a9/KU9PTxUdHa0KCgrMy77w\nwgvKZDKpcePGqZ9//ll99tlnKjAwUNWtW1fTJl2e9kBPT081depUlZCQoFauXKnGjx9vbg8sKipS\nffr0UX5+fuq9995Ta9euVb/88otasGCBio2NVcuXL7/jfSvt7+KV3OcSv/76qyIi9fjjj6uEhAS1\nePFi1bp1axUVFaWISFNCERsbq1xcXNSSJUvU1q1b1Z49e/Q8zIY4ePCg8vT0VJ07d1Zr1qxRy5cv\nV82aNVMhISEqMzNTs6yDg4Pq3r27+f+7d+9W3bt3V3PmzFHr1q1TCQkJ6p///KcKDQ1VAQEB6sSJ\nE3e87bIK0kaNGqWISB0+fFj8+qFDh1StWrWUn5+f+umnn8ztiyWX29ffkjATmInbZ+Ldd99VI0eO\nVIsWLVLr169X8fHxatSoUcrBwUE98cQTmtsZP368IiL19NNPq9WrV6u1a9eqkSNHKiJSf/vb38zL\n5eTkqPDwcFWzZk310UcfqaSkJLVo0SLVokUL5eDgoJKTkyvnQbsLmAnMxO0zsX37dnM778KFC1VS\nUpL6z3/+owIDA1VQUJBmX4GZwExUh5kosWXLFlb0dbuHH35YEZGaMGECOx7av3+/eTnMBGaiMlRk\nJiSlFaQppdTYsWNVjRo11Pjx41ViYqL65JNPVM2aNVXLli0120Tz5s3VzJkz1U8//aQSExPV+++/\nr3x9fVVISEiZhW0200a+Y8cO1a9fP+Xp6am8vLzUkCFD1Llz5zTLFhcXqw8++EA1bNhQOTk5KX9/\nfzVs2DCVlpamWU7PcCil1OXLl9XLL7+swsLClJOTkwoMDFQPPfSQOnTokHmZ69evq48++khFR0cr\nV1dX5enpqRo3bqxGjhypjhw5csf7pnc4lFLqq6++Uo0aNVIuLi4qMjJSTZ8+Xc2bN48Nx4kTJ1RM\nTIzy8vIyP6lUpe3bt6sePXood3d35e3trfr376+OHj3KliMiTcthRkaGGjZsmKpfv75yd3dXzs7O\nKjIyUo0aNUqdOnWqzNu908n2tWvXlI+Pj+rcuXOp3z9//vw7tifOnz9f1/2vCpiJmzAT/7Nq1SrV\ns2dPFRQUpBwdHZWnp6dq166d+s9//qOuX7+uWba4uFh98cUXqk2bNsrX11d5e3urli1bqtmzZ2v+\n9IlSNxtux44dqxo0aKBcXV1VSEiIeuihh9TmzZuNe4AMgJm4CTOhtXPnTjVgwAAVGhpqfkxGjBjB\nlsVMYCaqy0wopdTzzz+vTCaT+uuvv0pdnzsdD93eUI2ZCNdkmAlj3O1MSO50sl1UVKRmzJihGjRo\noJycnFTt2rXV6NGj1eXLlzXLPfnkk6pBgwbKw8NDOTk5qfDwcDVq1Chdfy3gbk+2TUrp+BS8AeLi\n4ui9996j8+fPl/tzEgD2CDMBoIWZANDCTABoYSbA1pT9iXEAAAAAAAAAKBecbAMAAAAAAAAYrMre\nRg4AAAAAAABQXeCVbQAAAAAAAACD4WQbAAAAAAAAwGCVdrI9Z84cqlevHrm6ulLr1q3pt99+q6yb\nArAJmAkALcwEgBZmAkALMwG2zrEyrvT777+ncePG0Zw5c6hjx4702WefUZ8+fejAgQMUFhZ2x++9\nceMGnT17lry8vMhkMlXG6oEdUUpRTk4OhYSEUI0a1vtGDcwEVBXMBIAWZgJACzMBoFWpM1Guv8qt\nU7t27dSoUaM0WePGjdWbb75Z5vempaUpIsIFl3Jd0tLSKmNTNgxmApeqvmAmcMFFe8FM4IKL9oKZ\nwAUX7aUyZsLwX2cVFhbSjh07KCYmRpPHxMTQpk2b2PIFBQWUnZ1tviiUo8Nd8PLysvQqlAozAZaA\nmQDQwkwAaGEmALQqYyYMP9m+cOECFRcXU1BQkCYPCgqijIwMtvz06dPJx8fHfCnrbSEAEmt+ixBm\n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\n0CEaN24cNWzYkAYOHGj+emFhIfn5+bHvK7mve/bsofvuu6/U609JSaHi4mLN/Pz222+klKKQkBAa\nMmSIeWdy33330fTp06lDhw5lrndVw0xUj5mYPHky5ebm0pQpU8o8EFVKUXFxMeXk5FBCQgItWLCA\nXn31VXbCcDtpJkps2LCBvLy8KD8/n6Kiouhvf/sbjRs3TnNgZi0wE5iJEvv27aOAgAAKDg5mt1Py\n9dsVFxfTjRs36MyZMzR9+nRSStGYMWPuuC7WDjOBmbhdWfuJvLw8+uuvvzQfP711nfLy8ujYsWPU\nsGFD8xzdvv5OTk7UuHFjcc7utGJVYtKkSYqI1CuvvKLJS16O//bbb5VSSh08eFARkXrxxRc1y/3x\nxx+KiNTbb79tzqS3fYSHh6vY2Fjz/ydPnqyISCUmJpa6bosXL1ZEpH788UdNXvL2szlz5tzxvsXG\nxioiUkuXLtXkffv2VY0aNSr1+4qLi9X169fV5MmTVa1atdSNGzfMXyvv2z66dOmiiKjMy62PjeT3\n339XRKQWL17MvjZt2jRFROrs2bN3vI4JEyaoOXPmqKSkJPXf//5XjR07Vjk6OqrOnTtr3qZU2vcS\nkYqPj7/jcoMHD1YODg6at9uW5ueff1Y1atRg256lYSY4e50JpZRKT0/X3G779u3VmTNnNMv0799f\n+fr6qpycHE3eqVMnRUTsbYO3ys7ONr/d/Nbvnz59uiIi5e3trR599FG1bt069eOPP6rmzZsrV1dX\ntXv37jLXvapgJjh7nYnU1FTl5OSk1q1bp5RS6vjx43d8e2DJdkxEymQyqQkTJpR5f0ubCaWUevHF\nF9VXX32lUlJSVHx8vBo6dKgiIjVs2LAyr7cqYSa46j4TvXr1KvXxcXZ2Vi+88ALLGzVqZL4vtWvX\nVhs3brzjuljz28gxE1x1n4kSZe0nzpw5o4hITZ8+nX3vd999p4hIbdq0SSml1Pvvv6+ISKWnp7Nl\nY2JiVMOGDe+47req8le2hw4dqvn/oEGDKDY2lpKTk2no0KGUnJxMRMTeutGuXTtq0qQJ/frrr/T+\n++/rvr21a9dSw4YNqWfPnqUus3r1avL19aV+/fppWutatGhBwcHBtH79eho9evQdb8dkMlG/fv00\nWfPmzVmzdlJSEk2bNo22bdtG2dnZmq9lZmbedTnLZ599Rjk5OWUup/e3eHd6tbisV5KnTp2q+X/f\n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\n69atVVRUlCIidfz4cc11uri4qCVLlqitW7eqPXv26HmYDXHw4EHl6empOnfurNasWaOWL1+umjVr\npkJCQlRmZqZmWQcHB9W9e3fz/zds2KAefPBBNXfuXJWQkKBWrVqlRo8ebV7u1oK0pUuXqho1aqhW\nrVqp33//XW3evFlzufXv4pUYNWqUIiJ1+PBhcd0PHTqkatWqpfz8/NRPP/3ErvP29bckzET1mInd\nu3er7t27qzlz5qh169aphIQE9c9//lOFhoaqgIAAzd96PHfunHr99dfVypUrVVJSkpozZ46KiIhQ\nkZGRrEzt4YcfVkSkJkyYwLbz/fv3a5ZdtmyZMplM6qGHHlKrV69W33//vWrWrJny8fFRR48erYRH\n7O5gJqrHTEhKK75599131ciRI9WiRYvU+vXrVXx8vBo1apRycHBQTzzxhGZZvTOxaNEi9dhjj6mv\nvvpK/frrr+rHH39UTz75pCIiNXz48Ao+MsbCTGAmpDKoESNGKBcXF/Xhhx+q9evXq7fffluZTCb1\n/vvva5br0KGDmj59uoqPj1fJyclq/vz5ql27dsrBwUGtWrVKs+z+/fvVsmXL1LJly1Tr1q1VQECA\n+f+371MsCTOBmajIfiIzM1PVrl1b3XvvvWrFihVqzZo1qnPnzsrLy0sdPHhQs+w333yjiEi98MIL\nKjk5WX3++efK19dX9erVq1yPQ5WfbO/YsUP169dPeXp6Ki8vLzVkyBB17tw5zbLFxcXqgw8+UA0b\nNlROTk7K399fDRs2TKWlpWmW0zMcSil1+fJl9fLLL6uwsDDl5OSkAgMD1UMPPaQOHTpkXub69evq\no48+UtHR0crV1VV5enqqxo0bq5EjR6ojR47c8b7pHQ6llPrqq69Uo0aNlIuLi4qMjFTTp09X8+bN\nY8Nx4sQJFRMTo7y8vMxPKlVp+/btqkePHsrd3V15e3ur/v37iwflRKRpOTxy5Ijq27evqlOnjnJx\ncVGurq7q3nvvVe+//z47eS5pXSztcuvjoZRS165dUz4+Pqpz586lrvf8+fPveJ3z58+vyMNiKMzE\nTfY+ExkZGWrYsGGqfv36yt3dXTk7O6vIyEg1atQoderUKc33Xrx4UcXExKiAgADl5OSkwsLC1Esv\nvaTOnz8v3k5pF6l5ND4+XrVt21a5uroqHx8f9cgjj1jVAZRSmIkS9j4TktIOolatWqV69uypgoKC\n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\nAAAASUVORK5CYII=\n" } } ], "source": [ "fig,ax = plt.subplots(2,5,figsize=(10,4))\n", "k = 0 \n", "for i in range(2):\n", " for j in range(5):\n", " ax[i][j].imshow(X_fake[k].reshape(28,28).data,cmap=\"gray\")\n", " ax[i][j].set_title(f\"police hat = {yhat_fake[k].item():.4f}\")\n", " k = k+1 \n", "fig.tight_layout()" ], "id": "f9ed6e8c-342c-42a5-9a91-f2867ad4505f" }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 5. 초기 GAN의 한계점\n", "\n", "`-` 두 네트워크의 균형이 매우 중요함 – 균형이 깨지는 순간 학습은 실패함\n", "\n", "`-` 생성되는 이미지의 다양성이 부족한 경우가 발생함. (mode collapse)\n", "\n", "Goodfellow, Ian, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David\n", "Warde-Farley, Sherjil Ozair, Aaron Courville, and Yoshua Bengio. 2014.\n", "“Generative Adversarial Nets.” *Advances in Neural Information\n", "Processing Systems* 27." ], "id": "7319cadf-1659-4e5f-8909-74def6946f3d" } ], "nbformat": 4, "nbformat_minor": 5, "metadata": { "kernelspec": { "name": "python3", "display_name": "Python 3 (ipykernel)", "language": "python" }, "language_info": { "name": "python", "codemirror_mode": { "name": "ipython", "version": "3" }, "file_extension": ".py", "mimetype": "text/x-python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.8" } } }