Skip to content

Instantly share code, notes, and snippets.

@ixaxaar
Created April 30, 2018 07:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ixaxaar/6907e8c163448b0adc48ff640c4afac3 to your computer and use it in GitHub Desktop.
Save ixaxaar/6907e8c163448b0adc48ff640c4afac3 to your computer and use it in GitHub Desktop.
One-shot exemplar classification using Adversarial Autoencoders
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<h1 id=\"tocheading\">MNIST classification</h1>\n",
"<div id=\"toc\"></div>"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import sys\n",
"sys.path.append('../')\n",
"sys.path.append('../ccl')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from matplotlib import pyplot as plt\n",
"from IPython import display\n",
"from jupyterthemes import jtplot\n",
"import importlib\n",
"import seaborn as sns\n",
"import numpy as np\n",
"import pandas as pd\n",
"sns.set()\n",
"jtplot.style(grid=False, figsize=(20,10), theme='onedork')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import ccl\n",
"ccl = importlib.reload(ccl)\n",
"from util import *\n",
"import Augmentor"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import os, glob, tempfile, uuid, json, random\n",
"from tqdm import tqdm\n",
"import cv2\n",
"import pickle\n",
"from collections import Counter\n",
"import networkx as nx"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"from PIL import Image\n",
"from skimage.filters import threshold_otsu\n",
"from sklearn.cluster import DBSCAN, AffinityPropagation, KMeans\n",
"from skimage.measure import compare_ssim as ssim, compare_mse as mse\n",
"from sklearn import metrics"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"import torch as T\n",
"import torch.nn as nn\n",
"import torch.nn.functional as F\n",
"import torch.optim as optim\n",
"from torchvision import datasets, transforms\n",
"from torch.autograd import Variable as var"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# best used with jupyterthemes\n",
"np.set_printoptions(edgeitems=10)\n",
"np.core.arrayprint._line_width = 180\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
"IPython.keyboard_manager.command_shortcuts.add_shortcut('g', {\n",
" handler : function (event) {\n",
" var input = IPython.notebook.get_selected_cell().get_text();\n",
" var cmd = \"f = open('.toto.py', 'w');f.close()\";\n",
" if (input != \"\") {\n",
" cmd = '%%writefile .toto.py\\n' + input;\n",
" }\n",
" IPython.notebook.kernel.execute(cmd);\n",
" cmd = \"import os;os.system('subl3 .toto.py')\";\n",
" IPython.notebook.kernel.execute(cmd);\n",
" return false;\n",
" }}\n",
");\n",
"\n",
"IPython.keyboard_manager.command_shortcuts.add_shortcut('u', {\n",
" handler : function (event) {\n",
" function handle_output(msg) {\n",
" var ret = msg.content.text;\n",
" IPython.notebook.get_selected_cell().set_text(ret);\n",
" }\n",
" var callback = {'output': handle_output};\n",
" var cmd = \"f = open('.toto.py', 'r');print(f.read())\";\n",
" IPython.notebook.kernel.execute(cmd, {iopub: callback}, {silent: false});\n",
" return false;\n",
" }}\n",
");"
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%javascript\n",
"\n",
"IPython.keyboard_manager.command_shortcuts.add_shortcut('g', {\n",
" handler : function (event) {\n",
" var input = IPython.notebook.get_selected_cell().get_text();\n",
" var cmd = \"f = open('.toto.py', 'w');f.close()\";\n",
" if (input != \"\") {\n",
" cmd = '%%writefile .toto.py\\n' + input;\n",
" }\n",
" IPython.notebook.kernel.execute(cmd);\n",
" cmd = \"import os;os.system('subl3 .toto.py')\";\n",
" IPython.notebook.kernel.execute(cmd);\n",
" return false;\n",
" }}\n",
");\n",
"\n",
"IPython.keyboard_manager.command_shortcuts.add_shortcut('u', {\n",
" handler : function (event) {\n",
" function handle_output(msg) {\n",
" var ret = msg.content.text;\n",
" IPython.notebook.get_selected_cell().set_text(ret);\n",
" }\n",
" var callback = {'output': handle_output};\n",
" var cmd = \"f = open('.toto.py', 'r');print(f.read())\";\n",
" IPython.notebook.kernel.execute(cmd, {iopub: callback}, {silent: false});\n",
" return false;\n",
" }}\n",
");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Transforms applied to data (binarize images)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"def f(img):\n",
" THRESHOLD_VALUE = 150\n",
"\n",
" img = np.array(np.asarray(img.convert(\"L\")), copy=True)\n",
" img = (img > THRESHOLD_VALUE) * 1.0\n",
" img = T.from_numpy(img).view(1, 28, 28)\n",
" return img"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"binarize = transforms.Compose([\n",
" transforms.Grayscale(num_output_channels=1),\n",
" transforms.Lambda(lambda img: f(img))\n",
"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### The dataset"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"kwargs = {} #{'num_workers': 1, 'pin_memory': True}\n",
"train_loader = T.utils.data.DataLoader(\n",
" datasets.MNIST('../data', train=True, download=True, transform=binarize),\n",
" batch_size=100, shuffle=True, **kwargs)\n",
"\n",
"test_loader = T.utils.data.DataLoader(\n",
" datasets.MNIST('../data', train=False, transform=binarize),\n",
" batch_size=50, shuffle=True, **kwargs)\n",
"\n",
"image_size = 28"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Divide test data into buckets"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"buckets = {}\n",
"for (imgs, labels) in test_loader:\n",
" labels = labels.numpy().tolist()\n",
" imgs = imgs.squeeze(1).numpy()\n",
" images = [ imgs[x] for x in range(len(labels)) ]\n",
" \n",
" for label in labels:\n",
" if label not in buckets:\n",
" buckets[label] = []\n",
" subset = list(filter(lambda x: x[1] == label , zip(images, labels)))\n",
" buckets[label] += [ x[0] for x in subset ]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## One-shot labeled training data"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"train_data = [\n",
" (8, np.array(Image.open('data/eight.jpg').convert('1')).astype(np.float32), json.load(open('data/eight.mask.json'))),\n",
" (5, np.array(Image.open('data/five.jpg').convert('1')).astype(np.float32), json.load(open('data/five.mask.json'))),\n",
" (4, np.array(Image.open('data/four.jpg').convert('1')).astype(np.float32), json.load(open('data/four.mask.json'))),\n",
" (9, np.array(Image.open('data/nine.jpg').convert('1')).astype(np.float32), json.load(open('data/nine.mask.json'))),\n",
" (1, np.array(Image.open('data/one.jpg').convert('1')).astype(np.float32), json.load(open('data/one.mask.json'))),\n",
" (7, np.array(Image.open('data/seven.jpg').convert('1')).astype(np.float32), json.load(open('data/seven.mask.json'))),\n",
" (6, np.array(Image.open('data/six.jpg').convert('1')).astype(np.float32), json.load(open('data/six.mask.json'))),\n",
" (3, np.array(Image.open('data/three.jpg').convert('1')).astype(np.float32), json.load(open('data/three.mask.json'))),\n",
" (2, np.array(Image.open('data/two.jpg').convert('1')).astype(np.float32), json.load(open('data/two.mask.json'))),\n",
" (0, np.array(Image.open('data/zero.jpg').convert('1')).astype(np.float32), json.load(open('data/zero.mask.json'))),\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"def segment_with_masks(img, masks):\n",
" segmented = []\n",
"\n",
" for mask in masks:\n",
" im = np.zeros(img.shape).astype(np.float32)\n",
" for coord in mask['coords']:\n",
" im[coord[1], coord[0]] = 1\n",
" segmented.append(im)\n",
" return segmented"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a86e462b0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6AAAAEBCAYAAABmGsjTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAFaJJREFUeJzt3W2QnWWZJ/D/6e6kOyEQwIEkBAnB+IIhBAiIIhEFQhACgrLD4s7u6pbuTlGzta6u47rjbrn7AWqqdJbdqmGx1BodxRI/iExJmCQSYkLAQHhLIIKy4SWQF9QknXSf9EnSffYD2rssgQ72OffpPvn9vuW+u59zdefqPs+/nqefq3L+h66sBwAAAJqso9UFAAAAcGQQQAEAAChCAAUAAKAIARQAAIAiBFAAAACKEEABAAAooqsVL9ozeUoOHtjfipcGAACgybomTMxAte/16404eKWjI5detiRnzF+QSqWSpzdtzLKld2bw4MHXfWzP5Cm54uOfbsTLAgAAMEYt/fHfvS6ENiSAfnDhxZk1e06+eevXMzQ4mOtu+HQuXnRlVtxz1+s+9g9XPm/+T59PbWCgES8PAADAGNHd05Mv3/Q3h7zrtSEBdP4578t9K+5O3949SZI1q5bn43/6z/Ozf/yH1Ov1Q35ObWAgtYF9jXh5AAAAxoFRP4Sou6cnU6celx3btw6v7dj2crq7ezL12ONHe3gAAADaxKgD6MSJ3UmSgf/ndtqB31/ZnNjdPdrDAwAA0CZGHUD3768lSbq7e4bXenomvbpXq4328AAAALSJUQfQ2sBAent3Zdr0k4bXps2YmVptIL27d4728AAAALSJUQfQJHni0YdywcKLM+XoYzJ58lFZ+OFF2fD4+jd8ABEAAABHnoY8BXftmpWZNPmofPbGLwzPAb1vxd2NODQAAABtoiEBtD40lBX33HXIuZ8AAACQNOgWXAAAABiJAAoAAEARAigAAABFCKAAAAAUIYACAABQhAAKAABAEQIoAAAARQigAAAAFCGAAgAAUIQACgAAQBECKAAAAEUIoAAAABQhgAIAAFCEAAoAAEARAigAAABFCKAAAAAUIYACAABQhAAKAABAEQIoAAAARQigAAAAFCGAAgAAUIQACgAAQBECKAAAAEUIoAAAABQhgAIAAFCEAAoAAEARAigAAABFCKAAAAAUIYACAABQRFerC4C3amDrmjfc6zlp4R/9uSU+H8azkfp/rPPzCQCtN+oAuuSa6zN33lkZHBwcXvvxj76Xzc8+M9pDAwAA0EYacgX0sUfWZfnSnzTiUAAAALQpfwMKAABAEQ25Ajp33tmZO+/s9PftzZMbHs2Da1elPjTUiEMDAADQJkYdQB9ed39WrvhpqtVqps+YmWs+8cl0dU3I6vuWNaI+AAAA2sSob8Hdse3lVPv7k3o927e+lNWrlue9Z8xvRG0AAAC0kcb/DWi9nlQqDT8sAAAA49uob8E9fe78bH72mdRqAzlh2oxceNGiPP3UhkbURpOM91l+b2a0X1urP9+cwvGtnX+22oE5vu3L/y3A+DHqALrgvA/k8iUfT2dnZ/r27smTGx7NA2tWNqI2AAAA2sioA+j3v3NbI+oAAACgzZkDCgAAQBECKAAAAEUIoAAAABQhgAIAAFCEAAoAAEARo34KLuWZNQjAkcT7HkD7cAUUAACAIgRQAAAAihBAAQAAKEIABQAAoAgBFAAAgCIEUAAAAIoQQAEAACjCHFDaSs9JC1tdAvAG/HzyRsz5BDhyuAIKAABAEQIoAAAARQigAAAAFCGAAgAAUIQACgAAQBECKAAAAEUIoAAAABRhDugYNNbnoZnlB2OTn03GqrH+vgZAOa6AAgAAUIQACgAAQBECKAAAAEUIoAAAABQhgAIAAFCEAAoAAEARAigAAABFmAPaAq2eh2ZWIDSHny0AgDd3WAH09Lln5tzzL8y06SelWu3PrbfcPLxX6ejIpZctyRnzF6RSqeTpTRuzbOmdGTx4sGlFAwAAMP4c1i24+/btyyMPrc3P7/3H1+19cOHFmTV7Tr5569dz2//86/zJCdNy8aIrG14oAAAA49thBdDnN/86m558Ir29u163N/+c9+WBNfemb++eVKv9WbNqec4869xUKpWGFwsAAMD4NaqHEHX39GTq1OOyY/vW4bUd215Od3dPph57/KiLAwAAoH2MKoBOnNidJBkYGBheGxjY9+ped/doDg0AAECbGVUA3b+/liTp7u4ZXuvpmfTqXq02mkMDAADQZkYVQGsDA+nt3ZVp008aXps2Y2ZqtYH07t456uIAAABoH4c1hqVSqaSjszMdHZ2ppJLOrq6kXs/g4GCeePShXLDw4mx58bkMDQ5m4YcXZcPj61Ov15tdO2/ALEIAAGAsOqwAesb8BbnqmuuH//2lr9yc3bt35tZbbs7aNSszafJR+eyNXxieA3rfirubVjAAAADj02EF0I2Pr8/Gx9cfcq8+NJQV99yVFffc1dDCAAAAaC+j+htQAAAAOFwCKAAAAEUIoAAAABQhgAIAAFCEAAoAAEARh/UUXN6aga1rjujXN4cU4MjS6vcdYGxq9u8G55zjkyugAAAAFCGAAgAAUIQACgAAQBECKAAAAEUIoAAAABQhgAIAAFCEAAoAAEAR5oDScKOd+WSmEwAAI3HOOT65AgoAAEARAigAAABFCKAAAAAUIYACAABQhAAKAABAEQIoAAAARQigAAAAFGEOaBOMdqbQaGcajXcjff1mNgGMLSP9Xj7S39eAsck5Z2u4AgoAAEARAigAAABFCKAAAAAUIYACAABQhAAKAABAEQIoAAAARQigAAAAFGEO6BjU7Dmi431e25vVZ14TwNjjdzMwHpkT2hyHFUBPn3tmzj3/wkybflKq1f7cesvNw3tLrrk+c+edlcHBweG1H//oe9n87DONrxYAAIBx67AC6L59+/LIQ2tz1FFH57wPvD7pP/bIuixf+pOGFwcAAED7OKwA+vzmXydJ3vWeuU0tBgAAgPbVkL8BnTvv7Mydd3b6+/bmyQ2P5sG1q1IfGmrEoQEAAGgTow6gD6+7PytX/DTVajXTZ8zMNZ/4ZLq6JmT1fcsaUR8AAABtYtRjWHZseznV/v6kXs/2rS9l9arlee8Z8xtRGwAAAG2k8XNA6/WkUmn4YQEAABjfDusW3Eqlko7OznR0dKaSSjq7upJ6PYODgzl97vxsfvaZ1GoDOWHajFx40aI8/dSGZtfNmxjtTKJmzzQa63NGAQAYvXY/pzQn9I9zWAH0jPkLctU11w//+0tfuTm7d+/MrbfcnAXnfSCXL/l4Ojs707d3T57c8GgeWLOyaQUDAAAwPh1WAN34+PpsfHz9Ife+/53bGloQAAAA7anxfwMKAAAAhyCAAgAAUIQACgAAQBECKAAAAEUIoAAAABRxWE/BhfHCPCYAgCPDSOd1rZ4TyqG5AgoAAEARAigAAABFCKAAAAAUIYACAABQhAAKAABAEQIoAAAARQigAAAAFGEOKG3FnE8AABi7XAEFAACgCAEUAACAIgRQAAAAihBAAQAAKEIABQAAoAgBFAAAgCIEUAAAAIowB/QQBrauaerx231WZbO/fwAA7aLV503j+bzU9258cgUUAACAIgRQAAAAihBAAQAAKEIABQAAoAgBFAAAgCIEUAAAAIoQQAEAACjCHNAWGOtzRkeqr9Uzj1r9+gAA7WI056XNPuekPY0YQDs7O3PZFdfm1NPmZPLko9LXtzePrFub9Q+tTZJUOjpy6WVLcsb8BalUKnl608YsW3pnBg8ebHrxAAAAjB8jBtCOjo709+3ND7/3zezatTMnTpuRG/7sM+nv35tfPrUhH1x4cWbNnpNv3vr1DA0O5robPp2LF12ZFffcVaJ+AAAAxokR/wb0wIEDWX3fsuza+bukXs8r27fmV89sysmnzE6SzD/nfXlgzb3p27sn1Wp/1qxanjPPOjeVSqXpxQMAADB+vOWHEHV0dOSUWbPzyo5t6e7pydSpx2XH9q3D+zu2vZzu7p5MPfb4hhYKAADA+PaWA+jiK65NrVbLxiceycSJ3UmSgYGB4f2BgX1Jkond3Q0qEQAAgHbwlgLoJYuvysy3z8odt38rQ4OD2b+/liTp7u4Z/pienklJkv21WgPLBAAAYLw77AB66eVXZ/Zp78wPvvuN7KtWkyS1gYH09u7KtOknDX/ctBkzU6sNpHf3zsZXCwAAwLh1WHNAF330Yzl19pzc/p3bUq32v2bviUcfygULL86WF5/L0OBgFn54UTY8vj71er0pBZcw0kyjsT6zqNn1jfWvHwBgvBjP551juTbGrhED6DFTj81551+YgwcP5MbPfXl4fcsLz+WO27+dtWtWZtLko/LZG78wPAf0vhV3N7VoAAAAxp8RA+ie3t256atffMP9+tBQVtxzl7mfAAAAvKm3/BRcAAAA+GMIoAAAABQhgAIAAFCEAAoAAEARAigAAABFHNYcUF5rpHlNIzEzCQCAwzGe54SOd6M95+fQXAEFAACgCAEUAACAIgRQAAAAihBAAQAAKEIABQAAoAgBFAAAgCIEUAAAAIowB7QFmj1HdKzPizJTCQCgMZp5XtXqc8bRcs45NrkCCgAAQBECKAAAAEUIoAAAABQhgAIAAFCEAAoAAEARAigAAABFCKAAAAAUYQ7oODTamUZmIgEAMBLnjDSDK6AAAAAUIYACAABQhAAKAABAEQIoAAAARQigAAAAFCGAAgAAUIQACgAAQBEjzgHt7OzMZVdcm1NPm5PJk49KX9/ePLJubdY/tDZJsuSa6zN33lkZHBwc/pwf/+h72fzsM82rGgAAgHFnxADa0dGR/r69+eH3vpldu3bmxGkzcsOffSb9/Xvzy6c2JEkee2Rdli/9SdOLBQAAYPwa8RbcAwcOZPV9y7Jr5++Sej2vbN+aXz2zKSefMrtEfQAAALSJEa+A/v86OjpyyqzZ+cUDPx9emzvv7Mydd3b6+/bmyQ2P5sG1q1IfGmpooQAAAIxvbzmALr7i2tRqtWx84pEkycPr7s/KFT9NtVrN9Bkzc80nPpmurglZfd+yhhcLAADA+PWWnoJ7yeKrMvPts3LH7d/K0O8fOrRj28up9vcn9Xq2b30pq1ctz3vPmN+UYgEAABi/DvsK6KWXX51TZ8/JD777jeyrVt/4A+v1pFJpRG0AAAC0kcO6Arroox/L7NPemR989xupVvtfs3f63Pnp7u5JkpwwbUYuvGhRnv7903EBAADgD0a8AnrM1GNz3vkX5uDBA7nxc18eXt/ywnO54/ZvZ8F5H8jlSz6ezs7O9O3dkyc3PJoH1qxsatEAAACMPyMG0D29u3PTV7/4hvvf/85tDS0IAACA9vSWHkIEAAAAfywBFAAAgCIEUAAAAIoQQAEAAChCAAUAAKAIARQAAIAiBFAAAACKEEABAAAoQgAFAACgCAEUAACAIgRQAAAAihBAAQAAKEIABQAAoIiuVr1wd09Pq14aAACAJnmzrFc8gHZNmJgk+fJNf1P6pQEAACika8LEHDyw/zVrlfM/dGW9dCE9k6e8rhAAAADaQ9eEiRmo9r1+vQW1HLIQAAAA2sMbXXD0ECIAAACKEEABAAAoQgAFAACgCAEUAACAIlo2BzRJKh0dufSyJTlj/oJUKpU8vWljli29M4MHD7ayLNpMZ2dnLrvi2px62pxMnnxU+vr25pF1a7P+obVJ9CFldHV15TM3fiFTphydr930lSR6jzLe8c735KKLF+f4t52Y/ftrWffAz7PugZ/rP5rqqClHZ/EV1+aUU09Lkmx58bksX/qT7N3Tq/doqNPnnplzz78w06aflGq1P7fecvPw3ki9phdbo/PkWe/6aqte/MIPXZI57zo9f//tv83Dv1iTc8+/MCecOC2bn32mVSXRhrq6ujJt+sysXP7TrPzZ0mx54blccdV12dO7K7/9zQ59SBEfvuSjmTBhQo4+ZmoeWLMyid+BNN/sd7wrV179T7Ls7jtzz90/zmPrH8y+al+q/f36j6a6+tob0tnZme//3f/KugdX5x1z3p25887Okxse1Xs01JSjj8lvX9merS9tycy3z8rDv7h/eG+kXtOLrdHSW3Dnn/O+PLDm3vTt3ZNqtT9rVi3PmWedm0ql0sqyaDMHDhzI6vuWZdfO3yX1el7ZvjW/emZTTj5ldhJ9SPNNnzEzp815dx5cu+o163qPZvvQRxbn/tU/y/PPPZv60FD212r5zSs7kug/muu449+WX27akP37azl44ECe2vhYTpw2I4neo7Ge3/zrbHryifT27nrd3ki9phdbo2UBtLunJ1OnHpcd27cOr+3Y9nK6u3sy9djjW1UWR4COjo6cMmt2XtmxTR/SdJWOjlxx9XWv3tIz+H9v6dF7NNuECRNy0syTM2XK0fk3f/HF/Lv/8F9y3Q2fytRjj9N/NN26B1fnPe+dl+6enkyc2J158xfk189s0nsUM1Kv6cXWaVkAnTixO0kyMDAwvDYwsO/Vve7ultTEkWHxFdemVqtl4xOP6EOa7v0XXJTt27ZmywvPvWZd79FsPZMmp1LpyLtPn5cffv9b+dv/cXP6+/bmE9f/S/1H07304nPp6ZmUz3/pv+bz//G/5fi3nZCf33uP3qOYkXpNL7ZOywLo/v21JEl3d8/wWk/PpFf3arWW1ET7u2TxVZn59lm54/ZvZWhwUB/SVMcd/7acc+4HsnLFT1+3p/dotj/00cPr7k/v7l05eOBAVt17T6bPmDl8e5n+oykqldzwL/51tm19KV+7+T/nazf9VX719FP5Z5/68+GHu+g9mm2k91nvw63TsgBaGxhIb++uTJt+0vDatBkzU6sNpHf3zlaVRRu79PKrM/u0d+YH3/1G9lWrSfQhzXXyKbNz1JQp+fN/+6V87i+/muv+6acycWJ3PveXX82J02boPZqqVhvI7t07k3r9kPv6j2aZNGlSjj32+Kxfd38O7N+fgwcP5qEHV+eEE6dn0uTJeo8iRjrHcw7YOi0dw/LEow/lgoUXZ8uLz2VocDALP7woGx5fn/obvFnCH2vRRz+WU2fPye3fuS3Vav9r9vQhzfLLp57I85t/PfzvmSfPypJrrs+3b/vvqfb36T2a7rH1v8h571+Yzf/7V6lW+3PRRy7Ptq1bsqd3t/6jafZVq9n5u99kwXkXZPV9yzJUr+e891+Yffuq2b17l96joSqVSjo6O9PR0ZlKKuns6krq9QwODo7Ya3qxNSrnf+jKln2HKx0duXTxVTnjzHOGZ+8sX3pnDpq9QwMdM/XY/MW//6scPHggQ0NDw+tbXngud9z+bX1IMaecelr+9JP/6rVzQPUezVSp5COXfDTzzz4vqVTy0ovPZ/k9P8me3t36j6b6kxNOzCWLr86Mk05OpVLJb1/ZnpU/W5qXt7yg92ioeWedm6uuuf41a7t378ytt9w8Yq/pxdZoaQAFAADgyNHSOaAAAAAcOQRQAAAAihBAAQAAKEIABQAAoAgBFAAAgCIEUAAAAIoQQAEAAChCAAUAAKAIARQAAIAi/g+7Bi2SHRzQawAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a8379c320>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a837611d0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a83797588>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a837567b8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6AAAAFKCAYAAAADhTJ8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAGc1JREFUeJzt3W+QXXWd5/HP7e6kbzpgAIEkHQTCoCMkIfyVQdOikQBCQBB3GF13ndlydmet2Sp33BnLmdkqt2pLaqpmZq15wGKhNVqAC26tQI3CJhmTmCbBYEAI/4UJItBJUPK3u3M7ne67D9DeoQLSmb79u7c7r9ej9Dmdc7/hl9s5b86991Qu/uDV9QAAAMAka2v2AAAAABwdBCgAAABFCFAAAACKEKAAAAAUIUABAAAooqMZD1rtOiaHhg8246EBAACYZB0zZqY22H/49tKDVLuOyVUf/4PSDwsAAEBB93337w+L0OIB+usrnzf9+Z9kqFYr/fAAAABMos5qNV/6yt++6ateGxKglba2XHb5yixeekEqlUqeeerxrLrv7owcOvSWv2eoVstQ7UAjHh4AAIApoCEfQvSBnuU5beGZufXmv8ktf/dXOfGkuVm+4upGHBoAAIBpoiEBuvT892VT7w/Sv39fBgcH0rt+dc4598JUKpVGHB4AAIBpYMIB2lmtZs6c47NzR9/Ytp3bX0lnZzVzjjthoocHAABgmphwgM6c2Zkkqf2zDxSq/eq9nTM7Oyd6eAAAAKaJCQfowYNDSZLOzurYtmp11uv7hoYmengAAACmiQkH6FCtlr17d2fuvO6xbXPnL8jQUC179+ya6OEBAACYJhryIUSPPfJQ3t+zPMcc+450dc1Oz4dWZOujW1Kv1xtxeAAAAKaBhtwHdGPv2szqmp0//NwXxu4Dum7N9xtxaAAAAKaJhgRofXQ0a+6/N2vuv7cRhwMAAGAaashLcAEAAODtCFAAAACKEKAAAAAUIUABAAAoQoACAABQhAAFAACgCAEKAABAEQIUAACAIgQoAAAARQhQAAAAihCgAAAAFCFAAQAAKEKAAgAAUIQABQAAoAgBCgAAQBECFAAAgCIEKAAAAEUIUAAAAIoQoAAAABQhQAEAAChCgAIAAFCEAAUAAKAIAQoAAEARAhQAAIAiBCgAAABFCFAAAACKEKAAAAAUIUABAAAoQoACAABQhAAFAACgCAEKAABAEQIUAACAIgQoAAAARQhQAAAAihCgAAAAFCFAAQAAKEKAAgAAUIQABQAAoAgBCgAAQBECFAAAgCIEKAAAAEUIUAAAAIoQoAAAABTRMdEDrLzuxixacm5GRkbGtn33O7dl2/PPTvTQAAAATCMTDtAk+cnDm7P6vnsacSgAAACmKS/BBQAAoIiGXAFdtOS8LFpyXgb69+eJrY/kwY3rUx8dbcShAQAAmCYmHKA/3vxA1q75XgYHBzNv/oJcd8On0tExIxvWrWrEfAAAAEwTE34J7s7tr2RwYCCp17Oj7+VsWL86Zy9e2ojZAAAAmEYa/x7Qej2pVBp+WAAAAKa2CQfoWYuWprOzmiQ5ae78LLt0RZ55cuuEBwMAAGB6mfB7QC+46JJcufLjaW9vT//+fXli6yPZ1Lu2EbMBAAAwjUw4QG//5i2NmAMAAIBpzn1AAQAAKEKAAgAAUIQABQAAoAgBCgAAQBECFAAAgCIEKAAAAEUIUAAAAIoQoAAAABTR0ewBOPrU+nrH9X3V7p5JnuQ3G++cyfhnnYxjHulxJ0Oz1wrGo9nPE6YGP88AJpcroAAAABQhQAEAAChCgAIAAFCEAAUAAKAIAQoAAEARAhQAAIAiBCgAAABFCFAAAACKEKAAAAAUIUABAAAooqPZA/DWan29zR6hqabSn38yZp2Of/5qd88kT0IjTKW/ewDA1OIKKAAAAEUIUAAAAIoQoAAAABQhQAEAAChCgAIAAFCEAAUAAKAIAQoAAEARAhQAAIAiBCgAAABFCFAAAACK6Gj2AMDUV+3uafYIAABMAa6AAgAAUIQABQAAoAgBCgAAQBECFAAAgCIEKAAAAEUIUAAAAIoQoAAAABQhQAEAAChCgAIAAFBER7MHAFpTtbun2SPQJEey9rW+3kmcBBrDzzOA1uEKKAAAAEUIUAAAAIoY10twz1p0Ti68eFnmzuvO4OBAbv7qTWP7Km1tuezylVm89IJUKpU889TjWXXf3Rk5dGjShgYAAGDqGdcV0AMHDuThhzbmhz/4v4ft+0DP8py28MzcevPf5Ja/+6uceNLcLF9xdcMHBQAAYGobV4D+bNtzeeqJx7J37+7D9i09/33Z1PuD9O/fl8HBgfSuX51zzr0wlUql4cMCAAAwdU3oPaCd1WrmzDk+O3f0jW3buf2VdHZWM+e4EyY8HAAAANPHhAJ05szOJEmtVhvbVqsdeH1fZ+dEDg0AAMA0M6EAPXhwKEnS2Vkd21atznp939DQRA4NAADANDOhAB2q1bJ37+7Mndc9tm3u/AUZGqpl755dEx4OAACA6WNcAVqpVNLe0ZG2tvZU8vqv29vbkySPPfJQ3t+zPMcc+450dc1Oz4dWZOujW1Kv1yd1cAAAAKaWcd0HdPHSC3LNdTeOff3Fv7wpe/bsys1fvSkbe9dmVtfs/OHnvjB2H9B1a74/aQMfTardPc0egXGq9fU2e4Rx8XeKRvN3CoBGmCrnUkfCv5FvblwB+vijW/L4o1vedF99dDRr7r83a+6/t6GDAQAAML1M6D2gAAAAMF4CFAAAgCIEKAAAAEUIUAAAAIoQoAAAABQhQAEAAChCgAIAAFCEAAUAAKAIAQoAAEARHc0eAFpVra+32SMAAExZ0/Vcqtrd0+wRpjRXQAEAAChCgAIAAFCEAAUAAKAIAQoAAEARAhQAAIAiBCgAAABFCFAAAACKEKAAAAAUIUABAAAooqPZA0BJtb7eZo8wbtXunmaPAABwmKl0PjVezrvKcQUUAACAIgQoAAAARQhQAAAAihCgAAAAFCFAAQAAKEKAAgAAUIQABQAAoAgBCgAAQBECFAAAgCIEKAAAAEV0NHsAaIRaX2+zRwAAmLKcS1GKK6AAAAAUIUABAAAoQoACAABQhAAFAACgCAEKAABAEQIUAACAIgQoAAAARQhQAAAAihCgAAAAFCFAAQAAKKKj2QPAW6n19TZ7hIardvc0ewQA4CgyHc+nxst5V2tyBRQAAIAixnUF9KxF5+TCi5dl7rzuDA4O5Oav3jS2b+V1N2bRknMzMjIytu2737kt255/tvHTAgAAMGWNK0APHDiQhx/amNmzj81Flxx+KfsnD2/O6vvuafhwAAAATB/jCtCfbXsuSfKe9y6a1GEAAACYvhryIUSLlpyXRUvOy0D//jyx9ZE8uHF96qOjjTg0AAAA08SEA/THmx/I2jXfy+DgYObNX5DrbvhUOjpmZMO6VY2YDwAAgGliwp+Cu3P7KxkcGEjq9ezoezkb1q/O2YuXNmI2AAAAppHG34alXk8qlYYfFgAAgKltXAFaqVTS3tGRtrb2VPL6r9vb25MkZy1ams7OapLkpLnzs+zSFXnmya2TNzEAAABT0rjeA7p46QW55robx77+4l/elD17duXmr96UCy66JFeu/Hja29vTv39fntj6SDb1rp20gQEA4GhW6+tt9ghNVe0+/LaQTB3jCtDHH92Sxx/d8qb7bv/mLQ0dCAAAgOmp8e8BBQAAgDchQAEAAChCgAIAAFCEAAUAAKAIAQoAAEARAhQAAIAiBCgAAABFCFAAAACKEKAAAAAU0dHsATj61Pp6mz3CuFS7e5o9AgBwlJgq50eTxXnX0cMVUAAAAIoQoAAAABQhQAEAAChCgAIAAFCEAAUAAKAIAQoAAEARAhQAAIAiBCgAAABFCFAAAACKEKAAAAAU0dHsAZgean29zR4BAIAWUu3uafYItCBXQAEAAChCgAIAAFCEAAUAAKAIAQoAAEARAhQAAIAiBCgAAABFCFAAAACKEKAAAAAUIUABAAAooqPZA9C6an29zR6h4ardPc0eAQA4ikzH8ymYCFdAAQAAKEKAAgAAUIQABQAAoAgBCgAAQBECFAAAgCIEKAAAAEUIUAAAAIoQoAAAABQhQAEAAChCgAIAAFBER7MHoLxaX2+zRwAAmLKO9nOpandPs0dgCnMFFAAAgCLe9gpoe3t7Lr/q+px+xpnp6pqd/v79eXjzxmx5aGOSpNLWlssuX5nFSy9IpVLJM089nlX33Z2RQ4cmfXgAAACmjrcN0La2tgz078+dt92a3bt35eS58/PJT382AwP78/STW/OBnuU5beGZufXmv8noyEg+8ck/yPIVV2fN/feWmB8AAIAp4m1fgjs8PJwN61Zl967Xkno9r+7oy0+ffSqnnLowSbL0/PdlU+8P0r9/XwYHB9K7fnXOOffCVCqVSR8eAACAqeOI3wPa1taWU09bmFd3bk9ntZo5c47Pzh19Y/t3bn8lnZ3VzDnuhIYOCgAAwNR2xAF6xVXXZ2hoKI8/9nBmzuxMktRqtbH9tdqBJMnMzs4GjQgAAMB0cEQB+pErrsmCd52Wu+74ekZHRnLw4FCSpLOzOvY91eqsJMnBoaEGjgkAAMBUN+4AvezKa7PwjHfn29/6Wg4MDiZJhmq17N27O3PndY9939z5CzI0VMvePbsaPy0AAABT1rgCdMVHPzYWn4ODA2/Y99gjD+X9PctzzLHvSFfX7PR8aEW2Prol9Xp9UgYGAABganrb27C8Y85xuejiZTl0aDif+/yXxra/9OILueuOb2Rj79rM6pqdP/zcF8buA7puzfcndWgOV+vrbfYIDVft7mn2CADAUWI6nksdCeddlPK2Abpv75585ct/+pb766OjWXP/ve77CQAAwG90xJ+CCwAAAP8SAhQAAIAiBCgAAABFCFAAAACKEKAAAAAUIUABAAAoQoACAABQhAAFAACgCAEKAABAER3NHgAAAJgc1e6eZo8Ab+AKKAAAAEUIUAAAAIoQoAAAABQhQAEAAChCgAIAAFCEAAUAAKAIAQoAAEARAhQAAIAiBCgAAABFCFAAAACK6Gj2ABx9qt09zR4BADhK1Pp6mz1CwzmXYipzBRQAAIAiBCgAAABFCFAAAACKEKAAAAAUIUABAAAoQoACAABQhAAFAACgCAEKAABAEQIUAACAIjqaPQBvrdbX2+wRxq3a3TPu7x3vn+tIjgkAcLQ4knNE51O0GldAAQAAKEKAAgAAUIQABQAAoAgBCgAAQBECFAAAgCIEKAAAAEUIUAAAAIoQoAAAABQhQAEAAChCgAIAAFBER7MHYHqo9fWO+3ur3T2TOAkAANCqXAEFAACgiLe9Atre3p7Lr7o+p59xZrq6Zqe/f38e3rwxWx7amCRZed2NWbTk3IyMjIz9nu9+57Zse/7ZyZsaAACAKedtA7StrS0D/ftz5223ZvfuXTl57vx88tOfzcDA/jz95NYkyU8e3pzV990z6cMCAAAwdb3tS3CHh4ezYd2q7N71WlKv59Udffnps0/llFMXlpgPAACAaeKIP4Sora0tp562MD/a9MOxbYuWnJdFS87LQP/+PLH1kTy4cX3qo6MNHRQAAICp7YgD9Iqrrs/Q0FAef+zhJMmPNz+QtWu+l8HBwcybvyDX3fCpdHTMyIZ1qxo+LAAAAFPXEX0K7keuuCYL3nVa7rrj6xn91YcO7dz+SgYHBpJ6PTv6Xs6G9atz9uKlkzIsAAAAU9e4r4BeduW1OX3hmfn2t76WA4ODb/2N9XpSqTRiNgAAAKaRcV0BXfHRj2XhGe/Ot7/1tQwODrxh31mLlqazs5okOWnu/Cy7dEWe+dWn4wIAAMCvve0V0HfMOS4XXbwshw4N53Of/9LY9pdefCF33fGNXHDRJbly5cfT3t6e/v378sTWR7Kpd+2kDg0AAMDU87YBum/vnnzly3/6lvtv/+YtDR2I/6/a3TPu76319U7iJG/vSGYFAChlvOcozT6XOhLOu5jKjuhDiAAAAOBfSoACAABQhAAFAACgCAEKAABAEQIUAACAIgQoAAAARQhQAAAAihCgAAAAFCFAAQAAKKKj2QPQGNXunmaPAAAwZTmXgjJcAQUAAKAIAQoAAEARAhQAAIAiBCgAAABFCFAAAACKEKAAAAAUIUABAAAoQoACAABQhAAFAACgiI5mPXBntdqshwYAAGCS/KbWKx6gHTNmJkm+9JW/Lf3QAAAAFNIxY2YODR98w7bKxR+8ul56kGrXMYcNAgAAwPTQMWNmaoP9h29vwixvOggAAADTw1tdcPQhRAAAABQhQAEAAChCgAIAAFCEAAUAAKCIpt0H9NcqbW257PKVWbz0glQqlTzz1ONZdd/dGTl0qNmjHdXOWnROLrx4WebO687g4EBu/upNY/usWetob2/P5Vddn9PPODNdXbPT378/D2/emC0PbUxirVrJFVdfn3e/5+x0Vqs5ODSUp5/amrVrvp/RkRHr1II6Ojry2c99Icccc2z++it/mcTzqZWsvO7GLFpybkZGRsa2ffc7t2Xb888msVat5rfe/d5cuvyKnPDOk3Pw4FA2b/phNm/6oXVqEf/lz//7G75ub+/Ia798NV//n6/fMtE6tY7ZxxybK666PqeefkaS5KWfv5DV992T/fv2Tql1asptWP65ZZdelveefU7uvP3rGR0ZySc++QfZ3vdS1tx/bzPHOuqdfsa709XVldmzj81Fl/S8IUCtWeuYMWNGLlm2PI8/tiW7d+/KyXPn55Of/mxW339Pnn5yq7VqISeedHL27tmd4eHhzOrqysf/1b/Jz1/clt71a6xTC1q+4urMm78g3aecOhag1ql1rLzuxhw8OJTV993zpvutVetY+FvvycqP/W7+4e478+KL2zJjxozMmXNcfvHqTuvUoj77H/8kTz3xaDb1rk3i+dRKbrjxM2lra8u9/+fbGa2P5qprPpGu2cfkzttunVLr1PSX4C49/33Z1PuD9O/fl8HBgfSuX51zzr0wlUql2aMd1X627bk89cRj2bt392H7rFnrGB4ezoZ1q7J712tJvZ5Xd/Tlp88+lVNOXZjEWrWSX/7i1QwPDydJKqmkXq/n+BNOTGKdWs28+Qtyxpm/nQc3rn/Ddus0dVir1vHBD1+RBzb8Y372wvOpj47m4NBQfvHqziTWqRXNX/CunHjSydn66JaxbdapdRx/wjvz9FNbc/DgUA4ND+fJx3+Sk+fOTzK11qmpL8HtrFYzZ87x2bmjb2zbzu2vpLOzmjnHnZA9u19r4nS8GWvW2tra2nLqaQvzo00/tFYt6JJlH84HPviRzJzZmcHBgay7/evWqcVU2tpy1bWfyKr77n7DP9rWqfUsWnJeFi05LwP9+/PE1kfy4Mb1qY+OWqsWMmPGjHQvOCXbnn8m/+GP/zTV6qy88srPs+b+e1OrHbBOLejc896Xf3ru2fTv35fEz75Ws/nBDXnv2Uvy3LNPpj5az5KlF+S5Z5+acuvU1ACdObMzSVKr1ca21WoHXt/X2dmUmfjNrFlru+Kq6zM0NJTHH3s4s2cfk8RatZIHH1iXBx9Yl3eeeHIWn3Ne+vv3e061mN95/6XZsb0vL734wth7bBI/+1rNjzc/kLVrvpfBwcHMm78g193wqXR0zMiGdausVQupzupKpdKW3z5rSe68/esZGOjPiiuvzQ03fib/+3/9fRLr1EpmzJiRsxYvzT/cfdfYNs+n1vLyz1/I0vMuyp988b+lXk9e3bk9d95265Rbp6a+BPfgwaEkSWdndWxbtTrr9X1DQ02Zid/MmrWuj1xxTRa867Tcdcfrr/23Vq3rtV++mp07tufa63/POrWQ4094Z86/8JKsXfO9w/ZZp9ayc/srGRwYSOr17Oh7ORvWr87Zi5cmsVat5Nf/vX+8+YHs3bM7h4aHs/4H92fe/AVjrzCwTq3jvYuW5tDwcJ5/7umxbZ5PLaRSySf/7b/P9r6X89c3/df89Vf+Ij995sn869//o7EPGpoq69TUAB2q1bJ37+7Mndc9tm3u/AUZGqpl755dTZyMt2LNWtNlV16bhWe8O9/+1tdyYHAwibVqdW3tbTnhnSdZpxZyyqkLM/uYY/JH/+mL+fyffTmf+L3fz8yZnfn8n305J8+db51aWb2e/CpoPKdax9BQLXv27Hp9fd6EdWot557/vmx9bEvqo6Nj2zyfWsesWbNy3HEnZMvmBzJ88GAOHTqUhx7ckJNOnpdZXV1Tap2afhuWxx55KO/vWZ6Xfv5CRkdG0vOhFdn66JbU3+KHFWVUKpW0tbenra09lVTS3tGR1OsZGRmxZi1mxUc/ltMXnpk7vnlLBgcH3rDPWrWGzs5q3nPW4vz0mScyVKvlpLnzs+yDl2XbP71+ywjr1BqefvKx/Gzbc2NfLzjltKy87sZ845b/kcGBfuvUQs5atDTbnn82Q0O/ej5duiLPPLl1bL+1ah0/2fKjXPQ7Pdn2Tz/N4OBALv3wldne91L27d1jnVrICe88Kae867R8757vHLbPOrWGA4OD2fXaL3LBRe/PhnWrMlqv56LfWZYDBwazZ8/uKbVOTb8NS6WtLZddcU0Wn3P+2D1rVt93dw614D1rjiZLzr0w11x34xu27dmzKzd/9SZr1kLeMee4/PF//oscOjSc0X/2fyxfevGF3HXHN6xVi5jZ2ZkbbvxM5s1fkPb29gwM9OfZp59I77pVGR4etk4t6tTTz8jvfurfvfE+oNapJXz69/8oJ82dn/b29vTv35cntj6STb1rx34OWqsWUqnkwx/5aJaed1FSqeTln/8sq++/J/v27rFOLeTDK67OggXvyu3fvOWwfdapdZx40sn5yBXXZn73KalUKvnlqzuy9h/vyysvvTil1qnpAQoAAMDRoen3AQUAAODoIEABAAAoQoACAABQhAAFAACgCAEKAABAEQIUAACAIgQoAAAARQhQAAAAihCgAAAAFPH/AKdTehyaAT2PAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a83713a58>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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g4MDr9tnrVpDZ2c17zlrcX7y9LYM1Wo5ae78LPvg5dn+T6/dMsI6tYannngsP93+7NifF5xyWlZcf1O+cevfZHCg3zq1kLMWLc32557J0NAvf54uXZ6nn9g6tt9atY4fb/nHXPRbPdn+Tz/J4OBALv3wVdnR92L279trnVrICe88Kae867R8797vvGGfdWoNBwcHs/vVn+eCi96fDetWZbRez0W/tSwHDw5m7949U2qdmn4blkpbWy6/8tosPuf8sXvWrF55Tw634D1rjiZLzr0w115/0+u27d27O7d89WZr1kLeMee4/NF//vMcPjyc0X/2fyxffOH53H3nN6xVi5jZ2Zkbb/rdzJu/IO3t7RkY6M8zT21L77pVGR4etk4t6tTTz8hvf+rfvf4+oNapJXz69/4wJ82dn/b29vQf2J9tWx/Jpt61Y+dBa9VCKpV8+CMfzdLzLkoqlbz0s59m9f33Zv++vdaphXx4+TVZsOBdueObt75hn3VqHSeedHI+cuV1md99SiqVSn7xys6s/YeVefnFF6bUOjU9QAEAADg6NP0+oAAAABwdBCgAAABFCFAAAACKEKAAAAAUIUABAAAoQoACAABQhAAFAACgCAEKAABAEQIUAACAIv4v7h2KOfLh2IEAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a836d0d30>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a83689438>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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gAIAAFCEAAoAAEARAigAAABFCKAAAAAUIYACAABQhAAKAABAEQIoAAAARZgDegjNnsc03JlDY31elJlNAABlvNl51dF+zjkU56RvjSugAAAAFCGAAgAAUIQACgAAQBECKAAAAEUIoAAAABQhgAIAAFCEAAoAAEAR5oAewlAzfYY7M2isz1RqtuG8fuY1AQD8E+elb505om/NkAG0vb09l191Q047fXYmTpyUnp49eWzN6qx9ZHWSpNLWlssuvyZnzjsvlUolz25YnyWL707/gQNNLx4AAIDRY8gA2tbWlt6ePfnh976ZnTt35KSp03Pzn30mvb178stn1uWDCy7JzFmz883bv56B/v7cePOnc8nCq7PsvntK1A8AAMAoMeR3QPfv35+VDyzJzh2/S+r1vLptS3713IaccuqsJMm8c9+Xh1bdn549u1Ot9mbViqU56+zzU6lUml48AAAAo8cRP4Sora0tp86clVe3b01nV1emTDk+27dtGVzfvvWVdHZ2ZcpxJzS0UAAAAEa3Iw6gV1x1Q2q1WtY/9VjGj+9MkvT19Q2u9/XtTZKM7+xsUIkAAACMBUcUQC+94trMePvM3HXntzLQ3599+2pJks7OrsHf6eqakCTZV6s1sEwAAABGu8MOoJddeV1mnf7O/OC738jeajVJUuvrS3f3zkyddvLg702dPiO1Wl+6d+1ofLUAAACMWoc1B3ThRz+W02bNzp3fuSPVau/r1p56/JFctOCSbH5pUwb6+7Pgwwuz7sm1qdfrTSmY5mv2TCLzpgAAGMpQ56TOKUenIQPosVOOywUXzs+BA/tzy+e+PLh984ubcted387qVcszYeKkfPaWLwzOAX1g2b1NLRoAAIDRZ8gAurt7V2796hffcL0+MJBl991j7icAAABv6oifggsAAABvhQAKAABAEQIoAAAARQigAAAAFCGAAgAAUMRhzQHl9Ub6TKJmz/Ecrma+fiP93w4A8MdG+nnlcDT7vGykv3bOSw/NFVAAAACKEEABAAAoQgAFAACgCAEUAACAIgRQAAAAihBAAQAAKEIABQAAoAhzQJvAzJ/h8foBALzGedFb57UbmVwBBQAAoAgBFAAAgCIEUAAAAIoQQAEAAChCAAUAAKAIARQAAIAiBFAAAACKEEABAAAoQgAFAACgCAEUAACAIgRQAAAAihBAAQAAKEIABQAAoAgBFAAAgCIEUAAAAIroGOoX2tvbc/lVN+S002dn4sRJ6enZk8fWrM7aR1YnSa65/qbMmXt2+vv7B//mxz/6XjY+/1zzqgYAAGDUGTKAtrW1pbdnT374vW9m584dOWnq9Nz8Z59Jb++e/PKZdUmSJx5bk6WLf9L0YgEAABi9hrwFd//+/Vn5wJLs3PG7pF7Pq9u25FfPbcgpp84qUR8AAABjxJBXQP9/bW1tOXXmrPzioZ8Pbpsz95zMmXtOenv25Ol1j+fh1StSHxhoaKEAAACMbkccQK+46obUarWsf+qxJMmjax7M8mU/TbVazbTpM3L9Jz6Zjo5xWfnAkoYXCwAAwOh1RE/BvfSKazPj7TNz153fysDvHzq0fesrqfb2JvV6tm15OStXLM17z5zXlGIBAAAYvQ77CuhlV16X02bNzg+++43srVbf+Bfr9aRSaURtAAAAjCGHdQV04Uc/llmnvzM/+O43Uq32vm7tjDnz0tnZlSQ5cer0zL94YZ79/dNxAQAA4A+GvAJ67JTjcsGF83PgwP7c8rkvD27f/OKm3HXnt3PeBR/Ildd8PO3t7enZsztPr3s8D61a3tSiAQAAGH2GDKC7u3fl1q9+8Q3Xv/+dOxpaEAAAAGPTET2ECAAAAN4qARQAAIAiBFAAAACKEEABAAAoQgAFAACgCAEUAACAIgRQAAAAihBAAQAAKEIABQAAoAgBFAAAgCIEUAAAAIoQQAEAAChCAAUAAKCIjlYduLOrq1WHBgAAoEneLOsVD6Ad48YnSb5869+UPjQAAACFdIwbnwP7971uW+XCD11dL11I18TJBxUCAADA2NAxbnz6qj0Hb29BLYcsBAAAgLHhjS44eggRAAAARQigAAAAFCGAAgAAUIQACgAAQBEtmwOaJJW2tlx2+TU5c955qVQqeXbD+ixZfHf6DxxoZVmMMe3t7bn8qhty2umzM3HipPT07Mlja1Zn7SOrk+hDyujo6MhnbvlCJk8+Jl+79StJ9B5lvOOd78nFl1yRE952Uvbtq2XNQz/Pmod+rv9oqkmTj8kVV92QU087PUmy+aVNWbr4J9mzu1vv0VBnzDkr5184P1OnnZxqtTe337ZocG2oXtOLrdF+ysx3fbVVB5//oUsz+11n5O+//bd59Bercv6F83PiSVOz8fnnWlUSY1BHR0emTpuR5Ut/muU/W5zNL27KVdfemN3dO/Pb32zXhxTx4Us/mnHjxuWYY6fkoVXLk/g/kOab9Y535err/lmW3Ht37rv3x3li7cPZW+1JtbdX/9FU191wc9rb2/P9v/s/WfPwyrxj9rszZ+45eXrd43qPhpp8zLH57avbsuXlzZnx9pl59BcPDq4N1Wt6sTVaegvuvHPfl4dW3Z+ePbtTrfZm1YqlOevs81OpVFpZFmPM/v37s/KBJdm543dJvZ5Xt23Jr57bkFNOnZVEH9J806bPyOmz352HV6943Xa9R7N96CNX5MGVP8sLm55PfWAg+2q1/ObV7Un0H811/Alvyy83rMu+fbUc2L8/z6x/IidNnZ5E79FYL2z8dTY8/VS6u3cetDZUr+nF1mhZAO3s6sqUKcdn+7Ytg9u2b30lnZ1dmXLcCa0qi6NAW1tbTp05K69u36oPabpKW1uuuu7G127p6f+nW3r0Hs02bty4nDzjlEyefEz+3V98Mf/hP/233HjzpzLluOP1H0235uGVec9756azqyvjx3dm7rzz8uvnNug9ihmq1/Ri67QsgI4f35kk6evrG9zW17f3tbXOzpbUxNHhiqtuSK1Wy/qnHtOHNN37L7o427ZuyeYXN71uu96j2bomTEyl0pZ3nzE3P/z+t/K3/2tRenv25BM3/Wv9R9O9/NKmdHVNyOe/9N/z+f/8P3LC207Mz++/T+9RzFC9phdbp2UBdN++WpKks7NrcFtX14TX1mq1ltTE2HfpFddmxttn5q47v5WB/n59SFMdf8Lbcu75H8jyZT89aE3v0Wx/6KNH1zyY7l07c2D//qy4/75Mmz5j8PYy/UdTVCq5+V/922zd8nK+tui/5mu3/lV+9ewz+Ref+vPBh7voPZptqM9Zn8Ot07IAWuvrS3f3zkyddvLgtqnTZ6RW60v3rh2tKosx7LIrr8us09+ZH3z3G9lbrSbRhzTXKafOyqTJk/Pn//5L+dxffjU3/vNPZfz4znzuL7+ak6ZO13s0Va3Wl127diT1+iHX9R/NMmHChBx33AlZu+bB7N+3LwcOHMgjD6/MiSdNy4SJE/UeRQx1juccsHVaOoblqccfyUULLsnmlzZloL8/Cz68MOueXJv6G3xYwlu18KMfy2mzZufO79yRarX3dWv6kGb55TNP5YWNvx78ecYpM3PN9Tfl23f8z1R7e/QeTffE2l/kgvcvyMb/+6tUq725+CNXZuuWzdndvUv/0TR7q9Xs+N1vct4FF2XlA0syUK/ngvfPz9691ezatVPv0VCVSiVt7e1pa2tPJZW0d3Qk9Xr6+/uH7DW92BqVCz90dcte4UpbWy674tqceda5g7N3li6+OwfM3qGBjp1yXP7iP/5VDhzYn4GBgcHtm1/clLvu/LY+pJhTTzs9f/rJf/P6OaB6j2aqVPKRSz+aeedckFQqefmlF7L0vp9kd/cu/UdT/cmJJ+XSK67L9JNPSaVSyW9f3ZblP1ucVza/qPdoqLlnn59rr7/pddt27dqR229bNGSv6cXWaGkABQAA4OjR0jmgAAAAHD0EUAAAAIoQQAEAAChCAAUAAKAIARQAAIAiBFAAAACKEEABAAAoQgAFAACgCAEUAACAIv4f584wNddxbDcAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a836476d8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a836067f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"train = {}\n",
"for label, img, masks in train_data:\n",
" parts = segment_with_masks(img, masks['masks'])\n",
" plt.figure()\n",
" plt.imshow(np.concatenate([img] + parts, axis=1))\n",
" train[label] = { 'original': img, 'parts': parts }"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Group exemplars"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"part_mappings = {\n",
" 8: ['circles', 'circles', 'blank'],\n",
" 5: ['lines', 'lines', 'cups'],\n",
" 4: ['lines', 'lines', 'lines'],\n",
" 9: ['circles', 'lines', 'blank'],\n",
" 1: ['lines', 'blank', 'blank'],\n",
" 7: ['lines', 'lines', 'blank'],\n",
" 6: ['lines', 'circles', 'blank'],\n",
" 3: ['cups', 'cups', 'blank'],\n",
" 2: ['curve1', 'curve2', 'lines'],\n",
" 0: ['circles', 'blank', 'blank']\n",
"}\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a8355e860>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a8355e080>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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AABgbDvhALr4upvT09OTrU9vSpI8seGRrFr501QqlUyZOj03feKTaWkZl7Wrl9e8WAAAAMauE+qCe9XiGzL97TNy373fSv8fmg7t2vFaKl1dSbWandtfzdo1K/LeC+aOSLEAAACMXUNeAb362htz7sxZ+cH3vpEDlcqxv7BaTUqlWtQGAABAHRnSCuiij34sM897Z37wvW+kUuk67Nz5s+emXG5NkpzZPjXzr1yU5/7QHRcAAAD+aNAV0FMnn5bLLp+f3t5Duf1zXx44/srLL+a+e7+deZd9INcu+Xiam5vTuX9fntmyOY+uWzWiRQMAADD2DBpA93XszR1f/eIxz9/z3btrWhAAAAD16YSaEAEAAMBbJYACAABQCAEUAACAQgigAAAAFEIABQAAoBACKAAAAIUQQAEAACiEAAoAAEAhWkbrxuXW1tG6NQAAACPkeFmv8ADaMm58kuTLd/xt0bcGAACgIC3jxqf30MHDjpUu/9D11aILaW2bdEQhAAAA1IeWcePTXek88vgo1HLUQgAAAKgPx1pw1IQIAACAQgigAAAAFEIABQAAoBACKAAAAIUYtX1AS01NufqaJblg7ryUSqU8t21rli+7P329vaNVEiOgubk511x3c849b1ba2iams3N/Nm1Yn42Pr0/iOWgkLS0t+cztX8ikSafka3d8JYnxbwTveOd7cuXCxTnjbWfl4MGebHj059nw6M+NfQOYOOmULL7u5pxz7nlJkld++2JWLPtJ9u/rMP515vzZF+bSy+enfcq0VCpduevOpQPnBhtrz8LYd6zxH+wdMDH+jar57Bnv+upo3Hj+h67KrHedn//97b/LE79Yl0svn58zz2rPC795fjTKYYS0tLSkfcr0rFrx06z62bK88vKLue6GW7KvY09+/7tdnoMG8uGrPppx48bllFMn59F1q5KYB+rdzHe8K9ff+E+y/MH789CDP86TGx/LgUpnKl1dxr4B3HjzbWlubs493/n7bHhsbd4x692ZPefiPLNls/GvM5NOOTW/f31ntr/6Sqa/fUae+MUjA+cGG2vPwth3rPEf7B0wMf6NatQ+gjv3kvfl0XUPp3P/vlQqXVm3ZkUuvOjSlEql0SqJEXDo0KGsXb08e3a/kVSreX3n9vzq+W05+5yZSTwHjWLK1Ok5b9a789j6NYcdN/717UMfWZxH1v4sL734m1T7+3Owpye/e/3Nlw5jX/9OP+Nt+eW2LTl4sCe9hw7l2a1P5qz2qUmMf7156YVfZ9szT6ejY88R5wYba8/C2Hes8R/sHTAx/o1qVAJoubU1kyefnl07tw8c27XjtZTLrZl82hmjURIFaWpqyjkzZub1XTs8Bw2i1NSU62685c2P1PT9/4/UGP/6Nm7cuEybfnYmTTol/+avvph/9x/+S2657VOZfNrpxr5BbHhsbd7z3jkpt7Zm/Phy5sydl18/v834N5DBxtqz0Fj+9B0w8R7QyEYlgI4fX06SdHd3Dxzr7j7w5rlyeTRKoiCLr7s5PT092fr0Js9Bg3j/FVdm547teeXlFw87bvzrW+uEtpRKTXn3+XPyw3u+lb/7n0vT1bk/n7j1Xxr7BvHqb19Ma+uEfP5L/zWf/4//LWe87cz8/OGHjH8DGWysPQuN5U/fARPvAY1sVALowYM9SZJyuXXgWGvrhDfP9fSMRkkU4KrFN2T622fkvnu/lf6+Ps9BAzj9jLflkks/kFUrf3rEOeNf3/44hk9seCQde/ek99ChrHn4oUyZOn3go1XGvo6VSrntX/zr7Nj+ar629D/na3f8TX713LP5Z5/6y4HmIsa//g02z/s90Dj+8Ttg4j2gkY1KAO3p7k5Hx560T5k2cKx96vT09HSnY+/u0SiJEXb1tTdm5nnvzA++940cqFSSeA4awdnnzMzESZPyl//2S/ncX381t/zTT2X8+HI+99dfzVntU41/Hevp6c7evbuTavWo5419fZswYUJOO+2MbNzwSA4dPJje3t48/tjanHnWlExoazP+DWKw3/PeAxrD0d4BE++BjWzUtmF5evPjuWLBwrzy2xfT39eXBR9elC1PbUz1GC8rjF2LPvqxnDtzVu797t2pVLoOO+c5qG+/fPbpvPTCrwf+Pv3sGVly06359t3/I5WuTuNf557c+Itc9v4FeeH//iqVSleu/Mi12bH9lezr2Gvs69yBSiW73/hd5l12RdauXp7+ajWXvX9+DhyoZO/ePca/zpRKpTQ1N6epqTmllNLc0pJUq+nr6xt0rD0LY9/xxv9474CJ8W9Upcs/dP2ojHCpqSlXL74hF1x4ycC+PyuW3Z9e+/7UlVMnn5a/+vd/k97eQ+nv7x84/srLL+a+e7/tOWgw55x7Xv78k//q8H1AjX/9KpXykas+mrkXX5aUSnn1ty9lxUM/yb6Ovca+AfzZmWflqsU3Zuq0s1MqlfL713dm1c+W5bVXXjb+dWbORZfmhptuPezY3r27c9edSwcda8/C2Hes8b/nO39/3HfAxPg3qlELoAAAADSWUdsHFAAAgMYigAIAAFAIARQAAIBCCKAAAAAUQgAFAACgEAIoAAAAhRBAAQAAKIQACgAAQCEEUAAAAArx/wDBTeWVuyireQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a835209b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"circles = train[8]['parts'] + \\\n",
" [ train[9]['parts'][0] ] + \\\n",
" [ train[6]['parts'][1] ] + \\\n",
" [ train[0]['parts'][0] ]\n",
"imgs_with_circles = [ 8, 9, 6, 0 ]\n",
"\n",
"lines = [train[5]['parts'][0]] + \\\n",
" [train[5]['parts'][1]] + \\\n",
" train[4]['parts'] + \\\n",
" [train[9]['parts'][1]] + \\\n",
" train[1]['parts'] + \\\n",
" train[7]['parts'] + \\\n",
" [train[6]['parts'][0]] + \\\n",
" [train[2]['parts'][1]]\n",
"imgs_with_lines = [ 5, 4, 9, 1, 7, 6, 2 ]\n",
"\n",
"cups = [train[5]['parts'][2]] + \\\n",
" train[3]['parts']\n",
"imgs_with_cups = [ 5, 3 ]\n",
"\n",
"curve1 = [train[2]['parts'][0]]\n",
"imgs_with_curve1 = [2]\n",
"\n",
"curve2 = [train[2]['parts'][2]]\n",
"imgs_with_curve2 = [2]\n",
"\n",
"blank = [np.ones((28,28))]\n",
"imgs_with_blank = list(range(10))\n",
"\n",
"plt.imshow(np.concatenate(circles, axis=1))\n",
"plt.figure()\n",
"plt.imshow(np.concatenate(lines, axis=1))\n",
"plt.figure()\n",
"plt.imshow(np.concatenate(cups + curve1 + curve2, axis=1))\n",
"\n",
"exemplars = { 'circles': (circles, imgs_with_circles),\n",
" 'lines': (lines, imgs_with_lines),\n",
" 'cups': (cups, imgs_with_cups),\n",
" 'curve1': (curve1, imgs_with_curve1),\n",
" 'curve2': (curve2, imgs_with_curve2),\n",
" 'blank': (blank, imgs_with_blank)}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Augmentor pipeline"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"def uid():\n",
" return str(uuid.uuid4())[:8]"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"def augmentor_pipeline(source, prob):\n",
" p = Augmentor.Pipeline(source)\n",
" p.rotate_random_90(prob)\n",
" p.random_distortion(prob, grid_width=10, grid_height=10, magnitude=2)\n",
" return p"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Use augmentor to create noisy samples of train and exemplar images"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"%%capture\n",
"augmented_train = {}\n",
"\n",
"for label, data in train.items():\n",
" tmp = tempfile.mkdtemp()\n",
" plt.imsave(tmp + '/'+ str(label) + '.png', data['original'])\n",
" \n",
" pipeline = augmentor_pipeline(tmp, 0.5)\n",
" pipeline.sample(1000)\n",
" \n",
" sampled = glob.glob(tmp + '/output/*.png')\n",
" aug = [ np.array(Image.open(i).convert('1')).astype(np.float32) for i in sampled ]\n",
"\n",
" augmented_train[label] = {\n",
" 'pipeline': pipeline,\n",
" 'source': tmp,\n",
" 'dest': tmp+'/output',\n",
" 'augmented': aug,\n",
" 'original': data['original'],\n",
" 'n_parts': len(data['parts'])\n",
" }"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"%%capture\n",
"augmented_exemplars = {}\n",
"\n",
"for kind, (images, labels) in exemplars.items():\n",
" tmp = tempfile.mkdtemp()\n",
" _ = [ plt.imsave(tmp + '/'+ str(label) + uid() + '.png', image) for image in images ]\n",
"\n",
" pipeline = augmentor_pipeline(tmp, 0.5)\n",
" pipeline.sample(1000)\n",
"\n",
" sampled = glob.glob(tmp + '/output/*.png')\n",
" aug = [ np.array(Image.open(i).convert('1')).astype(np.float32) for i in sampled ]\n",
"\n",
" augmented_exemplars[kind] = {\n",
" 'pipeline': pipeline,\n",
" 'source': tmp,\n",
" 'dest': tmp+'/output',\n",
" 'augmented': aug,\n",
" 'original': images,\n",
" 'lables': labels\n",
" }\n",
" \n",
"augmented_exemplars['blank']['augmented'] = [ np.ones(a.shape) for a in augmented_exemplars['blank']['augmented'] ]"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f6a82ffdeb8>"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a86e46390>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a86e46898>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(np.concatenate( [ augmented_exemplars[name]['original'][0] for i, name in enumerate(exemplars.keys()) ], axis=1 ))\n",
"plt.figure()\n",
"plt.imshow(np.concatenate( [ augmented_exemplars[name]['augmented'][0] for i, name in enumerate(exemplars.keys()) ], axis=1 ))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Train a adversarial autoencoder on the augmented images"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"def generate_aae_data(label, n_samples):\n",
" global augmented_exemplars\n",
" global augmented_train\n",
" global part_mappings\n",
"\n",
" labels = list(augmented_train.keys())\n",
" data = []\n",
"\n",
" for n in range(n_samples):\n",
" mapping = part_mappings[label]\n",
" wrong_mapping = set(augmented_exemplars.keys()) - set(random.choice(list(mapping)))\n",
" wrong_mapping = [ random.choice(list(wrong_mapping)) for x in range(len(mapping)) ]\n",
"\n",
" # original image for correct composition and blank image for incorrect ones\n",
" target = augmented_train[label]['original']\n",
" wrong_target = np.ones(target.shape).astype(np.float32)\n",
"\n",
" augmented = random.choice(augmented_train[label]['augmented'])\n",
"\n",
" correct_augmented_exemplars = [ random.choice(augmented_exemplars[kind]['augmented']) for kind in mapping ]\n",
" wrong_augmented_exemplars = [ random.choice(augmented_exemplars[kind]['augmented']) for kind in wrong_mapping ]\n",
"\n",
" # combine input and exemplars into a multi-channel image\n",
" input = np.stack([augmented] + correct_augmented_exemplars, axis=0)\n",
" wrong_input = np.stack([augmented] + wrong_augmented_exemplars, axis=0)\n",
"\n",
" data.append( (input, target) )\n",
" data.append( (wrong_input, wrong_target) )\n",
"\n",
" input = np.stack([ d[0] for d in data ], axis=0)\n",
" target = np.stack([ d[1] for d in data ], axis=0)\n",
"\n",
" return input, target"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f6a82f62f60>"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a834bccf8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a834bc4e0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"inp, tgt = generate_aae_data(8, 1)\n",
"right, wrong = np.expand_dims(inp[0], axis=0), np.expand_dims(inp[1], axis=0)\n",
"plt.imshow(np.concatenate( [ right[0, x] for x in range(right.shape[1]) ], axis=1 ))\n",
"plt.figure()\n",
"plt.imshow(np.concatenate( [ wrong[0, x] for x in range(wrong.shape[1]) ], axis=1 ))"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training for 8\n",
"{'recon_loss': 0.06051509574069712, 'discriminator_loss': 0.6812798494669661, 'generator_loss': 1.2476871606692597}\n",
"{'recon_loss': 0.045311867686493985, 'discriminator_loss': 0.5961263964523622, 'generator_loss': 1.5243493019036911}\n",
"{'recon_loss': 0.04144267466439323, 'discriminator_loss': 0.6240687049064205, 'generator_loss': 1.6283302343071406}\n",
"{'recon_loss': 0.06167808156366923, 'discriminator_loss': 0.6621788514768658, 'generator_loss': 1.65474412129752}\n",
"{'recon_loss': 0.050957825164763715, 'discriminator_loss': 0.5639157970646518, 'generator_loss': 2.1074393736058146}\n",
"{'recon_loss': 0.06712684508832596, 'discriminator_loss': 0.46817693159208823, 'generator_loss': 2.185197840982945}\n",
"{'recon_loss': 0.05164820597175875, 'discriminator_loss': 0.39712705676579596, 'generator_loss': 2.4235680324947415}\n",
"{'recon_loss': 0.08602528111428846, 'discriminator_loss': 0.418918665470415, 'generator_loss': 3.121856445643171}\n",
"{'recon_loss': 0.04316210732491102, 'discriminator_loss': 0.4129519100914049, 'generator_loss': 2.3974650756797597}\n",
"{'recon_loss': 0.03441140484696619, 'discriminator_loss': 0.27811269810301575, 'generator_loss': 2.176024002650876}\n",
"{'recon_loss': 0.03985315640891338, 'discriminator_loss': 0.3752092801446292, 'generator_loss': 2.2723126836757563}\n",
"{'recon_loss': 0.04363528059224542, 'discriminator_loss': 0.3527199779473357, 'generator_loss': 2.476793146612656}\n",
"{'recon_loss': 0.03516826509666546, 'discriminator_loss': 0.328178061855648, 'generator_loss': 1.9407523379253981}\n",
"{'recon_loss': 0.041417908693823606, 'discriminator_loss': 0.24980070314664937, 'generator_loss': 1.6622995737209991}\n",
"{'recon_loss': 0.043850116460963186, 'discriminator_loss': 0.265647932774757, 'generator_loss': 2.1940597703109432}\n",
"{'recon_loss': 0.029135082917985326, 'discriminator_loss': 0.26305310833431667, 'generator_loss': 1.6791170179544381}\n",
"{'recon_loss': 0.0358320095028785, 'discriminator_loss': 0.2147317090249871, 'generator_loss': 1.9060579334671175}\n",
"{'recon_loss': 0.03322205292037577, 'discriminator_loss': 0.16577876759833426, 'generator_loss': 1.0817267012656036}\n",
"{'recon_loss': 0.032796194175511, 'discriminator_loss': 0.19052349686195275, 'generator_loss': 1.1963214231795403}\n",
"{'recon_loss': 0.029314642083019735, 'discriminator_loss': 0.13679330380418192, 'generator_loss': 0.8931156600540008}\n",
"{'recon_loss': 0.034384669861600825, 'discriminator_loss': 0.11492291200512918, 'generator_loss': 0.673669037507407}\n",
"{'recon_loss': 0.02748752111458075, 'discriminator_loss': 0.2049895080471009, 'generator_loss': 0.8776969683933394}\n",
"{'recon_loss': 0.03229070667562589, 'discriminator_loss': 0.20593038212564124, 'generator_loss': 0.8656716990710502}\n",
"{'recon_loss': 0.028037718304239293, 'discriminator_loss': 0.19408946428200524, 'generator_loss': 1.4339714155125258}\n",
"{'recon_loss': 0.02579626184829684, 'discriminator_loss': 0.09697561933841538, 'generator_loss': 0.6157807063442379}\n",
"{'recon_loss': 0.02309611028478008, 'discriminator_loss': 0.1089008839463993, 'generator_loss': 0.6608015120628491}\n",
"{'recon_loss': 0.02123679375716476, 'discriminator_loss': 0.05558754557517858, 'generator_loss': 0.3089302652913272}\n",
"{'recon_loss': 0.018717395652573434, 'discriminator_loss': 0.04065385822384576, 'generator_loss': 0.2998233370964963}\n",
"{'recon_loss': 0.017208014774146775, 'discriminator_loss': 0.025868928886250354, 'generator_loss': 0.20432184655078917}\n",
"{'recon_loss': 0.0156267877283065, 'discriminator_loss': 0.019248504363042512, 'generator_loss': 0.21085773660877694}\n",
"{'recon_loss': 0.013630428173475146, 'discriminator_loss': 0.011618194353109198, 'generator_loss': 0.1558721092467877}\n",
"{'recon_loss': 0.012049767352784247, 'discriminator_loss': 0.01715634071915153, 'generator_loss': 0.17510426912591887}\n",
"{'recon_loss': 0.014151453122147944, 'discriminator_loss': 0.02389537567833214, 'generator_loss': 0.20986007460977538}\n",
"{'recon_loss': 0.012768097285835901, 'discriminator_loss': 0.011510197737124916, 'generator_loss': 0.16471455088272915}\n",
"{'recon_loss': 0.009306776610970362, 'discriminator_loss': 0.007082124573364684, 'generator_loss': 0.0368853625656267}\n",
"{'recon_loss': 0.010403293938494112, 'discriminator_loss': 0.0926975074857292, 'generator_loss': 0.0364510632841387}\n",
"{'recon_loss': 0.012764432013705281, 'discriminator_loss': 0.015006190791134383, 'generator_loss': 0.18143203292589896}\n",
"{'recon_loss': 0.009107347664061464, 'discriminator_loss': 0.031072237979860255, 'generator_loss': 0.1132367718158322}\n",
"{'recon_loss': 0.008411592635433288, 'discriminator_loss': 0.00674673384833913, 'generator_loss': 0.11792565255410245}\n",
"{'recon_loss': 0.01060005727026806, 'discriminator_loss': 0.009053539850840628, 'generator_loss': 0.1378951402882599}\n",
"{'recon_loss': 0.009498983721966201, 'discriminator_loss': 0.00826576817005606, 'generator_loss': 0.15087564659616015}\n",
"{'recon_loss': 0.008575936934537313, 'discriminator_loss': 0.09704499474758646, 'generator_loss': 0.13084247228002624}\n",
"{'recon_loss': 0.010339212260946418, 'discriminator_loss': 0.09774540130467413, 'generator_loss': 0.07939175632278174}\n",
"{'recon_loss': 0.007413863659057276, 'discriminator_loss': 0.17579574737186676, 'generator_loss': 0.07338517601923929}\n",
"{'recon_loss': 0.007741730457776991, 'discriminator_loss': 0.004239693761944488, 'generator_loss': 0.08320194755808817}\n",
"{'recon_loss': 0.009198220846700673, 'discriminator_loss': 0.004502365552920922, 'generator_loss': 0.13066478334782644}\n",
"{'recon_loss': 0.007898759243646697, 'discriminator_loss': 0.004544156178168699, 'generator_loss': 0.11611576563114696}\n",
"{'recon_loss': 0.007802111504691371, 'discriminator_loss': 0.0032833541441712453, 'generator_loss': 0.11222625770527153}\n",
"{'recon_loss': 0.007187617677822263, 'discriminator_loss': 0.0026147135814842547, 'generator_loss': 0.20958894292365704}\n",
"{'recon_loss': 0.008836444138614067, 'discriminator_loss': 0.008003904176222758, 'generator_loss': 0.20116792189571625}\n",
"{'recon_loss': 0.00672681101532915, 'discriminator_loss': 0.003442080019523023, 'generator_loss': 0.1635306087086386}\n",
"{'recon_loss': 0.007732198375380584, 'discriminator_loss': 0.0024894395813531383, 'generator_loss': 0.14291028330852212}\n",
"{'recon_loss': 0.0061541885469473786, 'discriminator_loss': 0.0024019794367124824, 'generator_loss': 0.14480977148631932}\n",
"{'recon_loss': 0.00575931566784603, 'discriminator_loss': 0.0018926682006857659, 'generator_loss': 0.16571019781811847}\n",
"{'recon_loss': 0.005878113117926457, 'discriminator_loss': 0.08906910950239895, 'generator_loss': 0.1029769028771442}\n",
"{'recon_loss': 0.006305917684119323, 'discriminator_loss': 0.0026683581919753497, 'generator_loss': 0.1859336324900295}\n",
"{'recon_loss': 0.006277999214706813, 'discriminator_loss': 0.0013800074487737412, 'generator_loss': 0.10259922822042426}\n",
"{'recon_loss': 0.007447196868539404, 'discriminator_loss': 0.002832847912738017, 'generator_loss': 0.10608546035112934}\n",
"{'recon_loss': 0.006044755127467039, 'discriminator_loss': 0.0014861164306888503, 'generator_loss': 0.10376108146244455}\n",
"{'recon_loss': 0.00553436206677705, 'discriminator_loss': 0.0011351028451781302, 'generator_loss': 0.015822755460697717}\n",
"{'recon_loss': 0.005565466278820029, 'discriminator_loss': 0.005410349306460069, 'generator_loss': 0.14999289743176053}\n",
"{'recon_loss': 0.005682766418335209, 'discriminator_loss': 0.0023106670930504417, 'generator_loss': 0.2048754556191845}\n",
"{'recon_loss': 0.003840496562419608, 'discriminator_loss': 0.002937448412773559, 'generator_loss': 0.20036140184459833}\n",
"{'recon_loss': 0.005962216902780391, 'discriminator_loss': 0.001807351626472548, 'generator_loss': 0.10775147758456234}\n",
"{'recon_loss': 0.006210340154262051, 'discriminator_loss': 0.0032416244076904975, 'generator_loss': 0.1489647506332508}\n",
"{'recon_loss': 0.004599567330467837, 'discriminator_loss': 0.004661954040942869, 'generator_loss': 0.10652805894642096}\n",
"{'recon_loss': 0.006441317285414322, 'discriminator_loss': 0.03593915420813073, 'generator_loss': 0.0994518729634454}\n",
"{'recon_loss': 0.00461916625833363, 'discriminator_loss': 0.0023845043454674003, 'generator_loss': 0.19473186556443034}\n",
"{'recon_loss': 0.005708059668268977, 'discriminator_loss': 0.006338919961929698, 'generator_loss': 0.14200538188490885}\n",
"{'recon_loss': 0.0039724162180122275, 'discriminator_loss': 0.001310328425967357, 'generator_loss': 0.10580501766674151}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 0.0044376667007616985, 'discriminator_loss': 0.0892188207333197, 'generator_loss': 0.1022309624724539}\n",
"{'recon_loss': 0.00486226089974474, 'discriminator_loss': 0.0008227211078739705, 'generator_loss': 0.19349832149455706}\n",
"{'recon_loss': 0.003148686467446583, 'discriminator_loss': 0.0016296418563373875, 'generator_loss': 0.20861199931852806}\n",
"{'recon_loss': 0.005954995718008465, 'discriminator_loss': 0.0022831597443798662, 'generator_loss': 0.19159464465812623}\n",
"{'recon_loss': 0.004452379552664933, 'discriminator_loss': 0.0015901057876078254, 'generator_loss': 0.18794751823446243}\n",
"{'recon_loss': 0.004631791579966468, 'discriminator_loss': 0.002101959851331923, 'generator_loss': 0.20194373407238433}\n",
"{'recon_loss': 0.004225154348429254, 'discriminator_loss': 0.004798219317366095, 'generator_loss': 0.19140867153827368}\n",
"{'recon_loss': 0.004647240205312399, 'discriminator_loss': 0.001448843602287783, 'generator_loss': 0.09574094039910515}\n",
"{'recon_loss': 0.007798200230633117, 'discriminator_loss': 0.0016974827334123607, 'generator_loss': 0.19681913078691748}\n",
"{'recon_loss': 0.003515810779888672, 'discriminator_loss': 0.0029183236178251357, 'generator_loss': 0.10196660012963497}\n",
"{'recon_loss': 0.0039758390560852225, 'discriminator_loss': 0.08770556880683437, 'generator_loss': 0.0952505138265191}\n",
"{'recon_loss': 0.004668092717047067, 'discriminator_loss': 0.0013868160375657328, 'generator_loss': 0.016634876213205217}\n",
"{'recon_loss': 0.004404869516621883, 'discriminator_loss': 0.0037842305454793847, 'generator_loss': 0.227502800702856}\n",
"{'recon_loss': 0.006988261982385609, 'discriminator_loss': 0.004250810199195956, 'generator_loss': 0.10657358905134337}\n",
"{'recon_loss': 0.005749266838776907, 'discriminator_loss': 0.0035364381023347373, 'generator_loss': 0.1238264886635138}\n",
"{'recon_loss': 0.005097747694035481, 'discriminator_loss': 0.004527921979368807, 'generator_loss': 0.0963811556769235}\n",
"{'recon_loss': 0.004813921626590176, 'discriminator_loss': 0.0033324298930284984, 'generator_loss': 0.10917852397147793}\n",
"{'recon_loss': 0.00448409945105848, 'discriminator_loss': 0.0024037710477067442, 'generator_loss': 0.1669535411733564}\n",
"{'recon_loss': 0.003937728927201021, 'discriminator_loss': 0.001969573878529277, 'generator_loss': 0.10774803734518644}\n",
"{'recon_loss': 0.004625818789678528, 'discriminator_loss': 0.003434168668740194, 'generator_loss': 0.019120156379120047}\n",
"{'recon_loss': 0.004552368716402307, 'discriminator_loss': 0.00360648845765642, 'generator_loss': 0.128895106331363}\n",
"{'recon_loss': 0.003633237205540171, 'discriminator_loss': 0.0009850110015563519, 'generator_loss': 0.19517135202172783}\n",
"{'recon_loss': 0.005326163077516747, 'discriminator_loss': 0.0013203275268923145, 'generator_loss': 0.10786921216745643}\n",
"{'recon_loss': 0.003094512696941823, 'discriminator_loss': 0.002849605157007089, 'generator_loss': 0.21271336512057082}\n",
"{'recon_loss': 0.003909073172997298, 'discriminator_loss': 0.00363941112999498, 'generator_loss': 0.12588448174240194}\n",
"{'recon_loss': 0.0052378584864961695, 'discriminator_loss': 0.001981077813657443, 'generator_loss': 0.10510804171413424}\n",
"{'recon_loss': 0.00476270808799411, 'discriminator_loss': 0.0017557347753074336, 'generator_loss': 0.10199848717022574}\n",
"{'recon_loss': 0.002367924643811332, 'discriminator_loss': 0.001577449059675873, 'generator_loss': 0.1079328839474558}\n",
"{'recon_loss': 0.005616010162335482, 'discriminator_loss': 0.0037163747243402724, 'generator_loss': 0.12903462636021662}\n",
"{'recon_loss': 0.004132158060690701, 'discriminator_loss': 0.002066083463425306, 'generator_loss': 0.20787104797508033}\n",
"Training for 5\n",
"{'recon_loss': 0.025689306013470317, 'discriminator_loss': 0.7126679967096703, 'generator_loss': 1.4157862783077375}\n",
"{'recon_loss': 0.022122802190024438, 'discriminator_loss': 0.6436657827703198, 'generator_loss': 1.6392161555625686}\n",
"{'recon_loss': 0.02310087466884709, 'discriminator_loss': 0.5745077129809102, 'generator_loss': 1.9368215709475416}\n",
"{'recon_loss': 0.02793162826263824, 'discriminator_loss': 0.7200208956272758, 'generator_loss': 2.370444486488649}\n",
"{'recon_loss': 0.0203072143958159, 'discriminator_loss': 0.5516877187855879, 'generator_loss': 2.363345549334234}\n",
"{'recon_loss': 0.022635163477877168, 'discriminator_loss': 0.5884136175689985, 'generator_loss': 2.1792238249850633}\n",
"{'recon_loss': 0.025945555884758244, 'discriminator_loss': 0.6498162574204968, 'generator_loss': 2.3485562765418586}\n",
"{'recon_loss': 0.025689338089057573, 'discriminator_loss': 0.8380070637218916, 'generator_loss': 2.5352035030048694}\n",
"{'recon_loss': 0.023773967999605572, 'discriminator_loss': 0.7150265125174019, 'generator_loss': 2.599645470854026}\n",
"{'recon_loss': 0.018328173137278088, 'discriminator_loss': 0.49573612535119654, 'generator_loss': 1.7576850928253864}\n",
"{'recon_loss': 0.02354843761753561, 'discriminator_loss': 0.6684946997381335, 'generator_loss': 2.428816661762832}\n",
"{'recon_loss': 0.01777971674595736, 'discriminator_loss': 0.7187481202072834, 'generator_loss': 2.6096003397026255}\n",
"{'recon_loss': 0.014332950462109875, 'discriminator_loss': 0.6862541140623428, 'generator_loss': 2.5190814332147338}\n",
"{'recon_loss': 0.01356042213983671, 'discriminator_loss': 0.6240853197034917, 'generator_loss': 1.9866605068571004}\n",
"{'recon_loss': 0.012317540837826418, 'discriminator_loss': 0.6258494313338294, 'generator_loss': 2.017136535452838}\n",
"{'recon_loss': 0.011126812932897379, 'discriminator_loss': 0.5149413053807451, 'generator_loss': 1.577445929373928}\n",
"{'recon_loss': 0.009836489239520957, 'discriminator_loss': 0.574086259956935, 'generator_loss': 1.7601447021541883}\n",
"{'recon_loss': 0.012969536964791, 'discriminator_loss': 0.5238413529086802, 'generator_loss': 1.8366877936837662}\n",
"{'recon_loss': 0.013561261049632728, 'discriminator_loss': 0.47308631342409846, 'generator_loss': 1.8775963813216243}\n",
"{'recon_loss': 0.0106170593994397, 'discriminator_loss': 0.5930565102915069, 'generator_loss': 1.7709329850110576}\n",
"{'recon_loss': 0.02204556309257462, 'discriminator_loss': 0.5806144191392103, 'generator_loss': 1.3717219817578492}\n",
"{'recon_loss': 0.0068420638641447365, 'discriminator_loss': 0.07831239476203264, 'generator_loss': 0.22448323800429776}\n",
"{'recon_loss': 0.0032377545483109997, 'discriminator_loss': 0.045162702581831186, 'generator_loss': 0.033177108592389315}\n",
"{'recon_loss': 0.001513635381578621, 'discriminator_loss': 0.003929732907195171, 'generator_loss': 0.10461156968323218}\n",
"{'recon_loss': 0.006804173778780592, 'discriminator_loss': 0.010275357426188129, 'generator_loss': 0.13317567378912165}\n",
"{'recon_loss': 0.0020771274282846025, 'discriminator_loss': 0.002942729106048296, 'generator_loss': 0.06429025072454987}\n",
"{'recon_loss': 0.0010433598043677686, 'discriminator_loss': 0.0014184924817783582, 'generator_loss': 0.08078657001543284}\n",
"{'recon_loss': 0.001771367580518437, 'discriminator_loss': 0.0011395818683607346, 'generator_loss': 0.09617683699914742}\n",
"{'recon_loss': 0.0014248871529762128, 'discriminator_loss': 0.003718709103412521, 'generator_loss': 0.10471101470895891}\n",
"{'recon_loss': 0.00037901328333039873, 'discriminator_loss': 0.002480002021655849, 'generator_loss': 0.028120583327034977}\n",
"{'recon_loss': 0.0015003812173421892, 'discriminator_loss': 0.0017215426120204009, 'generator_loss': 0.011232475318613653}\n",
"{'recon_loss': 0.0009523683748758644, 'discriminator_loss': 0.001919096782102082, 'generator_loss': 0.07766869073071807}\n",
"{'recon_loss': 0.0010874758711304552, 'discriminator_loss': 0.0024423215127994374, 'generator_loss': 0.10056235931327233}\n",
"{'recon_loss': 0.0012664724680194377, 'discriminator_loss': 0.001683289802059705, 'generator_loss': 0.04559166235143262}\n",
"{'recon_loss': 0.0019143573286046955, 'discriminator_loss': 0.0018046885526891673, 'generator_loss': 0.09717994455501602}\n",
"{'recon_loss': 0.0010879234815023159, 'discriminator_loss': 0.0012306722942983597, 'generator_loss': 0.06264513060565412}\n",
"{'recon_loss': 0.0019330787936786419, 'discriminator_loss': 0.002988741116761464, 'generator_loss': 0.09993274740490514}\n",
"{'recon_loss': 0.0018579376115259783, 'discriminator_loss': 0.0032513470548371, 'generator_loss': 0.10043868761886554}\n",
"{'recon_loss': 0.0007156890160074831, 'discriminator_loss': 0.003198785129365521, 'generator_loss': 0.08033853274279075}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 0.0006199132872774224, 'discriminator_loss': 0.0003960515746703049, 'generator_loss': 0.08969732251422864}\n",
"{'recon_loss': 0.0022859916532931937, 'discriminator_loss': 0.001255694716865631, 'generator_loss': 0.10095991384502621}\n",
"{'recon_loss': 0.002003187557027184, 'discriminator_loss': 0.0027637778131915083, 'generator_loss': 0.09714706753762507}\n",
"{'recon_loss': 0.0007048753465346003, 'discriminator_loss': 0.0009174690022934816, 'generator_loss': 0.08858781338443154}\n",
"{'recon_loss': 0.0008700227097761402, 'discriminator_loss': 0.0006011523617739178, 'generator_loss': 0.09385641139994368}\n",
"{'recon_loss': 0.001132649670339065, 'discriminator_loss': 0.0007255945575056315, 'generator_loss': 0.0970108768567055}\n",
"{'recon_loss': 0.001800775936708261, 'discriminator_loss': 0.0009180631417642181, 'generator_loss': 0.09578331309941286}\n",
"{'recon_loss': 0.0009681706961521385, 'discriminator_loss': 0.0015642096485606629, 'generator_loss': 0.09785391773766193}\n",
"{'recon_loss': 0.002473595956718257, 'discriminator_loss': 0.0011097879131891854, 'generator_loss': 0.09935365670419358}\n",
"{'recon_loss': 0.0006109929893925218, 'discriminator_loss': 0.02158667547266405, 'generator_loss': 0.0028179450854690547}\n",
"{'recon_loss': 0.002649919927278977, 'discriminator_loss': 0.0018384172213442144, 'generator_loss': 0.10625616899636085}\n",
"{'recon_loss': 0.0007014323659392572, 'discriminator_loss': 0.0007270347160149653, 'generator_loss': 0.09085691934098374}\n",
"{'recon_loss': 0.0014054039607306363, 'discriminator_loss': 0.00213853625777846, 'generator_loss': 0.0999961843176276}\n",
"{'recon_loss': 0.0009069634494032489, 'discriminator_loss': 0.0008821965681101858, 'generator_loss': 0.016070006532362555}\n",
"{'recon_loss': 0.0008624774584116069, 'discriminator_loss': 0.0023771970228478297, 'generator_loss': 0.10111528597370954}\n",
"{'recon_loss': 0.0013567757017094596, 'discriminator_loss': 0.002862005142295441, 'generator_loss': 0.017428925934236738}\n",
"{'recon_loss': 0.0014295114277001711, 'discriminator_loss': 0.0025319535982533527, 'generator_loss': 0.10556762812824062}\n",
"{'recon_loss': 0.0007465758498750443, 'discriminator_loss': 0.00126329891857874, 'generator_loss': 0.09711952517001224}\n",
"{'recon_loss': 0.0007243516195943093, 'discriminator_loss': 0.0011302102116914267, 'generator_loss': 0.056298795483123394}\n",
"{'recon_loss': 0.0004813242197592586, 'discriminator_loss': 0.0008219327144138219, 'generator_loss': 0.001594281635327947}\n",
"{'recon_loss': 0.001462699948947076, 'discriminator_loss': 0.08843493858312151, 'generator_loss': 0.006329544549640901}\n",
"{'recon_loss': 0.0002724866248316832, 'discriminator_loss': 0.0027579137978575464, 'generator_loss': 0.008915860393026673}\n",
"{'recon_loss': 0.0007776017889177709, 'discriminator_loss': 0.08870873356677957, 'generator_loss': 0.015479100837654214}\n",
"{'recon_loss': 0.0004184659191400726, 'discriminator_loss': 0.08776868194628498, 'generator_loss': 0.006550374101519623}\n",
"{'recon_loss': 0.0009667799648052682, 'discriminator_loss': 0.08857710780550712, 'generator_loss': 0.014229946390572526}\n",
"{'recon_loss': 0.0010447435422340262, 'discriminator_loss': 0.0009177489625032613, 'generator_loss': 0.0957712202398029}\n",
"{'recon_loss': 0.0013809263249475773, 'discriminator_loss': 0.002383471249714973, 'generator_loss': 0.09926036599577957}\n",
"{'recon_loss': 0.0006090296890541837, 'discriminator_loss': 0.0009920667834661062, 'generator_loss': 0.09120684583108221}\n",
"{'recon_loss': 0.0005904639461712941, 'discriminator_loss': 0.00341419115735716, 'generator_loss': 0.09412795231292033}\n",
"{'recon_loss': 0.0003306661795672742, 'discriminator_loss': 0.08899828819769837, 'generator_loss': 0.01378474989722472}\n",
"{'recon_loss': 0.000825329334812772, 'discriminator_loss': 0.0029486259047484162, 'generator_loss': 0.1030625534905427}\n",
"{'recon_loss': 0.0010210905830071466, 'discriminator_loss': 0.001685574740885207, 'generator_loss': 0.09151091675779341}\n",
"{'recon_loss': 0.0004500660409323578, 'discriminator_loss': 0.0007895216081158367, 'generator_loss': 0.0891980279347703}\n",
"{'recon_loss': 0.03300550555848594, 'discriminator_loss': 0.0036920457293811325, 'generator_loss': 0.09485299921307208}\n",
"{'recon_loss': 0.0002878705976200097, 'discriminator_loss': 0.0012641817096502778, 'generator_loss': 0.0960922685780662}\n",
"{'recon_loss': 0.00089648499351145, 'discriminator_loss': 0.00377597020191966, 'generator_loss': 0.11556051570896816}\n",
"{'recon_loss': 0.0012362019271092406, 'discriminator_loss': 0.000636808125995478, 'generator_loss': 0.0974132846454695}\n",
"{'recon_loss': 0.0007741986368214627, 'discriminator_loss': 0.001916820014014377, 'generator_loss': 0.09757941853938255}\n",
"{'recon_loss': 0.0005831759916877222, 'discriminator_loss': 0.001113050257263935, 'generator_loss': 0.09245021945554399}\n",
"{'recon_loss': 0.0005116155215343659, 'discriminator_loss': 0.001350975641190515, 'generator_loss': 0.09289731649651714}\n",
"{'recon_loss': 0.00020951117447038913, 'discriminator_loss': 0.0007080625975354053, 'generator_loss': 0.09141216927503316}\n",
"{'recon_loss': 0.0005616248519081576, 'discriminator_loss': 0.000666545317442479, 'generator_loss': 0.09254673399896855}\n",
"{'recon_loss': 0.00015537071258071457, 'discriminator_loss': 0.0008262660736686679, 'generator_loss': 0.09054349076826794}\n",
"{'recon_loss': 0.00046405983845891933, 'discriminator_loss': 0.0011527374445020426, 'generator_loss': 0.09371244140145134}\n",
"{'recon_loss': 0.0021053509040157526, 'discriminator_loss': 0.08848385226705725, 'generator_loss': 0.01583320754815677}\n",
"{'recon_loss': 0.00043570838176691494, 'discriminator_loss': 0.0007411165678657006, 'generator_loss': 0.006677227125602993}\n",
"{'recon_loss': 0.00041773973579108836, 'discriminator_loss': 0.0009522097330279368, 'generator_loss': 0.09307979442032681}\n",
"{'recon_loss': 0.0011784540014966526, 'discriminator_loss': 0.0012797424318288838, 'generator_loss': 0.094409713941281}\n",
"{'recon_loss': 2.910495820782027e-05, 'discriminator_loss': 0.0010809343659360165, 'generator_loss': 0.09071635029329937}\n",
"{'recon_loss': 0.0015104121899872625, 'discriminator_loss': 0.0014894242505756785, 'generator_loss': 0.09176513928828575}\n",
"{'recon_loss': 0.0009521972598973534, 'discriminator_loss': 0.001928990572824047, 'generator_loss': 0.007921301430612671}\n",
"{'recon_loss': 0.0008168096300061913, 'discriminator_loss': 0.0008448504562695004, 'generator_loss': 0.09379293576845837}\n",
"{'recon_loss': 0.0016527620708704283, 'discriminator_loss': 0.005939942006500558, 'generator_loss': 0.027474599674783103}\n",
"{'recon_loss': 0.0015408784995078492, 'discriminator_loss': 0.0019102039158323963, 'generator_loss': 0.09978948067468348}\n",
"{'recon_loss': 0.00030910769526893827, 'discriminator_loss': 0.0017496784039491816, 'generator_loss': 0.09581179228983305}\n",
"{'recon_loss': 0.0009626660365085394, 'discriminator_loss': 0.0004908746737032829, 'generator_loss': 0.09289445857098362}\n",
"{'recon_loss': 0.0011955878490200543, 'discriminator_loss': 0.0014106495945670912, 'generator_loss': 0.09644239296153419}\n",
"{'recon_loss': 0.002346693314765111, 'discriminator_loss': 0.0015202783504998537, 'generator_loss': 0.10176104453035768}\n",
"{'recon_loss': 0.0008474529346299772, 'discriminator_loss': 0.0012838427041443833, 'generator_loss': 0.09168882523781757}\n",
"{'recon_loss': 0.00026605725645917886, 'discriminator_loss': 0.001384777510819635, 'generator_loss': 0.0909540082130903}\n",
"{'recon_loss': 0.000227945312795825, 'discriminator_loss': 0.0005628195505530481, 'generator_loss': 0.08964264247567438}\n",
"Training for 4\n",
"{'recon_loss': 0.021726841134304824, 'discriminator_loss': 0.6184158388094686, 'generator_loss': 1.628249753659694}\n",
"{'recon_loss': 0.018608691812060263, 'discriminator_loss': 0.6239456128534959, 'generator_loss': 1.7995574911635126}\n",
"{'recon_loss': 0.03487502901824352, 'discriminator_loss': 0.6462408975141132, 'generator_loss': 2.400310693673752}\n",
"{'recon_loss': 0.024249657554518925, 'discriminator_loss': 0.5471004878156748, 'generator_loss': 2.195275737412611}\n",
"{'recon_loss': 0.03511352839722759, 'discriminator_loss': 0.6907854927844138, 'generator_loss': 2.582588255105905}\n",
"{'recon_loss': 0.01635275084377959, 'discriminator_loss': 0.5702988763700179, 'generator_loss': 2.5626953061501583}\n",
"{'recon_loss': 0.015816282514848717, 'discriminator_loss': 0.6656534694247509, 'generator_loss': 2.2998440762860093}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 0.020290313773421532, 'discriminator_loss': 0.7995296390961163, 'generator_loss': 2.616486318746404}\n",
"{'recon_loss': 0.020128266477847094, 'discriminator_loss': 0.7218180563881169, 'generator_loss': 2.6478240927260126}\n",
"{'recon_loss': 0.018241125095074032, 'discriminator_loss': 0.9071347351050257, 'generator_loss': 2.3407034592412823}\n",
"{'recon_loss': 0.013442573643283969, 'discriminator_loss': 0.691552004772215, 'generator_loss': 2.2565320334841856}\n",
"{'recon_loss': 0.013670865072074394, 'discriminator_loss': 0.49760956111265786, 'generator_loss': 2.1653195679487296}\n",
"{'recon_loss': 0.011712604432564874, 'discriminator_loss': 0.4293507819564723, 'generator_loss': 1.4164232294164112}\n",
"{'recon_loss': 0.015107673146985363, 'discriminator_loss': 0.4777790787231982, 'generator_loss': 1.5976285215598256}\n",
"{'recon_loss': 0.00859991021968374, 'discriminator_loss': 0.36927318520581903, 'generator_loss': 1.6117169686298274}\n",
"{'recon_loss': 0.009833213991974322, 'discriminator_loss': 0.3510055095706154, 'generator_loss': 1.3844589830642968}\n",
"{'recon_loss': 0.006694930551130411, 'discriminator_loss': 0.3078165811360182, 'generator_loss': 0.6398512694151632}\n",
"{'recon_loss': 0.0020308916227439722, 'discriminator_loss': 0.09486204316142254, 'generator_loss': 0.020671509579964796}\n",
"{'recon_loss': 0.004230464586948737, 'discriminator_loss': 0.0949580014578591, 'generator_loss': 0.02912254707064964}\n",
"{'recon_loss': 0.0010434574661674304, 'discriminator_loss': 0.08987884601818259, 'generator_loss': 0.012339774704899689}\n",
"{'recon_loss': 0.0019296682081438741, 'discriminator_loss': 0.08982706112053608, 'generator_loss': 0.015102705424339287}\n",
"{'recon_loss': 0.00458135474062909, 'discriminator_loss': 0.09165324214347062, 'generator_loss': 0.11048183566863692}\n",
"{'recon_loss': 0.0002798252037580141, 'discriminator_loss': 0.08758975201168763, 'generator_loss': 0.00187805668716648}\n",
"{'recon_loss': 0.000988968663175855, 'discriminator_loss': 0.0018499397757886311, 'generator_loss': 0.09561797093669198}\n",
"{'recon_loss': 0.007693077732785251, 'discriminator_loss': 0.0013769394950123117, 'generator_loss': 0.09499297701755773}\n",
"{'recon_loss': 0.0007742828403982265, 'discriminator_loss': 0.0013363626309188504, 'generator_loss': 0.09353879379146807}\n",
"{'recon_loss': 0.00036589202469159256, 'discriminator_loss': 0.0009305849264742003, 'generator_loss': 0.09134082996360135}\n",
"{'recon_loss': 0.00191661934233059, 'discriminator_loss': 0.09150214880413848, 'generator_loss': 0.10316585909414124}\n",
"{'recon_loss': 0.001094529359134187, 'discriminator_loss': 0.000782180248781067, 'generator_loss': 0.09354188159840572}\n",
"{'recon_loss': 0.0027220201411055005, 'discriminator_loss': 0.003341777485304224, 'generator_loss': 0.10742787404330122}\n",
"{'recon_loss': 0.0004324780214691046, 'discriminator_loss': 0.0015768414421532112, 'generator_loss': 0.09052082728504537}\n",
"{'recon_loss': 0.0009318578759736126, 'discriminator_loss': 0.005157932759531796, 'generator_loss': 0.10729251651770162}\n",
"{'recon_loss': 0.0018790696467305896, 'discriminator_loss': 0.002261894589685941, 'generator_loss': 0.09771312462858008}\n",
"{'recon_loss': 0.0014288990833796363, 'discriminator_loss': 0.0019990967145403645, 'generator_loss': 0.09512995692500978}\n",
"{'recon_loss': 0.00018861286692032494, 'discriminator_loss': 0.0015504436654484137, 'generator_loss': 0.0887793611301752}\n",
"{'recon_loss': 0.0018093122401968598, 'discriminator_loss': 0.00210834465882379, 'generator_loss': 0.10328930929086698}\n",
"{'recon_loss': 0.00040328147680837394, 'discriminator_loss': 0.002214234697272679, 'generator_loss': 0.09428840999436336}\n",
"{'recon_loss': 0.0024447056268780787, 'discriminator_loss': 0.08939783546259321, 'generator_loss': 0.01781938130962921}\n",
"{'recon_loss': 0.0019485317846737256, 'discriminator_loss': 0.0017702567278087115, 'generator_loss': 0.09722070520383005}\n",
"{'recon_loss': 0.0009290382750771832, 'discriminator_loss': 0.0015142276572635697, 'generator_loss': 0.09976252604665123}\n",
"{'recon_loss': 0.001555963381052976, 'discriminator_loss': 0.08908421810091857, 'generator_loss': 0.01549828761999699}\n",
"{'recon_loss': 0.000544458227510095, 'discriminator_loss': 0.0011513715345398252, 'generator_loss': 0.09598258352472669}\n",
"{'recon_loss': 0.0013492127112036062, 'discriminator_loss': 0.0026189997781979005, 'generator_loss': 0.09502214064583114}\n",
"{'recon_loss': 0.0007239379323722145, 'discriminator_loss': 0.003770871278701538, 'generator_loss': 0.0988432726234995}\n",
"{'recon_loss': 0.0011250059450218302, 'discriminator_loss': 0.0022409748758744985, 'generator_loss': 0.09633237341742897}\n",
"{'recon_loss': 0.000823868148435639, 'discriminator_loss': 0.0005098084230408932, 'generator_loss': 0.09204982856873725}\n",
"{'recon_loss': 0.0016058918556299772, 'discriminator_loss': 0.0016095471337058162, 'generator_loss': 0.020396307950225026}\n",
"{'recon_loss': 0.00025036296756494604, 'discriminator_loss': 0.08794575470771268, 'generator_loss': 0.007020495525516337}\n",
"{'recon_loss': 0.0010163398670439544, 'discriminator_loss': 0.0872993490358345, 'generator_loss': 0.009017752401117737}\n",
"{'recon_loss': 0.0019147273285771526, 'discriminator_loss': 0.09004402100078225, 'generator_loss': 0.010390813446078126}\n",
"{'recon_loss': 0.00039540104937568304, 'discriminator_loss': 0.08710397404883426, 'generator_loss': 0.002981321431120657}\n",
"{'recon_loss': 0.0021620873014386493, 'discriminator_loss': 0.0888941263682226, 'generator_loss': 0.014813697500813013}\n",
"{'recon_loss': 0.0005589116754632271, 'discriminator_loss': 0.0870445857378048, 'generator_loss': 0.0025473572272146274}\n",
"{'recon_loss': 0.0001121967189081313, 'discriminator_loss': 0.08799489015313451, 'generator_loss': 0.004215157502420036}\n",
"{'recon_loss': 0.0007017208577042739, 'discriminator_loss': 0.08845390406689496, 'generator_loss': 0.009491785479538434}\n",
"{'recon_loss': 0.0006971631965539799, 'discriminator_loss': 0.08758667267033499, 'generator_loss': 0.004807546794556464}\n",
"{'recon_loss': 0.0009013256436350128, 'discriminator_loss': 0.002333463958237803, 'generator_loss': 0.09849609265878499}\n",
"{'recon_loss': 0.000762504438209504, 'discriminator_loss': 0.0026660046044132764, 'generator_loss': 0.096064550673032}\n",
"{'recon_loss': 1.3827356607983694e-05, 'discriminator_loss': 0.00012200284865014112, 'generator_loss': 0.08838885091533662}\n",
"{'recon_loss': 0.0009490667415813803, 'discriminator_loss': 0.0022107146249999545, 'generator_loss': 0.008904521228822506}\n",
"{'recon_loss': 0.0020965321144502517, 'discriminator_loss': 0.0014911556964615164, 'generator_loss': 0.10090221411990491}\n",
"{'recon_loss': 0.0003232251004455187, 'discriminator_loss': 0.0016102489578218608, 'generator_loss': 0.09573644443983206}\n",
"{'recon_loss': 0.0013312000125782514, 'discriminator_loss': 0.0018514992781379946, 'generator_loss': 0.10073721705882506}\n",
"{'recon_loss': 0.0003225869956723611, 'discriminator_loss': 0.0004326031492986501, 'generator_loss': 0.004131237374398709}\n",
"{'recon_loss': 0.0008629248423154006, 'discriminator_loss': 0.0878001052788992, 'generator_loss': 0.0029739879744494287}\n",
"{'recon_loss': 0.0007108136779859332, 'discriminator_loss': 0.001178648968648238, 'generator_loss': 0.00946723585725811}\n",
"{'recon_loss': 0.0013422798267479098, 'discriminator_loss': 0.0010507692394901504, 'generator_loss': 0.09757743604122548}\n",
"{'recon_loss': 0.00011267028857344534, 'discriminator_loss': 0.0011592962481891038, 'generator_loss': 0.09316381330163838}\n",
"{'recon_loss': 0.0007312098696298034, 'discriminator_loss': 0.0014156746200185135, 'generator_loss': 0.09645204889672536}\n",
"{'recon_loss': 0.0001385499127005848, 'discriminator_loss': 0.00020129199743797155, 'generator_loss': 0.0877783849375319}\n",
"{'recon_loss': 0.0011024275801665953, 'discriminator_loss': 0.00265568919715227, 'generator_loss': 0.0989930073884691}\n",
"{'recon_loss': 0.0014678672242439388, 'discriminator_loss': 0.001422781609733478, 'generator_loss': 0.09694762793002068}\n",
"{'recon_loss': 0.0003371718669196294, 'discriminator_loss': 0.0019237442865201618, 'generator_loss': 0.08831984560822546}\n",
"{'recon_loss': 5.44871798734811e-05, 'discriminator_loss': 0.0007701539808198434, 'generator_loss': 0.08883059622815466}\n",
"{'recon_loss': 7.615509666979814e-06, 'discriminator_loss': 0.0007625938158298488, 'generator_loss': 0.09467418800456809}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 9.382637358261742e-05, 'discriminator_loss': 0.000166775412557269, 'generator_loss': 0.08735776431565972}\n",
"{'recon_loss': 0.0001490160132424997, 'discriminator_loss': 0.0019306912697972516, 'generator_loss': 0.09197113687814563}\n",
"{'recon_loss': 0.0003293845527708004, 'discriminator_loss': 0.0011892735094068366, 'generator_loss': 0.09161914256042487}\n",
"{'recon_loss': 0.0009028646236643844, 'discriminator_loss': 0.0013601699603133664, 'generator_loss': 0.09470510549932502}\n",
"{'recon_loss': 0.003509241402804769, 'discriminator_loss': 0.0021840451258284795, 'generator_loss': 0.10109899704309008}\n",
"{'recon_loss': 7.932689131017587e-05, 'discriminator_loss': 0.0016618568158666583, 'generator_loss': 0.08298547767848}\n",
"{'recon_loss': 0.0010942271886440638, 'discriminator_loss': 0.003565399523695025, 'generator_loss': 0.10358023795261251}\n",
"{'recon_loss': 0.0004205145310675142, 'discriminator_loss': 0.0021153668916588974, 'generator_loss': 0.09471146028272565}\n",
"{'recon_loss': 0.00028142682957269416, 'discriminator_loss': 0.000951121746022899, 'generator_loss': 0.09454926878694574}\n",
"{'recon_loss': 0.001716556007823846, 'discriminator_loss': 0.0027406010568265674, 'generator_loss': 0.0906346745403741}\n",
"{'recon_loss': 0.0007992073315875363, 'discriminator_loss': 0.000596546263123077, 'generator_loss': 0.09199477179033956}\n",
"{'recon_loss': 8.194618601982015e-06, 'discriminator_loss': 0.0002505216048143066, 'generator_loss': 0.08900108021855825}\n",
"{'recon_loss': 0.0005246060100994388, 'discriminator_loss': 0.00034951686876444034, 'generator_loss': 0.08946391377728152}\n",
"{'recon_loss': 5.610053156904486e-05, 'discriminator_loss': 0.0012712710516040314, 'generator_loss': 0.002790534200261874}\n",
"{'recon_loss': 0.0006859948207701906, 'discriminator_loss': 0.0008144962918538654, 'generator_loss': 0.00352215349993399}\n",
"{'recon_loss': 7.957264937598323e-05, 'discriminator_loss': 0.0875148896207873, 'generator_loss': 0.0062778072787760516}\n",
"{'recon_loss': 0.0004955346947483364, 'discriminator_loss': 0.0016762466510107923, 'generator_loss': 0.09777109433341961}\n",
"{'recon_loss': 0.0022508893675550795, 'discriminator_loss': 0.0010439498468207636, 'generator_loss': 0.09262503018317202}\n",
"{'recon_loss': 0.0014187166737463933, 'discriminator_loss': 0.003803563671225156, 'generator_loss': 0.11096958824071518}\n",
"{'recon_loss': 0.00019784831266323935, 'discriminator_loss': 0.002067408632037594, 'generator_loss': 0.09074521577768686}\n",
"{'recon_loss': 1.8738231138017728e-05, 'discriminator_loss': 0.0005449638633206592, 'generator_loss': 0.08923567262706618}\n",
"{'recon_loss': 2.3376960758415737e-05, 'discriminator_loss': 0.0004178013364489646, 'generator_loss': 0.0875897086279073}\n",
"{'recon_loss': 0.0003405536416511701, 'discriminator_loss': 0.0009067564853633293, 'generator_loss': 0.0903687189638132}\n",
"{'recon_loss': 0.00047641574593739253, 'discriminator_loss': 0.001949918454334074, 'generator_loss': 0.09560073515836964}\n",
"{'recon_loss': 0.0018493554147527964, 'discriminator_loss': 0.0022567345298454434, 'generator_loss': 0.09717878447766161}\n",
"Training for 9\n",
"{'recon_loss': 0.05027759059574502, 'discriminator_loss': 0.6902688344818863, 'generator_loss': 1.2183732414365414}\n",
"{'recon_loss': 0.04399566458325819, 'discriminator_loss': 0.6796900327481217, 'generator_loss': 1.4495309573322086}\n",
"{'recon_loss': 0.0427354600537339, 'discriminator_loss': 0.6222366500439955, 'generator_loss': 1.4962985228054488}\n",
"{'recon_loss': 0.03997359346380766, 'discriminator_loss': 0.5946076043586636, 'generator_loss': 1.8002898848835547}\n",
"{'recon_loss': 0.04559360339099204, 'discriminator_loss': 0.6705445933282076, 'generator_loss': 2.1477692558537775}\n",
"{'recon_loss': 0.06345685213411124, 'discriminator_loss': 0.5114216383677631, 'generator_loss': 2.3556482534312724}\n",
"{'recon_loss': 0.04866545822853971, 'discriminator_loss': 0.45872124280761833, 'generator_loss': 2.1116019271725985}\n",
"{'recon_loss': 0.051597991268933247, 'discriminator_loss': 0.4837737275877191, 'generator_loss': 2.4472581297907996}\n",
"{'recon_loss': 0.05026102753825255, 'discriminator_loss': 0.4563154747438191, 'generator_loss': 2.782715054612663}\n",
"{'recon_loss': 0.04613955920224419, 'discriminator_loss': 0.3777019583699691, 'generator_loss': 2.3983334248988473}\n",
"{'recon_loss': 0.043667454805458805, 'discriminator_loss': 0.3287905525023015, 'generator_loss': 2.2336150347887793}\n",
"{'recon_loss': 0.049982064679714305, 'discriminator_loss': 0.3513553650235411, 'generator_loss': 2.53124427016656}\n",
"{'recon_loss': 0.04159979056610829, 'discriminator_loss': 0.4351387535357595, 'generator_loss': 2.3249216726676902}\n",
"{'recon_loss': 0.046790400626035185, 'discriminator_loss': 0.318905625361294, 'generator_loss': 2.176232492504407}\n",
"{'recon_loss': 0.04493244199375341, 'discriminator_loss': 0.3601568399380949, 'generator_loss': 2.2540726260324218}\n",
"{'recon_loss': 0.04404940196576405, 'discriminator_loss': 0.25091605154263913, 'generator_loss': 2.060656472067138}\n",
"{'recon_loss': 0.04148889559434596, 'discriminator_loss': 0.22070154349258797, 'generator_loss': 1.4495105401954556}\n",
"{'recon_loss': 0.04167255218414285, 'discriminator_loss': 0.202807547013865, 'generator_loss': 1.4784228792367269}\n",
"{'recon_loss': 0.034223141393655836, 'discriminator_loss': 0.18932640097623493, 'generator_loss': 1.0934269106268284}\n",
"{'recon_loss': 0.027694342560740305, 'discriminator_loss': 0.131510134101038, 'generator_loss': 0.7059201718724553}\n",
"{'recon_loss': 0.02899720070662917, 'discriminator_loss': 0.10184964219379665, 'generator_loss': 0.4869143928415212}\n",
"{'recon_loss': 0.026584374418847225, 'discriminator_loss': 0.07873556887656076, 'generator_loss': 0.40718222544271143}\n",
"{'recon_loss': 0.019367293953566855, 'discriminator_loss': 0.07828330656457412, 'generator_loss': 0.3457349929584181}\n",
"{'recon_loss': 0.021518864947951508, 'discriminator_loss': 0.0526390751851863, 'generator_loss': 0.2712487127145181}\n",
"{'recon_loss': 0.020082246981419027, 'discriminator_loss': 0.03593226816726324, 'generator_loss': 0.15878721826882966}\n",
"{'recon_loss': 0.020359149698785845, 'discriminator_loss': 0.03400316028961042, 'generator_loss': 0.17845226564776884}\n",
"{'recon_loss': 0.014469971639954258, 'discriminator_loss': 0.012891960973372796, 'generator_loss': 0.14738808653051802}\n",
"{'recon_loss': 0.013111096386427483, 'discriminator_loss': 0.020651267319636877, 'generator_loss': 0.13317991010935382}\n",
"{'recon_loss': 0.014633049440680512, 'discriminator_loss': 0.016821899635590984, 'generator_loss': 0.09753532475072613}\n",
"{'recon_loss': 0.014978575432028487, 'discriminator_loss': 0.02204315973145713, 'generator_loss': 0.14577405713896668}\n",
"{'recon_loss': 0.0159585358451113, 'discriminator_loss': 0.031122212097559165, 'generator_loss': 0.21939045434873833}\n",
"{'recon_loss': 0.011974345885062812, 'discriminator_loss': 0.014865161161039062, 'generator_loss': 0.14931311135535738}\n",
"{'recon_loss': 0.010907079187855445, 'discriminator_loss': 0.01072694096628263, 'generator_loss': 0.06319492434113957}\n",
"{'recon_loss': 0.008073188110761317, 'discriminator_loss': 0.02496728940210077, 'generator_loss': 0.14834581170605898}\n",
"{'recon_loss': 0.008757668417827616, 'discriminator_loss': 0.0058795518699074605, 'generator_loss': 0.04403198904329752}\n",
"{'recon_loss': 0.011122557362572331, 'discriminator_loss': 0.011635360837564218, 'generator_loss': 0.1420405137939016}\n",
"{'recon_loss': 0.008413183892007023, 'discriminator_loss': 0.005678046314688118, 'generator_loss': 0.12443835676635365}\n",
"{'recon_loss': 0.008373570201047478, 'discriminator_loss': 0.006363945847651985, 'generator_loss': 0.04750216278554099}\n",
"{'recon_loss': 0.0077073987963398915, 'discriminator_loss': 0.004535211969189517, 'generator_loss': 0.12386040763890288}\n",
"{'recon_loss': 0.007685290682860145, 'discriminator_loss': 0.008342335474193002, 'generator_loss': 0.041815353368435955}\n",
"{'recon_loss': 0.006744457799969151, 'discriminator_loss': 0.005117318908619679, 'generator_loss': 0.11233273245281401}\n",
"{'recon_loss': 0.00752572571306007, 'discriminator_loss': 0.0037740913175728554, 'generator_loss': 0.02376196911641088}\n",
"{'recon_loss': 0.00643616760645373, 'discriminator_loss': 0.006459984008002017, 'generator_loss': 0.11320691618206925}\n",
"{'recon_loss': 0.006331473869483812, 'discriminator_loss': 0.003292970619824801, 'generator_loss': 0.021418275567091874}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 0.007888059427647478, 'discriminator_loss': 0.00950798144046745, 'generator_loss': 0.0872876254496191}\n",
"{'recon_loss': 0.00786409095296534, 'discriminator_loss': 0.015177327445896147, 'generator_loss': 0.07327788084529815}\n",
"{'recon_loss': 0.007780060479663938, 'discriminator_loss': 0.006799394127732621, 'generator_loss': 0.033565233056293435}\n",
"{'recon_loss': 0.004790164889907042, 'discriminator_loss': 0.0034037592922343827, 'generator_loss': 0.03430889025638212}\n",
"{'recon_loss': 0.0060114910499564685, 'discriminator_loss': 0.006532384613801605, 'generator_loss': 0.05300777545906473}\n",
"{'recon_loss': 0.022440363662661268, 'discriminator_loss': 0.005703625227614086, 'generator_loss': 0.03475724353557007}\n",
"{'recon_loss': 0.006650423218883624, 'discriminator_loss': 0.0021245421974129216, 'generator_loss': 0.015593900549212518}\n",
"{'recon_loss': 0.0058153361598793415, 'discriminator_loss': 0.003603130995520473, 'generator_loss': 0.11950266118136547}\n",
"{'recon_loss': 0.006304276396187267, 'discriminator_loss': 0.003853661131227194, 'generator_loss': 0.11692352792111622}\n",
"{'recon_loss': 0.007563248199910829, 'discriminator_loss': 0.004433574958120836, 'generator_loss': 0.028041120967947218}\n",
"{'recon_loss': 0.00684462336157974, 'discriminator_loss': 0.004849159272636349, 'generator_loss': 0.057076331103483015}\n",
"{'recon_loss': 0.006841055437890804, 'discriminator_loss': 0.00262418300576428, 'generator_loss': 0.12129912854430021}\n",
"{'recon_loss': 0.006636398076414476, 'discriminator_loss': 0.005336453664171332, 'generator_loss': 0.11834633560409857}\n",
"{'recon_loss': 0.0068104572144477805, 'discriminator_loss': 0.004932707978211245, 'generator_loss': 0.030572266853885154}\n",
"{'recon_loss': 0.005474341593544685, 'discriminator_loss': 0.003488163005988725, 'generator_loss': 0.10934868179852342}\n",
"{'recon_loss': 0.00909012326963829, 'discriminator_loss': 0.0049730792095796636, 'generator_loss': 0.15337853762271564}\n",
"{'recon_loss': 0.0052312276428614635, 'discriminator_loss': 0.002639285411212987, 'generator_loss': 0.0428432778633068}\n",
"{'recon_loss': 0.005925239481063273, 'discriminator_loss': 0.005472994289667628, 'generator_loss': 0.0382795853419292}\n",
"{'recon_loss': 0.006061093242383522, 'discriminator_loss': 0.0033616134396515234, 'generator_loss': 0.10296115038407588}\n",
"{'recon_loss': 0.005466662110212907, 'discriminator_loss': 0.0019194851104699848, 'generator_loss': 0.012958979057828536}\n",
"{'recon_loss': 0.0064583119909084824, 'discriminator_loss': 0.0062178241260154215, 'generator_loss': 0.12398962034917982}\n",
"{'recon_loss': 0.0047011364967029096, 'discriminator_loss': 0.0038149842625830404, 'generator_loss': 0.10151700740259897}\n",
"{'recon_loss': 0.006121171066384291, 'discriminator_loss': 0.002994731716317623, 'generator_loss': 0.10231918516503129}\n",
"{'recon_loss': 0.00485203300161003, 'discriminator_loss': 0.0032669991750156994, 'generator_loss': 0.02117704721601028}\n",
"{'recon_loss': 0.004888979435332291, 'discriminator_loss': 0.004239282320396346, 'generator_loss': 0.024795634228062875}\n",
"{'recon_loss': 0.00651660621553278, 'discriminator_loss': 0.09123410937397768, 'generator_loss': 0.022671550568172723}\n",
"{'recon_loss': 0.0052573375163290645, 'discriminator_loss': 0.09372373321502492, 'generator_loss': 0.052574869706211065}\n",
"{'recon_loss': 0.006017192116664082, 'discriminator_loss': 0.0034090217930645567, 'generator_loss': 0.11287237377354631}\n",
"{'recon_loss': 0.004244885668596065, 'discriminator_loss': 0.004291783865847496, 'generator_loss': 0.0352019507820749}\n",
"{'recon_loss': 0.004421531853826602, 'discriminator_loss': 0.003080424943307927, 'generator_loss': 0.12079464149300034}\n",
"{'recon_loss': 0.004670156326261668, 'discriminator_loss': 0.0029096967902895055, 'generator_loss': 0.01293315850802875}\n",
"{'recon_loss': 0.005875007058242853, 'discriminator_loss': 0.0021597023769549992, 'generator_loss': 0.010769326280775366}\n",
"{'recon_loss': 0.003230073430789786, 'discriminator_loss': 0.0031560406309150703, 'generator_loss': 0.09769423880067134}\n",
"{'recon_loss': 0.0033498698633493526, 'discriminator_loss': 0.0027580289428889232, 'generator_loss': 0.11460939173932583}\n",
"{'recon_loss': 0.004561529555609126, 'discriminator_loss': 0.002996562637499276, 'generator_loss': 0.10821892702954847}\n",
"{'recon_loss': 0.002945475062334279, 'discriminator_loss': 0.0018246751515780158, 'generator_loss': 0.013107944198217755}\n",
"{'recon_loss': 0.005184381804176776, 'discriminator_loss': 0.0013447789048069494, 'generator_loss': 0.016337972077019352}\n",
"{'recon_loss': 0.003615656811751738, 'discriminator_loss': 0.006320046696274133, 'generator_loss': 0.11670379570577483}\n",
"{'recon_loss': 0.004304001728560406, 'discriminator_loss': 0.003642007001619606, 'generator_loss': 0.038280304137771615}\n",
"{'recon_loss': 0.003073141157478669, 'discriminator_loss': 0.003940474465556846, 'generator_loss': 0.13383722986145638}\n",
"{'recon_loss': 0.004616462249791075, 'discriminator_loss': 0.006179865488574583, 'generator_loss': 0.03608515068350303}\n",
"{'recon_loss': 0.004852854800830918, 'discriminator_loss': 0.004112853637826167, 'generator_loss': 0.05006997992118853}\n",
"{'recon_loss': 0.003692713240799618, 'discriminator_loss': 0.003446815319574254, 'generator_loss': 0.11024882022387865}\n",
"{'recon_loss': 0.003383492749302851, 'discriminator_loss': 0.0033876942678916612, 'generator_loss': 0.10135150056490257}\n",
"{'recon_loss': 0.0029496810705875553, 'discriminator_loss': 0.0019694047819234185, 'generator_loss': 0.09695471115809541}\n",
"{'recon_loss': 0.0032491331184242573, 'discriminator_loss': 0.002651524458395875, 'generator_loss': 0.10584244141364452}\n",
"{'recon_loss': 0.0034861361232009893, 'discriminator_loss': 0.0023025631757784925, 'generator_loss': 0.10738226076197421}\n",
"{'recon_loss': 0.0033618771754085177, 'discriminator_loss': 0.0025210340338445857, 'generator_loss': 0.013278127916789019}\n",
"{'recon_loss': 0.0028237413787692398, 'discriminator_loss': 0.0014134774749867227, 'generator_loss': 0.01393248605375623}\n",
"{'recon_loss': 0.0032945015180065908, 'discriminator_loss': 0.001494948398549692, 'generator_loss': 0.007487240530189612}\n",
"{'recon_loss': 0.00367155044440827, 'discriminator_loss': 0.005082842044398443, 'generator_loss': 0.04077464067391726}\n",
"{'recon_loss': 0.003035007400501976, 'discriminator_loss': 0.0015717117524346308, 'generator_loss': 0.10184578777496132}\n",
"{'recon_loss': 0.003696963629559168, 'discriminator_loss': 0.0035006573290520555, 'generator_loss': 0.12946428628912143}\n",
"{'recon_loss': 0.0023849498111512693, 'discriminator_loss': 0.0028646268157828773, 'generator_loss': 0.018282770549142555}\n",
"{'recon_loss': 0.0033729495395408635, 'discriminator_loss': 0.005107122909916755, 'generator_loss': 0.10791145047883449}\n",
"{'recon_loss': 0.002974568498995092, 'discriminator_loss': 0.0038680394531417223, 'generator_loss': 0.11229836121793259}\n",
"Training for 1\n",
"{'recon_loss': 0.04454109906488047, 'discriminator_loss': 0.5804717936857262, 'generator_loss': 1.1212898696487272}\n",
"{'recon_loss': 0.03569134924240205, 'discriminator_loss': 0.3082314122412073, 'generator_loss': 0.65474998496061}\n",
"{'recon_loss': 0.04368622335236772, 'discriminator_loss': 0.5137711295380665, 'generator_loss': 1.5355570472065527}\n",
"{'recon_loss': 0.04399895081507164, 'discriminator_loss': 0.5257451687026863, 'generator_loss': 1.9766643089265679}\n",
"{'recon_loss': 0.05254416883544032, 'discriminator_loss': 0.5394545705549082, 'generator_loss': 2.0318614777608133}\n",
"{'recon_loss': 0.04890985792530841, 'discriminator_loss': 0.51538260651743, 'generator_loss': 1.8103239668074564}\n",
"{'recon_loss': 0.05592366329735922, 'discriminator_loss': 0.4492049673244582, 'generator_loss': 1.9393694874030263}\n",
"{'recon_loss': 0.052092918283750664, 'discriminator_loss': 0.32740272018103744, 'generator_loss': 1.8300900926542043}\n",
"{'recon_loss': 0.04834028403157715, 'discriminator_loss': 0.2586784291329171, 'generator_loss': 1.5022802259334265}\n",
"{'recon_loss': 0.04713558362713247, 'discriminator_loss': 0.35887131416917445, 'generator_loss': 1.8294689113171256}\n",
"{'recon_loss': 0.04345740015845484, 'discriminator_loss': 0.33879139208838566, 'generator_loss': 1.7917897710249053}\n",
"{'recon_loss': 0.038459302022428386, 'discriminator_loss': 0.17706811385481952, 'generator_loss': 1.0700179083862495}\n",
"{'recon_loss': 0.03448987596413242, 'discriminator_loss': 0.145230389214191, 'generator_loss': 0.8027652940667824}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 0.032139306310002676, 'discriminator_loss': 0.09616344928025998, 'generator_loss': 0.5104925657187275}\n",
"{'recon_loss': 0.027706409926788328, 'discriminator_loss': 0.03671655293007676, 'generator_loss': 0.20482028639833233}\n",
"{'recon_loss': 0.026933337425700175, 'discriminator_loss': 0.05672616358546905, 'generator_loss': 0.4125752007991225}\n",
"{'recon_loss': 0.02307820922154559, 'discriminator_loss': 0.024675783676524697, 'generator_loss': 0.25791487301086735}\n",
"{'recon_loss': 0.02207319154526954, 'discriminator_loss': 0.1030059350354962, 'generator_loss': 0.0778401003931573}\n",
"{'recon_loss': 0.020988549542819247, 'discriminator_loss': 0.01833014588904843, 'generator_loss': 0.12127060291179498}\n",
"{'recon_loss': 0.020718844443525716, 'discriminator_loss': 0.019778330719107808, 'generator_loss': 0.24346042310504007}\n",
"{'recon_loss': 0.0201470994659063, 'discriminator_loss': 0.023483426337032088, 'generator_loss': 0.25843572834914375}\n",
"{'recon_loss': 0.018911463661872824, 'discriminator_loss': 0.019971075410435173, 'generator_loss': 0.21812594269003646}\n",
"{'recon_loss': 0.016985219108858075, 'discriminator_loss': 0.008455092071592995, 'generator_loss': 0.13352263644869405}\n",
"{'recon_loss': 0.01731514237322681, 'discriminator_loss': 0.006421254072034142, 'generator_loss': 0.046695584523131384}\n",
"{'recon_loss': 0.016886169301613876, 'discriminator_loss': 0.0074265348171024355, 'generator_loss': 0.13570217762952524}\n",
"{'recon_loss': 0.01679649965161336, 'discriminator_loss': 0.01296675971407331, 'generator_loss': 0.09514587089829456}\n",
"{'recon_loss': 0.01627375723793518, 'discriminator_loss': 0.01258176004994677, 'generator_loss': 0.21226079155484737}\n",
"{'recon_loss': 0.015460778859352702, 'discriminator_loss': 0.008750592425978046, 'generator_loss': 0.05848759267900107}\n",
"{'recon_loss': 0.015360012650489807, 'discriminator_loss': 0.008849704443464224, 'generator_loss': 0.17251378660365793}\n",
"{'recon_loss': 0.01735662692782221, 'discriminator_loss': 0.014339464799098521, 'generator_loss': 0.18518767803446615}\n",
"{'recon_loss': 0.015998163233243805, 'discriminator_loss': 0.005171527677387772, 'generator_loss': 0.13259545645427148}\n",
"{'recon_loss': 0.01428798208028972, 'discriminator_loss': 0.014241523323957766, 'generator_loss': 0.06635645793813214}\n",
"{'recon_loss': 0.014622883492409153, 'discriminator_loss': 0.007414008359051904, 'generator_loss': 0.15054837479852434}\n",
"{'recon_loss': 0.01576422124527203, 'discriminator_loss': 0.011933147137011045, 'generator_loss': 0.18357982199735323}\n",
"{'recon_loss': 0.014424443519665467, 'discriminator_loss': 0.020372116862795588, 'generator_loss': 0.14468003129048446}\n",
"{'recon_loss': 0.013929926566387663, 'discriminator_loss': 0.019220854256705184, 'generator_loss': 0.27508474405118394}\n",
"{'recon_loss': 0.014440770301939779, 'discriminator_loss': 0.011564540891687564, 'generator_loss': 0.14663629645796353}\n",
"{'recon_loss': 0.01514470973117897, 'discriminator_loss': 0.010813879174363947, 'generator_loss': 0.1298877061656368}\n",
"{'recon_loss': 0.013797004457800672, 'discriminator_loss': 0.008852339888217651, 'generator_loss': 0.1482731809924359}\n",
"{'recon_loss': 0.012387587798148893, 'discriminator_loss': 0.0027307668125702814, 'generator_loss': 0.022673180711113496}\n",
"{'recon_loss': 0.012861432068224822, 'discriminator_loss': 0.00854937144422868, 'generator_loss': 0.13155266404437385}\n",
"{'recon_loss': 0.013863027159413604, 'discriminator_loss': 0.006581005347388371, 'generator_loss': 0.09359520415119559}\n",
"{'recon_loss': 0.012802901944401791, 'discriminator_loss': 0.01051536576100508, 'generator_loss': 0.1650994481543222}\n",
"{'recon_loss': 0.011694001584681191, 'discriminator_loss': 0.0037025848433963698, 'generator_loss': 0.11919328329389271}\n",
"{'recon_loss': 0.01255598485785134, 'discriminator_loss': 0.009686042600535174, 'generator_loss': 0.16768406793179869}\n",
"{'recon_loss': 0.04914495959306421, 'discriminator_loss': 0.0039036826810409015, 'generator_loss': 0.10993999558898443}\n",
"{'recon_loss': 0.012045326775341206, 'discriminator_loss': 0.0032533762641284727, 'generator_loss': 0.10020817243559392}\n",
"{'recon_loss': 0.011961777759312264, 'discriminator_loss': 0.003935630637463522, 'generator_loss': 0.01329048287769467}\n",
"{'recon_loss': 0.012303272392085974, 'discriminator_loss': 0.007745723913795979, 'generator_loss': 0.12441959207899583}\n",
"{'recon_loss': 0.011129978432141047, 'discriminator_loss': 0.0037197811732438088, 'generator_loss': 0.10955471702115722}\n",
"{'recon_loss': 0.013018239869405025, 'discriminator_loss': 0.006784548988133194, 'generator_loss': 0.12924956546486122}\n",
"{'recon_loss': 0.012138845083852481, 'discriminator_loss': 0.006125966699407249, 'generator_loss': 0.12200192585024895}\n",
"{'recon_loss': 0.010964975362043534, 'discriminator_loss': 0.004174551729062645, 'generator_loss': 0.10672032502385745}\n",
"{'recon_loss': 0.009699725076478986, 'discriminator_loss': 0.00533075086382063, 'generator_loss': 0.10904629306609939}\n",
"{'recon_loss': 0.011958546400284886, 'discriminator_loss': 0.005033161997680189, 'generator_loss': 0.10988346128789404}\n",
"{'recon_loss': 0.010768905461177314, 'discriminator_loss': 0.0045069692856285915, 'generator_loss': 0.1226861177853123}\n",
"{'recon_loss': 0.010017084210146401, 'discriminator_loss': 0.002862266026460847, 'generator_loss': 0.1073775991206936}\n",
"{'recon_loss': 0.011507388982095816, 'discriminator_loss': 0.022916959532902632, 'generator_loss': 0.17379538859437305}\n",
"{'recon_loss': 0.011259623785831101, 'discriminator_loss': 0.09912084268923431, 'generator_loss': 0.12221037385433904}\n",
"{'recon_loss': 0.010173494338707872, 'discriminator_loss': 0.08982391812821959, 'generator_loss': 0.016670891097544716}\n",
"{'recon_loss': 0.008306422010947478, 'discriminator_loss': 0.09346071612572134, 'generator_loss': 0.05357499392068462}\n",
"{'recon_loss': 0.009894343275046234, 'discriminator_loss': 0.0018645524492537913, 'generator_loss': 0.10800018709408711}\n",
"{'recon_loss': 0.010770704019472504, 'discriminator_loss': 0.004572655053695392, 'generator_loss': 0.03257219620628851}\n",
"{'recon_loss': 0.01033578005627537, 'discriminator_loss': 0.006939589156342603, 'generator_loss': 0.12524465388830266}\n",
"{'recon_loss': 0.010787115253750281, 'discriminator_loss': 0.09187761280064757, 'generator_loss': 0.027719842202102735}\n",
"{'recon_loss': 0.010329224253494536, 'discriminator_loss': 0.0035271808386522336, 'generator_loss': 0.12028986927557186}\n",
"{'recon_loss': 0.0090101724550486, 'discriminator_loss': 0.09544641958130447, 'generator_loss': 0.045142125489642984}\n",
"{'recon_loss': 0.009425607158178837, 'discriminator_loss': 0.0023447096782410197, 'generator_loss': 0.1129669288953589}\n",
"{'recon_loss': 0.009432939114122203, 'discriminator_loss': 0.09055668281447807, 'generator_loss': 0.024778589058987062}\n",
"{'recon_loss': 0.008016376183963505, 'discriminator_loss': 0.0035188908015592844, 'generator_loss': 0.036446255119914665}\n",
"{'recon_loss': 0.01019430860184395, 'discriminator_loss': 0.09438135873284437, 'generator_loss': 0.0724729817949537}\n",
"{'recon_loss': 0.009774995064357033, 'discriminator_loss': 0.08929772067383865, 'generator_loss': 0.02076443441180103}\n",
"{'recon_loss': 0.00854429106380739, 'discriminator_loss': 0.09668584088282828, 'generator_loss': 0.08431510940594461}\n",
"{'recon_loss': 0.010282264603535884, 'discriminator_loss': 0.09497478165273912, 'generator_loss': 0.06390004527972767}\n",
"{'recon_loss': 0.009156483767162799, 'discriminator_loss': 0.004131828705739988, 'generator_loss': 0.11191744640251888}\n",
"{'recon_loss': 0.009886725245999529, 'discriminator_loss': 0.0014407552208240875, 'generator_loss': 0.09634970462029302}\n",
"{'recon_loss': 0.008422707872976836, 'discriminator_loss': 0.012509256047510759, 'generator_loss': 0.16438801524532817}\n",
"{'recon_loss': 0.008353986923140298, 'discriminator_loss': 0.003897644155732272, 'generator_loss': 0.10211474920170094}\n",
"{'recon_loss': 0.009168128843760602, 'discriminator_loss': 0.005460476812836144, 'generator_loss': 0.11221373772930858}\n",
"{'recon_loss': 0.00800254573035241, 'discriminator_loss': 0.002171801977864968, 'generator_loss': 0.10609281318139309}\n",
"{'recon_loss': 0.009658923469498917, 'discriminator_loss': 0.004802932341403537, 'generator_loss': 0.11007759657275511}\n",
"{'recon_loss': 0.010496271487851054, 'discriminator_loss': 0.002387693217392941, 'generator_loss': 0.013590239745098303}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 0.009298114962428317, 'discriminator_loss': 0.09853835177511712, 'generator_loss': 0.07486371800551658}\n",
"{'recon_loss': 0.00877885768776783, 'discriminator_loss': 0.08909026052868343, 'generator_loss': 0.025935816193462094}\n",
"{'recon_loss': 0.00911513013453995, 'discriminator_loss': 0.08843450173651334, 'generator_loss': 0.12281042696516975}\n",
"{'recon_loss': 0.010590040186085461, 'discriminator_loss': 0.09485858604090192, 'generator_loss': 0.0543101614432476}\n",
"{'recon_loss': 0.0076456857122637065, 'discriminator_loss': 0.08828154851453572, 'generator_loss': 0.014288883594216215}\n",
"{'recon_loss': 0.009190753133453888, 'discriminator_loss': 0.09041984850427157, 'generator_loss': 0.021489984874393294}\n",
"{'recon_loss': 0.008130919096342653, 'discriminator_loss': 0.0023870500697944865, 'generator_loss': 0.11357959148130324}\n",
"{'recon_loss': 0.009410774751932562, 'discriminator_loss': 0.004327150874787412, 'generator_loss': 0.11939799974561154}\n",
"{'recon_loss': 0.008076727023566418, 'discriminator_loss': 0.0022819393699329104, 'generator_loss': 0.09716995153572507}\n",
"{'recon_loss': 0.008082849497514328, 'discriminator_loss': 0.0025093119301284024, 'generator_loss': 0.10304189957753013}\n",
"{'recon_loss': 0.009664336613136058, 'discriminator_loss': 0.003944608457378701, 'generator_loss': 0.01828745072215411}\n",
"{'recon_loss': 0.008168140542291247, 'discriminator_loss': 0.0029578523766760237, 'generator_loss': 0.10137780434138784}\n",
"{'recon_loss': 0.009650884880906617, 'discriminator_loss': 0.006920176242821259, 'generator_loss': 0.1361977152189048}\n",
"{'recon_loss': 0.008567277516192176, 'discriminator_loss': 0.0019238836124275246, 'generator_loss': 0.10037599308221994}\n",
"{'recon_loss': 0.008933412176355059, 'discriminator_loss': 0.0028740535251096126, 'generator_loss': 0.012616958997921014}\n",
"{'recon_loss': 0.00843007222839383, 'discriminator_loss': 0.08915376763446664, 'generator_loss': 0.01736323056026837}\n",
"{'recon_loss': 0.010006552412503414, 'discriminator_loss': 0.022600482209451853, 'generator_loss': 0.025170048053714356}\n",
"{'recon_loss': 0.011183840980745697, 'discriminator_loss': 0.004235745239101054, 'generator_loss': 0.12245849627398965}\n",
"Training for 7\n",
"{'recon_loss': 0.039376377414715426, 'discriminator_loss': 0.7145646052743921, 'generator_loss': 1.1366650911431815}\n",
"{'recon_loss': 0.0398515615078162, 'discriminator_loss': 0.6201877549066016, 'generator_loss': 1.1051504477184622}\n",
"{'recon_loss': 0.03391683776819044, 'discriminator_loss': 0.5561794924676119, 'generator_loss': 1.202643623903169}\n",
"{'recon_loss': 0.037516274836953335, 'discriminator_loss': 0.5770467040526807, 'generator_loss': 1.6102382729400941}\n",
"{'recon_loss': 0.04763873304642886, 'discriminator_loss': 0.5149841229969533, 'generator_loss': 2.1249736002342186}\n",
"{'recon_loss': 0.04254391796280859, 'discriminator_loss': 0.4923505074152695, 'generator_loss': 2.1511879895799724}\n",
"{'recon_loss': 0.03880680203859006, 'discriminator_loss': 0.43452894852389046, 'generator_loss': 2.192614890822214}\n",
"{'recon_loss': 0.038428468092320714, 'discriminator_loss': 0.36926816740826746, 'generator_loss': 2.302669600625733}\n",
"{'recon_loss': 0.036297804805098845, 'discriminator_loss': 0.33462364103027326, 'generator_loss': 1.9233526021391902}\n",
"{'recon_loss': 0.03967781488206846, 'discriminator_loss': 0.3427080396356894, 'generator_loss': 2.1507180186372308}\n",
"{'recon_loss': 0.040786750054957084, 'discriminator_loss': 0.3194130110605877, 'generator_loss': 2.31755250123278}\n",
"{'recon_loss': 0.03621874355369402, 'discriminator_loss': 0.26212994559625885, 'generator_loss': 2.0970423880533957}\n",
"{'recon_loss': 0.039668655967591865, 'discriminator_loss': 0.3090951243537155, 'generator_loss': 2.2887916007832665}\n",
"{'recon_loss': 0.03293421559186498, 'discriminator_loss': 0.30998233346568055, 'generator_loss': 2.00458555246384}\n",
"{'recon_loss': 0.03856155720108215, 'discriminator_loss': 0.23366603144823606, 'generator_loss': 2.6420594091391445}\n",
"{'recon_loss': 0.035470777952116866, 'discriminator_loss': 0.2532400047060233, 'generator_loss': 2.1775460141388017}\n",
"{'recon_loss': 0.03447642675296751, 'discriminator_loss': 0.20490746472461438, 'generator_loss': 1.4996902733017297}\n",
"{'recon_loss': 0.02949163227297609, 'discriminator_loss': 0.18858020917404836, 'generator_loss': 1.1932355073378913}\n",
"{'recon_loss': 0.03273682238243932, 'discriminator_loss': 0.1901342530018795, 'generator_loss': 1.2328635908700714}\n",
"{'recon_loss': 0.02912750557209854, 'discriminator_loss': 0.16941883884857048, 'generator_loss': 1.2400785669609586}\n",
"{'recon_loss': 0.026435273677996494, 'discriminator_loss': 0.14712406451528395, 'generator_loss': 0.8917622636610539}\n",
"{'recon_loss': 0.023356806867269295, 'discriminator_loss': 0.13434376348778646, 'generator_loss': 0.8093229172816828}\n",
"{'recon_loss': 0.031287729734877805, 'discriminator_loss': 0.11886337578800348, 'generator_loss': 0.7224511163070536}\n",
"{'recon_loss': 0.02030484632974445, 'discriminator_loss': 0.0656292024279135, 'generator_loss': 0.30960416203454233}\n",
"{'recon_loss': 0.018927657214053772, 'discriminator_loss': 0.07326314473007256, 'generator_loss': 0.3964221522436669}\n",
"{'recon_loss': 0.014139071497964863, 'discriminator_loss': 0.03338257682623211, 'generator_loss': 0.22433848187430344}\n",
"{'recon_loss': 0.013262090025818907, 'discriminator_loss': 0.011666202574591597, 'generator_loss': 0.11180789136235958}\n",
"{'recon_loss': 0.01001365005592096, 'discriminator_loss': 0.015097344179822733, 'generator_loss': 0.10064131116737897}\n",
"{'recon_loss': 0.010872197158310191, 'discriminator_loss': 0.016302066107208014, 'generator_loss': 0.09339585791671902}\n",
"{'recon_loss': 0.010851453207919554, 'discriminator_loss': 0.01590875994158304, 'generator_loss': 0.07182970537233178}\n",
"{'recon_loss': 0.010348118849143493, 'discriminator_loss': 0.009761664154303164, 'generator_loss': 0.05621030829044335}\n",
"{'recon_loss': 0.009527379617080514, 'discriminator_loss': 0.007002751405638831, 'generator_loss': 0.14395749925411316}\n",
"{'recon_loss': 0.009456097151411371, 'discriminator_loss': 0.010142228747021885, 'generator_loss': 0.04440737432167079}\n",
"{'recon_loss': 0.008255088587458118, 'discriminator_loss': 0.014979715385046043, 'generator_loss': 0.08723166068772281}\n",
"{'recon_loss': 0.008541209306009597, 'discriminator_loss': 0.005250685275652231, 'generator_loss': 0.12482128755968376}\n",
"{'recon_loss': 0.007116738816661217, 'discriminator_loss': 0.010068216482273903, 'generator_loss': 0.15129376535264724}\n",
"{'recon_loss': 0.006351426418607321, 'discriminator_loss': 0.004712039224842789, 'generator_loss': 0.11455098797967951}\n",
"{'recon_loss': 0.007664777475395228, 'discriminator_loss': 0.009593536174211454, 'generator_loss': 0.0393856123634818}\n",
"{'recon_loss': 0.009420787406773186, 'discriminator_loss': 0.10126562093625292, 'generator_loss': 0.11061081007868431}\n",
"{'recon_loss': 0.005541368241980404, 'discriminator_loss': 0.004403359773465154, 'generator_loss': 0.15808664570596492}\n",
"{'recon_loss': 0.006000866147761388, 'discriminator_loss': 0.005253418681814906, 'generator_loss': 0.04525928571194667}\n",
"{'recon_loss': 0.006983623733060655, 'discriminator_loss': 0.005280898002999479, 'generator_loss': 0.13874734661096047}\n",
"{'recon_loss': 0.0092837359881797, 'discriminator_loss': 0.006218064779309841, 'generator_loss': 0.15717901197650697}\n",
"{'recon_loss': 0.00437943091702127, 'discriminator_loss': 0.004074594090525352, 'generator_loss': 0.10163440801919305}\n",
"{'recon_loss': 0.0050270464282459165, 'discriminator_loss': 0.004103370836171303, 'generator_loss': 0.1684518326919471}\n",
"{'recon_loss': 0.0069607319652442625, 'discriminator_loss': 0.0037330448764380584, 'generator_loss': 0.033033553491950265}\n",
"{'recon_loss': 0.007871378513967768, 'discriminator_loss': 0.005764817727190599, 'generator_loss': 0.129497248947767}\n",
"{'recon_loss': 0.006669374346246064, 'discriminator_loss': 0.003708339672090033, 'generator_loss': 0.11232885348897904}\n",
"{'recon_loss': 0.004433824674529959, 'discriminator_loss': 0.005454385348900757, 'generator_loss': 0.11119702088945507}\n",
"{'recon_loss': 0.0056600806056808116, 'discriminator_loss': 0.004209923882814137, 'generator_loss': 0.13114367006709562}\n",
"{'recon_loss': 0.004775726347178587, 'discriminator_loss': 0.0024848017887895346, 'generator_loss': 0.11704046659615587}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 0.005289394795223684, 'discriminator_loss': 0.004404123526984392, 'generator_loss': 0.1281465592355751}\n",
"{'recon_loss': 0.005058232648505894, 'discriminator_loss': 0.005219652884947913, 'generator_loss': 0.0817180700497014}\n",
"{'recon_loss': 0.005537693830833987, 'discriminator_loss': 0.006240605745559187, 'generator_loss': 0.14015119569577392}\n",
"{'recon_loss': 0.004436324807913501, 'discriminator_loss': 0.0028525790478523224, 'generator_loss': 0.1525871525835291}\n",
"{'recon_loss': 0.004997338622613416, 'discriminator_loss': 0.004490718897015275, 'generator_loss': 0.11840463565680463}\n",
"{'recon_loss': 0.0033740100346738907, 'discriminator_loss': 0.0027198044843901896, 'generator_loss': 0.05023893738678519}\n",
"{'recon_loss': 0.003915219242633466, 'discriminator_loss': 0.0020672056487218192, 'generator_loss': 0.1170300073433104}\n",
"{'recon_loss': 0.0037630292904921488, 'discriminator_loss': 0.005237521663684446, 'generator_loss': 0.13872348984918031}\n",
"{'recon_loss': 0.006620356204342471, 'discriminator_loss': 0.09234336830445843, 'generator_loss': 0.13770131092160476}\n",
"{'recon_loss': 0.021849359390349245, 'discriminator_loss': 0.0946467722435283, 'generator_loss': 0.17277862836792282}\n",
"{'recon_loss': 0.005525496032068998, 'discriminator_loss': 0.003172782293212499, 'generator_loss': 0.11917472750785921}\n",
"{'recon_loss': 0.003675398230859799, 'discriminator_loss': 0.0019359887730591816, 'generator_loss': 0.08631183161353641}\n",
"{'recon_loss': 0.004221966858000172, 'discriminator_loss': 0.0016496338634199369, 'generator_loss': 0.10188858490957628}\n",
"{'recon_loss': 0.0047535974498436285, 'discriminator_loss': 0.002060455227296755, 'generator_loss': 0.11444082259588623}\n",
"{'recon_loss': 0.005361197890106235, 'discriminator_loss': 0.007694695658742534, 'generator_loss': 0.040210457914621266}\n",
"{'recon_loss': 0.006746015618794093, 'discriminator_loss': 0.010439801550155928, 'generator_loss': 0.2244464177301149}\n",
"{'recon_loss': 0.004562570494321411, 'discriminator_loss': 0.0032862708673836085, 'generator_loss': 0.10063219174492395}\n",
"{'recon_loss': 0.002840177645582709, 'discriminator_loss': 0.004669209933476325, 'generator_loss': 0.13400465045523402}\n",
"{'recon_loss': 0.0037270703317577466, 'discriminator_loss': 0.09051461769689666, 'generator_loss': 0.11469591185473396}\n",
"{'recon_loss': 0.004703949769199068, 'discriminator_loss': 0.004222468564740214, 'generator_loss': 0.14417959753401619}\n",
"{'recon_loss': 0.004201726415337406, 'discriminator_loss': 0.00632577673283995, 'generator_loss': 0.12094106672091198}\n",
"{'recon_loss': 0.005336939403317484, 'discriminator_loss': 0.0033265226384950686, 'generator_loss': 0.12012331397304889}\n",
"{'recon_loss': 0.004866313723095857, 'discriminator_loss': 0.0019141493575919974, 'generator_loss': 0.19645973097774092}\n",
"{'recon_loss': 0.005022047612424641, 'discriminator_loss': 0.005633162472380788, 'generator_loss': 0.13430836724028636}\n",
"{'recon_loss': 0.006495890272944322, 'discriminator_loss': 0.0023256231942475588, 'generator_loss': 0.0302942964051129}\n",
"{'recon_loss': 0.004125830014724806, 'discriminator_loss': 0.0036125529089227554, 'generator_loss': 0.11901873696860371}\n",
"{'recon_loss': 0.0037909326771324954, 'discriminator_loss': 0.002984764290260098, 'generator_loss': 0.16052288564717115}\n",
"{'recon_loss': 0.004449535472294895, 'discriminator_loss': 0.002704517074350084, 'generator_loss': 0.03628381204598283}\n",
"{'recon_loss': 0.0025008874889173825, 'discriminator_loss': 0.001333218688626005, 'generator_loss': 0.023163177409592953}\n",
"{'recon_loss': 0.004478113878818836, 'discriminator_loss': 0.09165242063934798, 'generator_loss': 0.20563774989641667}\n",
"{'recon_loss': 0.00528865212003097, 'discriminator_loss': 0.09040250460787173, 'generator_loss': 0.22645408203585637}\n",
"{'recon_loss': 0.003959052180262841, 'discriminator_loss': 0.004396461972116062, 'generator_loss': 0.04882962346476536}\n",
"{'recon_loss': 0.005408092962389919, 'discriminator_loss': 0.0029530281368482262, 'generator_loss': 0.12504822118762027}\n",
"{'recon_loss': 0.004272935666847161, 'discriminator_loss': 0.0028924459165750134, 'generator_loss': 0.13967781963703546}\n",
"{'recon_loss': 0.00265511901284933, 'discriminator_loss': 0.005234540957584083, 'generator_loss': 0.2229281889468753}\n",
"{'recon_loss': 0.003768092026177555, 'discriminator_loss': 0.0026681273809378066, 'generator_loss': 0.10787870045598406}\n",
"{'recon_loss': 0.0029826085586559603, 'discriminator_loss': 0.002548346492176279, 'generator_loss': 0.13675745015295512}\n",
"{'recon_loss': 0.0026844413684772753, 'discriminator_loss': 0.003471184971665514, 'generator_loss': 0.2025680446401716}\n",
"{'recon_loss': 0.002324970019049833, 'discriminator_loss': 0.024557713011234057, 'generator_loss': 0.02446724408794007}\n",
"{'recon_loss': 0.003586560852558601, 'discriminator_loss': 0.0029484194059930346, 'generator_loss': 0.13745127589710074}\n",
"{'recon_loss': 0.002823728493072866, 'discriminator_loss': 0.003264258185708968, 'generator_loss': 0.12704909736041953}\n",
"{'recon_loss': 0.002863408700773508, 'discriminator_loss': 0.003394016178574829, 'generator_loss': 0.10518896707164814}\n",
"{'recon_loss': 0.0018020157763706632, 'discriminator_loss': 0.001546440416609756, 'generator_loss': 0.07234959950420317}\n",
"{'recon_loss': 0.003900907225968652, 'discriminator_loss': 0.0024428055328605787, 'generator_loss': 0.19865050776119514}\n",
"{'recon_loss': 0.002810574847113223, 'discriminator_loss': 0.001287144597361832, 'generator_loss': 0.10230554313398069}\n",
"{'recon_loss': 0.001520200862671916, 'discriminator_loss': 0.0007917024242628507, 'generator_loss': 0.0988562007678882}\n",
"{'recon_loss': 0.0033630945312406613, 'discriminator_loss': 0.0021242160610385457, 'generator_loss': 0.10005795564114381}\n",
"{'recon_loss': 0.0027894653796292045, 'discriminator_loss': 0.001962305360073948, 'generator_loss': 0.023853801581922372}\n",
"{'recon_loss': 0.002806622353542748, 'discriminator_loss': 0.004182534188789279, 'generator_loss': 0.16450770491650238}\n",
"Training for 6\n",
"{'recon_loss': 0.056097675318450634, 'discriminator_loss': 0.6941529762505287, 'generator_loss': 1.3020527632392231}\n",
"{'recon_loss': 0.046230508896742184, 'discriminator_loss': 0.6680678243014082, 'generator_loss': 1.5266445108394526}\n",
"{'recon_loss': 0.04497203851749316, 'discriminator_loss': 0.6489286553021052, 'generator_loss': 1.6039723277691023}\n",
"{'recon_loss': 0.04487764450881349, 'discriminator_loss': 0.5706617846411077, 'generator_loss': 1.9061337068452309}\n",
"{'recon_loss': 0.04757888792035867, 'discriminator_loss': 0.6786730283468811, 'generator_loss': 2.1607908292032367}\n",
"{'recon_loss': 0.050688874198304625, 'discriminator_loss': 0.4674523625167171, 'generator_loss': 1.8792211467297233}\n",
"{'recon_loss': 0.050066912254360475, 'discriminator_loss': 0.42056991242284153, 'generator_loss': 2.20772761435964}\n",
"{'recon_loss': 0.04813523876062235, 'discriminator_loss': 0.39616447110571457, 'generator_loss': 2.3519644090278664}\n",
"{'recon_loss': 0.041433921926210336, 'discriminator_loss': 0.3490269184861351, 'generator_loss': 2.4099543244395423}\n",
"{'recon_loss': 0.04597828522118057, 'discriminator_loss': 0.4402397182868354, 'generator_loss': 2.49199013494367}\n",
"{'recon_loss': 0.03954898997738812, 'discriminator_loss': 0.3422766650591663, 'generator_loss': 2.3773114914870144}\n",
"{'recon_loss': 0.04179962596858404, 'discriminator_loss': 0.3777580451238994, 'generator_loss': 2.269342600999765}\n",
"{'recon_loss': 0.052200140118081925, 'discriminator_loss': 0.38957809907707136, 'generator_loss': 2.282020377154326}\n",
"{'recon_loss': 0.03846385246657553, 'discriminator_loss': 0.24982743481894834, 'generator_loss': 1.5065698527810563}\n",
"{'recon_loss': 0.03912178909989157, 'discriminator_loss': 0.257859349808885, 'generator_loss': 1.547009489644113}\n",
"{'recon_loss': 0.03649605794847205, 'discriminator_loss': 0.20961327827491694, 'generator_loss': 1.2932559742999437}\n",
"{'recon_loss': 0.031047855240021467, 'discriminator_loss': 0.1759694529014017, 'generator_loss': 0.9585710813352211}\n",
"{'recon_loss': 0.028895138744902554, 'discriminator_loss': 0.13490991211357647, 'generator_loss': 0.9407479376649138}\n",
"{'recon_loss': 0.027117480313283766, 'discriminator_loss': 0.15536339339524058, 'generator_loss': 0.7461642569782746}\n",
"{'recon_loss': 0.025553754132753518, 'discriminator_loss': 0.2215019411702252, 'generator_loss': 0.7174675124744188}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 0.03909269564720585, 'discriminator_loss': 0.2042291437055747, 'generator_loss': 0.5761879555993343}\n",
"{'recon_loss': 0.02825133923509037, 'discriminator_loss': 0.16189905730586254, 'generator_loss': 0.4311911531878476}\n",
"{'recon_loss': 0.021280192339210188, 'discriminator_loss': 0.04727744757450518, 'generator_loss': 0.2801716972479419}\n",
"{'recon_loss': 0.019325190796616286, 'discriminator_loss': 0.02769364181084935, 'generator_loss': 0.2232553306601394}\n",
"{'recon_loss': 0.014704563881062328, 'discriminator_loss': 0.03119766965143434, 'generator_loss': 0.2690502020750363}\n",
"{'recon_loss': 0.018611696334795595, 'discriminator_loss': 0.04264307649918462, 'generator_loss': 0.34442633317418436}\n",
"{'recon_loss': 0.015525404199485228, 'discriminator_loss': 0.028615467498972823, 'generator_loss': 0.12424643724090911}\n",
"{'recon_loss': 0.017086070279334033, 'discriminator_loss': 0.014392823483397127, 'generator_loss': 0.23428154818072502}\n",
"{'recon_loss': 0.014151881645192583, 'discriminator_loss': 0.11301137803382141, 'generator_loss': 0.2116352931289798}\n",
"{'recon_loss': 0.012275167012554492, 'discriminator_loss': 0.018245206458286978, 'generator_loss': 0.20725586643945906}\n",
"{'recon_loss': 0.012470502177842525, 'discriminator_loss': 0.016755434159124227, 'generator_loss': 0.23981619154465217}\n",
"{'recon_loss': 0.013238727733039244, 'discriminator_loss': 0.018346779352643717, 'generator_loss': 0.2687928945032668}\n",
"{'recon_loss': 0.013668731969928119, 'discriminator_loss': 0.01571844794583301, 'generator_loss': 0.17746396744125797}\n",
"{'recon_loss': 0.011746827621131745, 'discriminator_loss': 0.09418199371276528, 'generator_loss': 0.07217278071673709}\n",
"{'recon_loss': 0.011247198107590502, 'discriminator_loss': 0.00907209283070014, 'generator_loss': 0.20259854159282334}\n",
"{'recon_loss': 0.009357317243740369, 'discriminator_loss': 0.008265785658240656, 'generator_loss': 0.24416977207902302}\n",
"{'recon_loss': 0.009019557140204863, 'discriminator_loss': 0.0073388051682946875, 'generator_loss': 0.23370081310248814}\n",
"{'recon_loss': 0.010554180435823799, 'discriminator_loss': 0.014303973892319891, 'generator_loss': 0.17421911916806582}\n",
"{'recon_loss': 0.011528633225954378, 'discriminator_loss': 0.09393238434851774, 'generator_loss': 0.15358687881538996}\n",
"{'recon_loss': 0.00829985944432316, 'discriminator_loss': 0.007769926115794425, 'generator_loss': 0.0507331425524148}\n",
"{'recon_loss': 0.009500496185252541, 'discriminator_loss': 0.008782264257466916, 'generator_loss': 0.23151848522153232}\n",
"{'recon_loss': 0.008854237654103503, 'discriminator_loss': 0.0038738400294118145, 'generator_loss': 0.19535815889381916}\n",
"{'recon_loss': 0.006510158524947007, 'discriminator_loss': 0.0039051988407353103, 'generator_loss': 0.11359439177362765}\n",
"{'recon_loss': 0.008071292106766654, 'discriminator_loss': 0.00382472605560612, 'generator_loss': 0.21012987681075912}\n",
"{'recon_loss': 0.006757867521559719, 'discriminator_loss': 0.007751509177731935, 'generator_loss': 0.23128176412325918}\n",
"{'recon_loss': 0.0077476682323395895, 'discriminator_loss': 0.0040066516084513734, 'generator_loss': 0.12296830832405406}\n",
"{'recon_loss': 0.0066955443249826566, 'discriminator_loss': 0.08960180940123988, 'generator_loss': 0.10531555361219025}\n",
"{'recon_loss': 0.005634374447208588, 'discriminator_loss': 0.002140225369091135, 'generator_loss': 0.10304349846979136}\n",
"{'recon_loss': 0.006020791941062353, 'discriminator_loss': 0.003592190523869162, 'generator_loss': 0.21672669536423586}\n",
"{'recon_loss': 0.006793228037867184, 'discriminator_loss': 0.0036848271442109057, 'generator_loss': 0.22514037756176436}\n",
"{'recon_loss': 0.00546777040253624, 'discriminator_loss': 0.004099408548959607, 'generator_loss': 0.20434528825862858}\n",
"{'recon_loss': 0.005478491997591982, 'discriminator_loss': 0.004954915691224191, 'generator_loss': 0.11798393777024636}\n",
"{'recon_loss': 0.0064139991234277065, 'discriminator_loss': 0.006809233435892588, 'generator_loss': 0.21084957162773899}\n",
"{'recon_loss': 0.005487108417802367, 'discriminator_loss': 0.004265274890884432, 'generator_loss': 0.1093336481745604}\n",
"{'recon_loss': 0.006144304982466735, 'discriminator_loss': 0.003831652212270387, 'generator_loss': 0.2295045920896989}\n",
"{'recon_loss': 0.005170870776832396, 'discriminator_loss': 0.09066551567665918, 'generator_loss': 0.1229121117078341}\n",
"{'recon_loss': 0.00576345754376953, 'discriminator_loss': 0.08869811356641123, 'generator_loss': 0.01813213461915041}\n",
"{'recon_loss': 0.006569557321665915, 'discriminator_loss': 0.004975766524488672, 'generator_loss': 0.11846877444912861}\n",
"{'recon_loss': 0.006215731930226117, 'discriminator_loss': 0.09317947195783594, 'generator_loss': 0.14680754335046217}\n",
"{'recon_loss': 0.008040027561754879, 'discriminator_loss': 0.09308607373504718, 'generator_loss': 0.11301395727000868}\n",
"{'recon_loss': 0.008331803983401704, 'discriminator_loss': 0.08971814250337468, 'generator_loss': 0.2052745882904015}\n",
"{'recon_loss': 0.007547904911697388, 'discriminator_loss': 0.09176773742573821, 'generator_loss': 0.051533276952074505}\n",
"{'recon_loss': 0.0069488513208990675, 'discriminator_loss': 0.08910249516215867, 'generator_loss': 0.025522106452221603}\n",
"{'recon_loss': 0.006389089913018476, 'discriminator_loss': 0.09040366249346266, 'generator_loss': 0.03229465948712049}\n",
"{'recon_loss': 0.00864962824971606, 'discriminator_loss': 0.09369223898891815, 'generator_loss': 0.15841339897057546}\n",
"{'recon_loss': 0.005298258682946094, 'discriminator_loss': 0.09017513395609505, 'generator_loss': 0.02749427804150813}\n",
"{'recon_loss': 0.005074243382172779, 'discriminator_loss': 0.09355017936738007, 'generator_loss': 0.046791083926857706}\n",
"{'recon_loss': 0.006519709261002405, 'discriminator_loss': 0.09064161147677427, 'generator_loss': 0.12346782155321526}\n",
"{'recon_loss': 0.004951000267315287, 'discriminator_loss': 0.08841907385522463, 'generator_loss': 0.101384855322122}\n",
"{'recon_loss': 0.00394875039222575, 'discriminator_loss': 0.09566816872894897, 'generator_loss': 0.018688486096473982}\n",
"{'recon_loss': 0.0053105388909082665, 'discriminator_loss': 0.08885320849862155, 'generator_loss': 0.03473932031468195}\n",
"{'recon_loss': 0.004556614157799181, 'discriminator_loss': 0.08870255048804777, 'generator_loss': 0.10433972625385883}\n",
"{'recon_loss': 0.005441640145774964, 'discriminator_loss': 0.091187730730218, 'generator_loss': 0.07378701485452707}\n",
"{'recon_loss': 0.0046012143291491265, 'discriminator_loss': 0.08833096806492721, 'generator_loss': 0.10461339618628784}\n",
"{'recon_loss': 0.009663932623194612, 'discriminator_loss': 0.004198473470114207, 'generator_loss': 0.054265750499376514}\n",
"{'recon_loss': 0.005183071627754195, 'discriminator_loss': 0.0035523483552435723, 'generator_loss': 0.13098940420682628}\n",
"{'recon_loss': 0.004475768401026353, 'discriminator_loss': 0.0032273799448289103, 'generator_loss': 0.19912385341698585}\n",
"{'recon_loss': 0.004633414990029735, 'discriminator_loss': 0.025924750734636414, 'generator_loss': 0.11017207858840766}\n",
"{'recon_loss': 0.0032893555499187567, 'discriminator_loss': 0.002115596407803359, 'generator_loss': 0.1092763633526135}\n",
"{'recon_loss': 0.00339711337698592, 'discriminator_loss': 0.0025654592816877152, 'generator_loss': 0.21328207360820636}\n",
"{'recon_loss': 0.006566509412116478, 'discriminator_loss': 0.0032530764599888566, 'generator_loss': 0.11487450639424487}\n",
"{'recon_loss': 0.003303642958116262, 'discriminator_loss': 0.0023747263683333987, 'generator_loss': 0.12767504804784138}\n",
"{'recon_loss': 0.004723423770938433, 'discriminator_loss': 0.0018614362763330165, 'generator_loss': 0.028611373747327126}\n",
"{'recon_loss': 0.0059891442399805555, 'discriminator_loss': 0.0018740341816125359, 'generator_loss': 0.11574464328643598}\n",
"{'recon_loss': 0.005953010779742801, 'discriminator_loss': 0.1748733397100619, 'generator_loss': 0.016807056232049086}\n",
"{'recon_loss': 0.005165246900306652, 'discriminator_loss': 0.042588307444300116, 'generator_loss': 0.11913020121890758}\n",
"{'recon_loss': 0.005179667189782719, 'discriminator_loss': 0.0039398637310421635, 'generator_loss': 0.12349339805031137}\n",
"{'recon_loss': 0.0041107253845663674, 'discriminator_loss': 0.00279081739579705, 'generator_loss': 0.10358268546093614}\n",
"{'recon_loss': 0.0033104032384806037, 'discriminator_loss': 0.004017359557670332, 'generator_loss': 0.11008659196811017}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 0.004207373486263151, 'discriminator_loss': 0.002883565764634214, 'generator_loss': 0.11871534721873069}\n",
"{'recon_loss': 0.003947809063309242, 'discriminator_loss': 0.0016967059620363939, 'generator_loss': 0.10407070724115666}\n",
"{'recon_loss': 0.004104450104277557, 'discriminator_loss': 0.0017244951777612625, 'generator_loss': 0.18633327480255524}\n",
"{'recon_loss': 0.005193056864738972, 'discriminator_loss': 0.0013288889778567152, 'generator_loss': 0.10066441978264817}\n",
"{'recon_loss': 0.003298825032567583, 'discriminator_loss': 0.08924558076238379, 'generator_loss': 0.20312893010920566}\n",
"{'recon_loss': 0.0037883215961607994, 'discriminator_loss': 0.002002060372296224, 'generator_loss': 0.10890602465462867}\n",
"{'recon_loss': 0.004565721578815535, 'discriminator_loss': 0.08985608139962334, 'generator_loss': 0.03579739530599784}\n",
"{'recon_loss': 0.0026109523865310335, 'discriminator_loss': 0.0029515290399011285, 'generator_loss': 0.10889313322511121}\n",
"{'recon_loss': 0.0039046067829520423, 'discriminator_loss': 0.0015562499675150266, 'generator_loss': 0.19025295358610947}\n",
"{'recon_loss': 0.0044767598922518595, 'discriminator_loss': 0.0036125810039455597, 'generator_loss': 0.11866339901428713}\n",
"{'recon_loss': 0.0033646089364152473, 'discriminator_loss': 0.001937898486437633, 'generator_loss': 0.11677472667532453}\n",
"Training for 3\n",
"{'recon_loss': 0.051500941289181645, 'discriminator_loss': 0.6338438280862779, 'generator_loss': 1.249716257929203}\n",
"{'recon_loss': 0.04260727470090154, 'discriminator_loss': 0.6566896511981236, 'generator_loss': 1.5229858501472664}\n",
"{'recon_loss': 0.044106977141459926, 'discriminator_loss': 0.6561153282472236, 'generator_loss': 1.667601295452022}\n",
"{'recon_loss': 0.04297092085793128, 'discriminator_loss': 0.6797663979793913, 'generator_loss': 1.738846867527794}\n",
"{'recon_loss': 0.04148899654661254, 'discriminator_loss': 0.513814955500502, 'generator_loss': 1.9974366821835388}\n",
"{'recon_loss': 0.0484787738085233, 'discriminator_loss': 0.5645840428582388, 'generator_loss': 2.255539991148752}\n",
"{'recon_loss': 0.0509901152135121, 'discriminator_loss': 0.5527790879184876, 'generator_loss': 2.6518366372765008}\n",
"{'recon_loss': 0.05564442289978249, 'discriminator_loss': 0.4966058214405673, 'generator_loss': 2.47865254435707}\n",
"{'recon_loss': 0.043902200549588204, 'discriminator_loss': 0.45586724949991286, 'generator_loss': 2.2316454726846975}\n",
"{'recon_loss': 0.03267836330070085, 'discriminator_loss': 0.35280622077647167, 'generator_loss': 1.8547527580405}\n",
"{'recon_loss': 0.03725907812012013, 'discriminator_loss': 0.3383848921737479, 'generator_loss': 1.5982674623853597}\n",
"{'recon_loss': 0.06218008474030312, 'discriminator_loss': 0.43780449092687673, 'generator_loss': 2.51318322114609}\n",
"{'recon_loss': 0.045952971970859034, 'discriminator_loss': 0.2825547746902135, 'generator_loss': 1.8107437728038385}\n",
"{'recon_loss': 0.0437441513985957, 'discriminator_loss': 0.26215177999069944, 'generator_loss': 1.3792038859434463}\n",
"{'recon_loss': 0.038382791852465965, 'discriminator_loss': 0.3517086486421039, 'generator_loss': 2.298157700042629}\n",
"{'recon_loss': 0.0353741898740517, 'discriminator_loss': 0.2631315536160565, 'generator_loss': 1.6659320760611913}\n",
"{'recon_loss': 0.030161966592647877, 'discriminator_loss': 0.23589088727518842, 'generator_loss': 1.220712668632143}\n",
"{'recon_loss': 0.034873264082183886, 'discriminator_loss': 0.17993520750622055, 'generator_loss': 1.1604168166467292}\n",
"{'recon_loss': 0.02948022461235793, 'discriminator_loss': 0.12670265556542418, 'generator_loss': 0.7170288381564557}\n",
"{'recon_loss': 0.033166350103006816, 'discriminator_loss': 0.1490062888730411, 'generator_loss': 0.9677866103136958}\n",
"{'recon_loss': 0.028923894134794775, 'discriminator_loss': 0.1220141403691787, 'generator_loss': 0.7038850509584998}\n",
"{'recon_loss': 0.02396260508062346, 'discriminator_loss': 0.0845206035160689, 'generator_loss': 0.45015187451312316}\n",
"{'recon_loss': 0.020054327852289285, 'discriminator_loss': 0.06653115946106875, 'generator_loss': 0.2853281348007708}\n",
"{'recon_loss': 0.02309778106841148, 'discriminator_loss': 0.07973451454536966, 'generator_loss': 0.409503262817635}\n",
"{'recon_loss': 0.0177821316993965, 'discriminator_loss': 0.03842568995170365, 'generator_loss': 0.20584570426475163}\n",
"{'recon_loss': 0.017775654499407392, 'discriminator_loss': 0.03714441622699511, 'generator_loss': 0.1852569356888308}\n",
"{'recon_loss': 0.014681111653241853, 'discriminator_loss': 0.014852943012654614, 'generator_loss': 0.15644217509280273}\n",
"{'recon_loss': 0.014419228545929441, 'discriminator_loss': 0.037221805790081886, 'generator_loss': 0.19814797261163555}\n",
"{'recon_loss': 0.013724837489156769, 'discriminator_loss': 0.025001848441193037, 'generator_loss': 0.20492106094273702}\n",
"{'recon_loss': 0.01241897363598381, 'discriminator_loss': 0.011337242899649415, 'generator_loss': 0.149938877008043}\n",
"{'recon_loss': 0.011223162471752056, 'discriminator_loss': 0.009622174069161372, 'generator_loss': 0.1471454571168734}\n",
"{'recon_loss': 0.011442072823937355, 'discriminator_loss': 0.010388446965777835, 'generator_loss': 0.13341523404277947}\n",
"{'recon_loss': 0.01045822680757218, 'discriminator_loss': 0.01485104163366852, 'generator_loss': 0.09173852084140936}\n",
"{'recon_loss': 0.010979103392240624, 'discriminator_loss': 0.007229710134007422, 'generator_loss': 0.13017921037295543}\n",
"{'recon_loss': 0.007730792272978185, 'discriminator_loss': 0.003804145997446311, 'generator_loss': 0.028730321668141143}\n",
"{'recon_loss': 0.007822651174092076, 'discriminator_loss': 0.004788771135400251, 'generator_loss': 0.11277241550359686}\n",
"{'recon_loss': 0.006986997206476063, 'discriminator_loss': 0.008267787546717946, 'generator_loss': 0.14043831165735193}\n",
"{'recon_loss': 0.008114874646771948, 'discriminator_loss': 0.007309562080341886, 'generator_loss': 0.14897831540877143}\n",
"{'recon_loss': 0.0054501939547914715, 'discriminator_loss': 0.004972161964950138, 'generator_loss': 0.03221266737737574}\n",
"{'recon_loss': 0.00622436863651924, 'discriminator_loss': 0.005913504499321378, 'generator_loss': 0.11529877749500742}\n",
"{'recon_loss': 0.005941879929812499, 'discriminator_loss': 0.018086672790132208, 'generator_loss': 0.10536715518747773}\n",
"{'recon_loss': 0.007873307927948173, 'discriminator_loss': 0.008025039725295422, 'generator_loss': 0.13251482479699003}\n",
"{'recon_loss': 0.005098759056376034, 'discriminator_loss': 0.005981252410940635, 'generator_loss': 0.02544350400189224}\n",
"{'recon_loss': 0.005892480237009958, 'discriminator_loss': 0.0066584984118040055, 'generator_loss': 0.11170575567012103}\n",
"{'recon_loss': 0.004683779770119607, 'discriminator_loss': 0.004257622076839474, 'generator_loss': 0.10101318238330878}\n",
"{'recon_loss': 0.007085772637358572, 'discriminator_loss': 0.004556357393679051, 'generator_loss': 0.11982766071454862}\n",
"{'recon_loss': 0.004345739764134827, 'discriminator_loss': 0.0025833418437524692, 'generator_loss': 0.10881904307270031}\n",
"{'recon_loss': 0.004873652807553578, 'discriminator_loss': 0.005695027475749568, 'generator_loss': 0.03517714453023767}\n",
"{'recon_loss': 0.004834000449625595, 'discriminator_loss': 0.004305650537618326, 'generator_loss': 0.02846795451326022}\n",
"{'recon_loss': 0.004433228291600016, 'discriminator_loss': 0.004308476076317509, 'generator_loss': 0.05126427904500314}\n",
"{'recon_loss': 0.0057147430638929825, 'discriminator_loss': 0.003851629947064053, 'generator_loss': 0.12512830894286123}\n",
"{'recon_loss': 0.007938923586504644, 'discriminator_loss': 0.007052363186059537, 'generator_loss': 0.1738531558354484}\n",
"{'recon_loss': 0.006582078771801115, 'discriminator_loss': 0.09408741773412242, 'generator_loss': 0.06813093389452649}\n",
"{'recon_loss': 0.010979958334890952, 'discriminator_loss': 0.00245964851025413, 'generator_loss': 0.11421362417806973}\n",
"{'recon_loss': 0.007970771739043996, 'discriminator_loss': 0.005075115133753863, 'generator_loss': 0.10892452988023046}\n",
"{'recon_loss': 0.007444612895070503, 'discriminator_loss': 0.0055419477205796465, 'generator_loss': 0.12954930760838057}\n",
"{'recon_loss': 0.007417364351321479, 'discriminator_loss': 0.0030834795821766104, 'generator_loss': 0.09387388838161279}\n",
"{'recon_loss': 0.0060497031249382, 'discriminator_loss': 0.005325992872493583, 'generator_loss': 0.052819440201176945}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 0.007828113269896731, 'discriminator_loss': 0.003871522567491886, 'generator_loss': 0.1181576017888826}\n",
"{'recon_loss': 0.005924499043737114, 'discriminator_loss': 0.0028975366253209687, 'generator_loss': 0.11300734149503293}\n",
"{'recon_loss': 0.00519030576979193, 'discriminator_loss': 0.0019328533909767438, 'generator_loss': 0.023507820551000355}\n",
"{'recon_loss': 0.005158491341573343, 'discriminator_loss': 0.0024142348641278924, 'generator_loss': 0.0979390278332772}\n",
"{'recon_loss': 0.007006184460308148, 'discriminator_loss': 0.008370575873747689, 'generator_loss': 0.13611344365081757}\n",
"{'recon_loss': 0.004883574511571151, 'discriminator_loss': 0.043357647235056695, 'generator_loss': 0.027128695318178457}\n",
"{'recon_loss': 0.006445338233057597, 'discriminator_loss': 0.0041573874954401934, 'generator_loss': 0.1199618511205926}\n",
"{'recon_loss': 0.004738654509395047, 'discriminator_loss': 0.004871380451372339, 'generator_loss': 0.1317545577601983}\n",
"{'recon_loss': 0.004582772423523824, 'discriminator_loss': 0.0017193707119154559, 'generator_loss': 0.10014490482802606}\n",
"{'recon_loss': 0.00467605064313013, 'discriminator_loss': 0.006674314750646991, 'generator_loss': 0.13010772358264996}\n",
"{'recon_loss': 0.0033671443571419704, 'discriminator_loss': 0.0045930764341373925, 'generator_loss': 0.024611184564969406}\n",
"{'recon_loss': 0.007066907319844392, 'discriminator_loss': 0.00529905019701019, 'generator_loss': 0.14414792903580337}\n",
"{'recon_loss': 0.004082031929426058, 'discriminator_loss': 0.003933852347787919, 'generator_loss': 0.11622966192595759}\n",
"{'recon_loss': 0.00474789073078647, 'discriminator_loss': 0.001570552583852895, 'generator_loss': 0.10420847172876063}\n",
"{'recon_loss': 0.004850391417406702, 'discriminator_loss': 0.0012753136050557474, 'generator_loss': 0.017499437845273507}\n",
"{'recon_loss': 0.004035381693355973, 'discriminator_loss': 0.0032938386217018266, 'generator_loss': 0.10695596382110793}\n",
"{'recon_loss': 0.005181774741674862, 'discriminator_loss': 0.002628040422504496, 'generator_loss': 0.11967701876727724}\n",
"{'recon_loss': 0.004934924428052238, 'discriminator_loss': 0.005099406193898834, 'generator_loss': 0.04047415037026452}\n",
"{'recon_loss': 0.0040338674831612315, 'discriminator_loss': 0.0030361178326680444, 'generator_loss': 0.10520962935798293}\n",
"{'recon_loss': 0.005468417863222221, 'discriminator_loss': 0.004044744661709659, 'generator_loss': 0.1163995775967629}\n",
"{'recon_loss': 0.004433895262906936, 'discriminator_loss': 0.002617567249697129, 'generator_loss': 0.10014311849419488}\n",
"{'recon_loss': 0.004541250962106452, 'discriminator_loss': 0.0026900112178503805, 'generator_loss': 0.020976968003757236}\n",
"{'recon_loss': 0.005182935755946996, 'discriminator_loss': 0.002881129953176018, 'generator_loss': 0.015295213540283091}\n",
"{'recon_loss': 0.003076805759158634, 'discriminator_loss': 0.002047323314489395, 'generator_loss': 0.10736665653596798}\n",
"{'recon_loss': 0.0052391488934804085, 'discriminator_loss': 0.003633759816488118, 'generator_loss': 0.12099985918287236}\n",
"{'recon_loss': 0.0037559571903389767, 'discriminator_loss': 0.0034193263207433476, 'generator_loss': 0.029784990154966866}\n",
"{'recon_loss': 0.003769403522614563, 'discriminator_loss': 0.00557777077813917, 'generator_loss': 0.12193649643084707}\n",
"{'recon_loss': 0.004147619117995122, 'discriminator_loss': 0.0027102699331273536, 'generator_loss': 0.11635943405145677}\n",
"{'recon_loss': 0.004526620414345023, 'discriminator_loss': 0.0018657579945425622, 'generator_loss': 0.014891469012158588}\n",
"{'recon_loss': 0.006207932419829665, 'discriminator_loss': 0.0028219782507501612, 'generator_loss': 0.019311339976039992}\n",
"{'recon_loss': 0.004970555932359975, 'discriminator_loss': 0.0028369717685633082, 'generator_loss': 0.11452186818705483}\n",
"{'recon_loss': 0.004403412392564546, 'discriminator_loss': 0.0018515970741863105, 'generator_loss': 0.09822981570555767}\n",
"{'recon_loss': 0.004243276042354616, 'discriminator_loss': 0.0031197198562762395, 'generator_loss': 0.02566356818798159}\n",
"{'recon_loss': 0.004566364201848924, 'discriminator_loss': 0.0018896746046266344, 'generator_loss': 0.10878847058093098}\n",
"{'recon_loss': 0.004240063474036216, 'discriminator_loss': 0.0012486452584335955, 'generator_loss': 0.11258901466609568}\n",
"{'recon_loss': 0.0032917905051699455, 'discriminator_loss': 0.0011135015091233629, 'generator_loss': 0.01177310526986434}\n",
"{'recon_loss': 0.004503941148235832, 'discriminator_loss': 0.0010539034105049288, 'generator_loss': 0.10629793495944087}\n",
"{'recon_loss': 0.0029474100458434893, 'discriminator_loss': 0.0012410797545150522, 'generator_loss': 0.09942339748031744}\n",
"{'recon_loss': 0.003433138367686457, 'discriminator_loss': 0.0025420399252823315, 'generator_loss': 0.10001824873652224}\n",
"{'recon_loss': 0.003596252176281493, 'discriminator_loss': 0.0030195206593747925, 'generator_loss': 0.1153352913011604}\n",
"{'recon_loss': 0.004579251006346746, 'discriminator_loss': 0.004857158777032517, 'generator_loss': 0.12279375254690693}\n",
"{'recon_loss': 0.003913274335489205, 'discriminator_loss': 0.0016547788470575998, 'generator_loss': 0.10993765195688225}\n",
"Training for 2\n",
"{'recon_loss': 0.021876056091836536, 'discriminator_loss': 0.6243068143051473, 'generator_loss': 1.5265853974088353}\n",
"{'recon_loss': 0.029130267814262017, 'discriminator_loss': 0.6199378676749953, 'generator_loss': 1.7017522960451978}\n",
"{'recon_loss': 0.022009436744920508, 'discriminator_loss': 0.5828717711882375, 'generator_loss': 2.099506219427789}\n",
"{'recon_loss': 0.028091013815190885, 'discriminator_loss': 0.53058321811446, 'generator_loss': 2.297675715618996}\n",
"{'recon_loss': 0.029036235740177847, 'discriminator_loss': 0.5078144258440439, 'generator_loss': 2.4251677169272647}\n",
"{'recon_loss': 0.02407648748507926, 'discriminator_loss': 0.3964842488642913, 'generator_loss': 2.6353967908638807}\n",
"{'recon_loss': 0.026538339919750114, 'discriminator_loss': 0.394073038862728, 'generator_loss': 3.6538598058211744}\n",
"{'recon_loss': 0.02756093101764347, 'discriminator_loss': 0.4112644969817981, 'generator_loss': 3.259317251905125}\n",
"{'recon_loss': 0.021636610286165293, 'discriminator_loss': 0.3579309591695891, 'generator_loss': 3.2538169185120855}\n",
"{'recon_loss': 0.027656213234910104, 'discriminator_loss': 0.360226843225297, 'generator_loss': 3.4277965794855625}\n",
"{'recon_loss': 0.022278006933278513, 'discriminator_loss': 0.3377011508198839, 'generator_loss': 3.2679350519899146}\n",
"{'recon_loss': 0.01799749852066436, 'discriminator_loss': 0.4065646895361905, 'generator_loss': 2.9848266851961913}\n",
"{'recon_loss': 0.015014678030830618, 'discriminator_loss': 0.306182089388071, 'generator_loss': 2.364194944875324}\n",
"{'recon_loss': 0.012974622243741614, 'discriminator_loss': 0.40949262955679966, 'generator_loss': 2.9718606639747045}\n",
"{'recon_loss': 0.014833246586767162, 'discriminator_loss': 0.4716225670891622, 'generator_loss': 3.1863366323499824}\n",
"{'recon_loss': 0.010294618074898959, 'discriminator_loss': 0.30795096991649223, 'generator_loss': 2.6619865463007635}\n",
"{'recon_loss': 0.021339543463882286, 'discriminator_loss': 0.42397872938882164, 'generator_loss': 2.9250674583205027}\n",
"{'recon_loss': 0.014853211978553436, 'discriminator_loss': 0.4777123999206265, 'generator_loss': 2.899769606302731}\n",
"{'recon_loss': 0.009817066921006309, 'discriminator_loss': 0.4372943408937011, 'generator_loss': 2.996310267616157}\n",
"{'recon_loss': 0.012648536661388609, 'discriminator_loss': 0.46046339971336286, 'generator_loss': 2.314375311286006}\n",
"{'recon_loss': 0.009058345238710828, 'discriminator_loss': 0.4089706387352105, 'generator_loss': 2.392837977888596}\n",
"{'recon_loss': 0.01364535933311323, 'discriminator_loss': 0.3788730086543452, 'generator_loss': 2.1116438990262285}\n",
"{'recon_loss': 0.007112424296271637, 'discriminator_loss': 0.36232903379017967, 'generator_loss': 1.8725054497694849}\n",
"{'recon_loss': 0.007551053169124405, 'discriminator_loss': 0.24547307718376718, 'generator_loss': 1.0630945823899465}\n",
"{'recon_loss': 0.007329576351280216, 'discriminator_loss': 0.07854016097677853, 'generator_loss': 0.2844666982977534}\n",
"{'recon_loss': 0.004493092127451355, 'discriminator_loss': 0.02170360905050865, 'generator_loss': 0.1612043514667575}\n",
"{'recon_loss': 0.005610063014413261, 'discriminator_loss': 0.025014102450471334, 'generator_loss': 0.11528563911730573}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 0.004670446166769134, 'discriminator_loss': 0.019799483630246945, 'generator_loss': 0.12830621652812907}\n",
"{'recon_loss': 0.002542303582360566, 'discriminator_loss': 0.006274022857943424, 'generator_loss': 0.1304703499808303}\n",
"{'recon_loss': 0.002828048760160191, 'discriminator_loss': 0.005555745670561686, 'generator_loss': 0.16891752200291835}\n",
"{'recon_loss': 0.004512709973395821, 'discriminator_loss': 0.006195053397300513, 'generator_loss': 0.2117114853371632}\n",
"{'recon_loss': 0.003570843823374776, 'discriminator_loss': 0.010614980439707487, 'generator_loss': 0.20068674080764912}\n",
"{'recon_loss': 0.002322218866354707, 'discriminator_loss': 0.030942859977905534, 'generator_loss': 0.1514013590870133}\n",
"{'recon_loss': 0.0019119228252728146, 'discriminator_loss': 0.0939386316266741, 'generator_loss': 0.17037486118649092}\n",
"{'recon_loss': 0.00265097978711798, 'discriminator_loss': 0.09103567133435041, 'generator_loss': 0.20818319936101817}\n",
"{'recon_loss': 0.0019130964255531602, 'discriminator_loss': 0.004440670161711385, 'generator_loss': 0.21418287513681972}\n",
"{'recon_loss': 0.0025068785915221582, 'discriminator_loss': 0.0022595619938141653, 'generator_loss': 0.108447259151518}\n",
"{'recon_loss': 0.002681631410583016, 'discriminator_loss': 0.003742437492776538, 'generator_loss': 0.15106506013289484}\n",
"{'recon_loss': 0.002751842351178063, 'discriminator_loss': 0.002996727652177227, 'generator_loss': 0.19965045018043448}\n",
"{'recon_loss': 0.0022839538603849486, 'discriminator_loss': 0.005070380413777474, 'generator_loss': 0.21501014342045838}\n",
"{'recon_loss': 0.0018865998658582936, 'discriminator_loss': 0.005311838613085788, 'generator_loss': 0.2048312303183665}\n",
"{'recon_loss': 0.001059122913774682, 'discriminator_loss': 0.003921365797667927, 'generator_loss': 0.10608208624603721}\n",
"{'recon_loss': 0.0015106644680968158, 'discriminator_loss': 0.030114952542530476, 'generator_loss': 0.17951304147854139}\n",
"{'recon_loss': 0.000514866632662673, 'discriminator_loss': 0.0016277951990182763, 'generator_loss': 0.18459590841601367}\n",
"{'recon_loss': 0.0007780996647868318, 'discriminator_loss': 0.014903262659504092, 'generator_loss': 0.10164994046428757}\n",
"{'recon_loss': 0.0017632022187115193, 'discriminator_loss': 0.0015549725202042132, 'generator_loss': 0.19524739475192116}\n",
"{'recon_loss': 0.001023090600332172, 'discriminator_loss': 0.001604991205746599, 'generator_loss': 0.18118876734245482}\n",
"{'recon_loss': 0.0007506828338237182, 'discriminator_loss': 0.0007883785558996163, 'generator_loss': 0.12164212458339405}\n",
"{'recon_loss': 0.001488762046559303, 'discriminator_loss': 0.012711627187320173, 'generator_loss': 0.11204674620540556}\n",
"{'recon_loss': 0.0008199933587929669, 'discriminator_loss': 0.0018485990913151666, 'generator_loss': 0.1888365632262812}\n",
"{'recon_loss': 0.0012960195465763537, 'discriminator_loss': 0.0021257653880186367, 'generator_loss': 0.19718413620170097}\n",
"{'recon_loss': 0.0008142784752014445, 'discriminator_loss': 0.0011814741209958074, 'generator_loss': 0.1868074309391297}\n",
"{'recon_loss': 0.001469662275639335, 'discriminator_loss': 0.0018717235963563394, 'generator_loss': 0.1835687815373431}\n",
"{'recon_loss': 0.0007584492587936427, 'discriminator_loss': 0.0015019839769151483, 'generator_loss': 0.19026402192282202}\n",
"{'recon_loss': 0.00033417420285297104, 'discriminator_loss': 0.0005983539764166431, 'generator_loss': 0.1783230254958448}\n",
"{'recon_loss': 0.000990429442368406, 'discriminator_loss': 0.08891931259905678, 'generator_loss': 0.10551245980282556}\n",
"{'recon_loss': 0.000701081709841455, 'discriminator_loss': 0.08966586047321883, 'generator_loss': 0.19402875977054918}\n",
"{'recon_loss': 0.0003491706267767434, 'discriminator_loss': 0.08745265872935237, 'generator_loss': 0.005058443910378415}\n",
"{'recon_loss': 0.0007828891980751372, 'discriminator_loss': 0.08917884308207207, 'generator_loss': 0.11120224101240146}\n",
"{'recon_loss': 0.00039507880924438476, 'discriminator_loss': 0.08803883693059533, 'generator_loss': 0.09509502340269942}\n",
"{'recon_loss': 0.001251147666829237, 'discriminator_loss': 0.08807016569590971, 'generator_loss': 0.09860324543105811}\n",
"{'recon_loss': 0.0015774579269619375, 'discriminator_loss': 0.0887526294281779, 'generator_loss': 0.18797502620806908}\n",
"{'recon_loss': 0.002205777924465781, 'discriminator_loss': 0.08876593131067886, 'generator_loss': 0.08865711488773828}\n",
"{'recon_loss': 0.00110108440817557, 'discriminator_loss': 0.002322162073051118, 'generator_loss': 0.18090792952100454}\n",
"{'recon_loss': 0.0011875012595913064, 'discriminator_loss': 0.004672855549538943, 'generator_loss': 0.12872861955544287}\n",
"{'recon_loss': 0.0007428181954494936, 'discriminator_loss': 0.00178901801815876, 'generator_loss': 0.18577300719769935}\n",
"{'recon_loss': 0.0005161594339310659, 'discriminator_loss': 0.005145947819953414, 'generator_loss': 0.20183010420020883}\n",
"{'recon_loss': 0.0009417130785871556, 'discriminator_loss': 0.000643072851797994, 'generator_loss': 0.18030795512859102}\n",
"{'recon_loss': 0.001605352333773841, 'discriminator_loss': 0.0009493849179310147, 'generator_loss': 0.18522567543655402}\n",
"{'recon_loss': 0.0015611707218594784, 'discriminator_loss': 0.0008329883473597257, 'generator_loss': 0.18122289798015315}\n",
"{'recon_loss': 0.00022095167181012852, 'discriminator_loss': 0.0013657444642682145, 'generator_loss': 0.17737373444569948}\n",
"{'recon_loss': 0.0012395473832149282, 'discriminator_loss': 0.0010356280818563843, 'generator_loss': 0.1876888020936787}\n",
"{'recon_loss': 0.0003815322145434167, 'discriminator_loss': 0.0006651619350516833, 'generator_loss': 0.0905666163141435}\n",
"{'recon_loss': 0.0004693413776904976, 'discriminator_loss': 0.0013515105980020227, 'generator_loss': 0.18642525212215316}\n",
"{'recon_loss': 0.002188380787511666, 'discriminator_loss': 0.002383945008462413, 'generator_loss': 0.20688661948270512}\n",
"{'recon_loss': 0.0006290319357860567, 'discriminator_loss': 0.08793309696656261, 'generator_loss': 0.09452626691256712}\n",
"{'recon_loss': 0.0008803369634936763, 'discriminator_loss': 0.0011840432586155676, 'generator_loss': 0.09735740603717735}\n",
"{'recon_loss': 0.0008926545939954869, 'discriminator_loss': 0.0013438940985649444, 'generator_loss': 0.18486791327774987}\n",
"{'recon_loss': 0.0009332557191322263, 'discriminator_loss': 0.0013769849277227787, 'generator_loss': 0.19046188009620052}\n",
"{'recon_loss': 0.0005341275580006094, 'discriminator_loss': 0.0006469887442680449, 'generator_loss': 0.17862680552742047}\n",
"{'recon_loss': 0.0015590638930226542, 'discriminator_loss': 0.0006279640060491633, 'generator_loss': 0.19055344640687588}\n",
"{'recon_loss': 0.0001613120339482606, 'discriminator_loss': 0.0006830668314094766, 'generator_loss': 0.1762302276021424}\n",
"{'recon_loss': 0.002285744682748503, 'discriminator_loss': 0.08920199065588551, 'generator_loss': 0.10688293508566149}\n",
"{'recon_loss': 0.0014559607664675815, 'discriminator_loss': 0.001158847443982191, 'generator_loss': 0.19177643340582143}\n",
"{'recon_loss': 0.0005285318487296915, 'discriminator_loss': 0.0018583898959972905, 'generator_loss': 0.09991571472850425}\n",
"{'recon_loss': 0.0012041470673904463, 'discriminator_loss': 0.002010319052502612, 'generator_loss': 0.18498561736329538}\n",
"{'recon_loss': 0.0012690458971757886, 'discriminator_loss': 0.002675280843398048, 'generator_loss': 0.1833860660128212}\n",
"{'recon_loss': 0.0022645608379464645, 'discriminator_loss': 0.0013564070594924403, 'generator_loss': 0.1882406552053386}\n",
"{'recon_loss': 0.000170377285158186, 'discriminator_loss': 0.0006262507753604326, 'generator_loss': 0.17785964664198345}\n",
"{'recon_loss': 2.2108383113786357e-05, 'discriminator_loss': 0.0012281886761806547, 'generator_loss': 0.17817373902499492}\n",
"{'recon_loss': 0.000313412257996116, 'discriminator_loss': 0.002335259496406032, 'generator_loss': 0.18997884820643263}\n",
"{'recon_loss': 0.000840850871536207, 'discriminator_loss': 0.0011408794059096308, 'generator_loss': 0.18228827493327027}\n",
"{'recon_loss': 0.0016589830686925084, 'discriminator_loss': 0.005738241781675149, 'generator_loss': 0.20239555495207998}\n",
"{'recon_loss': 0.00023177404571822477, 'discriminator_loss': 0.08948395063139682, 'generator_loss': 0.18287347280200644}\n",
"{'recon_loss': 0.00023499454128344123, 'discriminator_loss': 0.002203671765201492, 'generator_loss': 0.1884767031689715}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 0.0017191311112551267, 'discriminator_loss': 0.0014835849262922164, 'generator_loss': 0.19680614596930146}\n",
"{'recon_loss': 0.0007053237587652998, 'discriminator_loss': 0.0013730022459511341, 'generator_loss': 0.18767725660335885}\n",
"{'recon_loss': 0.00019747956059815638, 'discriminator_loss': 0.0014612837123109726, 'generator_loss': 0.17981966213545666}\n",
"{'recon_loss': 0.000857223916192166, 'discriminator_loss': 0.0015407254752483196, 'generator_loss': 0.17890582758673923}\n",
"{'recon_loss': 8.284117221901111e-05, 'discriminator_loss': 0.0013788407783983448, 'generator_loss': 0.1625485202524023}\n",
"Training for 0\n",
"{'recon_loss': 0.05198385491358799, 'discriminator_loss': 0.4836203328628636, 'generator_loss': 0.953072541922181}\n",
"{'recon_loss': 0.05193102768278358, 'discriminator_loss': 0.4216507642562665, 'generator_loss': 1.046742361993646}\n",
"{'recon_loss': 0.04860935194286794, 'discriminator_loss': 0.2905566323941676, 'generator_loss': 1.0349852496655143}\n",
"{'recon_loss': 0.05316116600461192, 'discriminator_loss': 0.4180496318555956, 'generator_loss': 1.2339542906488006}\n",
"{'recon_loss': 0.05057868004388096, 'discriminator_loss': 0.40704215902030166, 'generator_loss': 1.4402445099461618}\n",
"{'recon_loss': 0.05219825682927616, 'discriminator_loss': 0.2409118312649691, 'generator_loss': 1.1490597593125387}\n",
"{'recon_loss': 0.05270076340565168, 'discriminator_loss': 0.21283830707920856, 'generator_loss': 1.2324825040060072}\n",
"{'recon_loss': 0.04963071492761514, 'discriminator_loss': 0.1911681839194729, 'generator_loss': 1.1269956034931106}\n",
"{'recon_loss': 0.04966488623893328, 'discriminator_loss': 0.12250957956266163, 'generator_loss': 1.1321211987404367}\n",
"{'recon_loss': 0.04720279122641352, 'discriminator_loss': 0.1624206932653976, 'generator_loss': 1.1716633793996207}\n",
"{'recon_loss': 0.04483524374211185, 'discriminator_loss': 0.13401522230937254, 'generator_loss': 1.355814096915662}\n",
"{'recon_loss': 0.04118757311988332, 'discriminator_loss': 0.07721897686597506, 'generator_loss': 0.6864867935602988}\n",
"{'recon_loss': 0.040130968262540465, 'discriminator_loss': 0.10527578063178153, 'generator_loss': 0.9041255798621394}\n",
"{'recon_loss': 0.03384078906827966, 'discriminator_loss': 0.05301965023250548, 'generator_loss': 0.5398237412449104}\n",
"{'recon_loss': 0.03201625729301458, 'discriminator_loss': 0.04038189115686033, 'generator_loss': 0.3156762473640879}\n",
"{'recon_loss': 0.03469169094904686, 'discriminator_loss': 0.050399669688570854, 'generator_loss': 0.47662374501739013}\n",
"{'recon_loss': 0.03021837153621291, 'discriminator_loss': 0.056090325573193094, 'generator_loss': 0.47181436106862135}\n",
"{'recon_loss': 0.026811946630676806, 'discriminator_loss': 0.027293888306266854, 'generator_loss': 0.4145559908379918}\n",
"{'recon_loss': 0.025760171483779775, 'discriminator_loss': 0.037292930650309516, 'generator_loss': 0.38987608700429077}\n",
"{'recon_loss': 0.02306984444167531, 'discriminator_loss': 0.03297017938363829, 'generator_loss': 0.19350907941560622}\n",
"{'recon_loss': 0.023044581232527003, 'discriminator_loss': 0.1233768479561611, 'generator_loss': 0.2794192181677843}\n",
"{'recon_loss': 0.02316131422368711, 'discriminator_loss': 0.020638733735456275, 'generator_loss': 0.25209507884442495}\n",
"{'recon_loss': 0.026821872446862755, 'discriminator_loss': 0.052319518418173276, 'generator_loss': 0.512243671052163}\n",
"{'recon_loss': 0.019278126480654592, 'discriminator_loss': 0.023242576044324108, 'generator_loss': 0.27564283556267727}\n",
"{'recon_loss': 0.02021976743196494, 'discriminator_loss': 0.012819056071713072, 'generator_loss': 0.24318059215750418}\n",
"{'recon_loss': 0.017449828858525834, 'discriminator_loss': 0.013596388815560533, 'generator_loss': 0.1828425225330322}\n",
"{'recon_loss': 0.017121759504512772, 'discriminator_loss': 0.010192472266594015, 'generator_loss': 0.23805225143781117}\n",
"{'recon_loss': 0.016275703999443253, 'discriminator_loss': 0.009662285212827519, 'generator_loss': 0.0693779414276451}\n",
"{'recon_loss': 0.019863987008657307, 'discriminator_loss': 0.018770232607567234, 'generator_loss': 0.13291457229117465}\n",
"{'recon_loss': 0.017816014581882974, 'discriminator_loss': 0.09055140812009785, 'generator_loss': 0.13961471639207623}\n",
"{'recon_loss': 0.014966121514973719, 'discriminator_loss': 0.09082960183725997, 'generator_loss': 0.024151558307128874}\n",
"{'recon_loss': 0.016245540332379117, 'discriminator_loss': 0.09035329197353686, 'generator_loss': 0.20696964477662813}\n",
"{'recon_loss': 0.013935746319841265, 'discriminator_loss': 0.09265512489807622, 'generator_loss': 0.1520819487180784}\n",
"{'recon_loss': 0.019257262447408996, 'discriminator_loss': 0.014526019515554496, 'generator_loss': 0.1335211939041231}\n",
"{'recon_loss': 0.01604632044652127, 'discriminator_loss': 0.1021739331967064, 'generator_loss': 0.13868901173770778}\n",
"{'recon_loss': 0.01510176840826205, 'discriminator_loss': 0.00761719879381819, 'generator_loss': 0.24371439742930007}\n",
"{'recon_loss': 0.01569087814990713, 'discriminator_loss': 0.010288199910750126, 'generator_loss': 0.24802460917982458}\n",
"{'recon_loss': 0.014543959229919022, 'discriminator_loss': 0.008251114694598183, 'generator_loss': 0.17421757917515523}\n",
"{'recon_loss': 0.015244273274637496, 'discriminator_loss': 0.010728957366529412, 'generator_loss': 0.16522240124979234}\n",
"{'recon_loss': 0.012412810853803151, 'discriminator_loss': 0.015025298011105451, 'generator_loss': 0.21894148390800813}\n",
"{'recon_loss': 0.015278807366951357, 'discriminator_loss': 0.09510029715711973, 'generator_loss': 0.14029619345785976}\n",
"{'recon_loss': 0.015394580866831492, 'discriminator_loss': 0.09959143433427665, 'generator_loss': 0.15107142593124193}\n",
"{'recon_loss': 0.016021977819914247, 'discriminator_loss': 0.0913843058761772, 'generator_loss': 0.03415902896076778}\n",
"{'recon_loss': 0.014514311488504905, 'discriminator_loss': 0.09445249732093933, 'generator_loss': 0.07810421874184321}\n",
"{'recon_loss': 0.01362879217857379, 'discriminator_loss': 0.09267723288569836, 'generator_loss': 0.1433010935630278}\n",
"{'recon_loss': 0.012050610497662968, 'discriminator_loss': 0.17978588646352667, 'generator_loss': 0.06527503274952927}\n",
"{'recon_loss': 0.013010629420297449, 'discriminator_loss': 0.09566284377376803, 'generator_loss': 0.1566739105294483}\n",
"{'recon_loss': 0.01171130652951279, 'discriminator_loss': 0.09491320446111091, 'generator_loss': 0.07619341136741806}\n",
"{'recon_loss': 0.012800784684903685, 'discriminator_loss': 0.09929195870224143, 'generator_loss': 0.08178428064590905}\n",
"{'recon_loss': 0.010386384219582363, 'discriminator_loss': 0.09154310246304159, 'generator_loss': 0.13113592248580888}\n",
"{'recon_loss': 0.011961189463989745, 'discriminator_loss': 0.09485339808887504, 'generator_loss': 0.1688399563432284}\n",
"{'recon_loss': 0.010777266800518314, 'discriminator_loss': 0.09417883437884451, 'generator_loss': 0.04416462475062934}\n",
"{'recon_loss': 0.01020104805659567, 'discriminator_loss': 0.0899597065222247, 'generator_loss': 0.04260340069982026}\n",
"{'recon_loss': 0.012649113899851556, 'discriminator_loss': 0.1796194450359677, 'generator_loss': 0.09942582226486191}\n",
"{'recon_loss': 0.013826667796308579, 'discriminator_loss': 0.09036961920622587, 'generator_loss': 0.03775768889632358}\n",
"{'recon_loss': 0.010684524334241207, 'discriminator_loss': 0.17812718685027404, 'generator_loss': 0.14314514700390782}\n",
"{'recon_loss': 0.014442593292461944, 'discriminator_loss': 0.09089882215353534, 'generator_loss': 0.04579679888151299}\n",
"{'recon_loss': 0.008818741484449286, 'discriminator_loss': 0.09099651776314066, 'generator_loss': 0.11830253025221596}\n",
"{'recon_loss': 0.009199966474634598, 'discriminator_loss': 0.09149878490092278, 'generator_loss': 0.029995937811421226}\n",
"{'recon_loss': 0.00913428879107077, 'discriminator_loss': 0.0896939085806016, 'generator_loss': 0.033635284556032374}\n",
"{'recon_loss': 0.00882571472325099, 'discriminator_loss': 0.09338394443484366, 'generator_loss': 0.13773308054863231}\n",
"{'recon_loss': 0.008681958296349454, 'discriminator_loss': 0.10378410384499093, 'generator_loss': 0.032987303560971105}\n",
"{'recon_loss': 0.01524725219756353, 'discriminator_loss': 0.09111392972229637, 'generator_loss': 0.05915836657870335}\n",
"{'recon_loss': 0.011169177386752563, 'discriminator_loss': 0.0925820100451598, 'generator_loss': 0.1487554455428715}\n",
"{'recon_loss': 0.009582541240294448, 'discriminator_loss': 0.09296173278477256, 'generator_loss': 0.12029171322564712}\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'recon_loss': 0.010447631565388643, 'discriminator_loss': 0.09501782511106102, 'generator_loss': 0.14452202982973297}\n",
"{'recon_loss': 0.00790201289965818, 'discriminator_loss': 0.08998800532095977, 'generator_loss': 0.028369495308515052}\n",
"{'recon_loss': 0.007373391607710968, 'discriminator_loss': 0.09197761585969076, 'generator_loss': 0.12090849856163444}\n",
"{'recon_loss': 0.007278906418042168, 'discriminator_loss': 0.0917080765310121, 'generator_loss': 0.1243740697870258}\n",
"{'recon_loss': 0.009815526843125448, 'discriminator_loss': 0.09338933020209614, 'generator_loss': 0.14174098897728088}\n",
"{'recon_loss': 0.00816764813995851, 'discriminator_loss': 0.09012453061743017, 'generator_loss': 0.1158746257042011}\n",
"{'recon_loss': 0.0077512055088586026, 'discriminator_loss': 0.08906350634347587, 'generator_loss': 0.10231782121024713}\n",
"{'recon_loss': 0.009090287102138168, 'discriminator_loss': 0.09617966547296021, 'generator_loss': 0.14386994906875863}\n",
"{'recon_loss': 0.006634667299633223, 'discriminator_loss': 0.17804167750115887, 'generator_loss': 0.0382824833238118}\n",
"{'recon_loss': 0.008158985012616155, 'discriminator_loss': 0.09356501775384193, 'generator_loss': 0.1524542201188572}\n",
"{'recon_loss': 0.007185827327858459, 'discriminator_loss': 0.09116838724071272, 'generator_loss': 0.1271474048313581}\n",
"{'recon_loss': 0.009722301586933, 'discriminator_loss': 0.09237785483390785, 'generator_loss': 0.10708149966968668}\n",
"{'recon_loss': 0.006266235869849421, 'discriminator_loss': 0.08949124526847455, 'generator_loss': 0.11075113364707136}\n",
"{'recon_loss': 0.005675955592874372, 'discriminator_loss': 0.09008426875304472, 'generator_loss': 0.10385653038022469}\n",
"{'recon_loss': 0.006820129711192793, 'discriminator_loss': 0.09085195137055994, 'generator_loss': 0.13650939974259105}\n",
"{'recon_loss': 0.007538396992623319, 'discriminator_loss': 0.09361688383602937, 'generator_loss': 0.04567333486891471}\n",
"{'recon_loss': 0.007846240878224943, 'discriminator_loss': 0.09138911901536904, 'generator_loss': 0.043125608308044204}\n",
"{'recon_loss': 0.007791473405527073, 'discriminator_loss': 0.09051355174031085, 'generator_loss': 0.12054873116813844}\n",
"{'recon_loss': 0.006203107506881559, 'discriminator_loss': 0.09052196687766535, 'generator_loss': 0.10949244500838964}\n",
"{'recon_loss': 0.007527201720880492, 'discriminator_loss': 0.09101665024261811, 'generator_loss': 0.10906957101798462}\n",
"{'recon_loss': 0.006707536961927825, 'discriminator_loss': 0.08918855089257535, 'generator_loss': 0.11478672657690614}\n",
"{'recon_loss': 0.007579790286820185, 'discriminator_loss': 0.09176035481471276, 'generator_loss': 0.033000037368008044}\n",
"{'recon_loss': 0.005780343049900236, 'discriminator_loss': 0.08898138794541126, 'generator_loss': 0.027985339265618973}\n",
"{'recon_loss': 0.005653986940955688, 'discriminator_loss': 0.09064184454372087, 'generator_loss': 0.10498557475117697}\n",
"{'recon_loss': 0.005677105412108739, 'discriminator_loss': 0.08919182176525246, 'generator_loss': 0.020140579937642428}\n",
"{'recon_loss': 0.006099675327021571, 'discriminator_loss': 0.09034375593891374, 'generator_loss': 0.10364515760456347}\n",
"{'recon_loss': 0.006032890909546784, 'discriminator_loss': 0.08926292557409392, 'generator_loss': 0.12029859018256056}\n",
"{'recon_loss': 0.005362230570166168, 'discriminator_loss': 0.09384488538297152, 'generator_loss': 0.1675204612667466}\n",
"{'recon_loss': 0.006954226459686769, 'discriminator_loss': 0.0922818127930193, 'generator_loss': 0.1146171323464974}\n",
"{'recon_loss': 0.006715338955292801, 'discriminator_loss': 0.09129459840397172, 'generator_loss': 0.12529807263722847}\n",
"{'recon_loss': 0.00618807862978329, 'discriminator_loss': 0.08979058744987344, 'generator_loss': 0.11535721232646201}\n",
"{'recon_loss': 0.005051617185473624, 'discriminator_loss': 0.08902188210489059, 'generator_loss': 0.10081541156029422}\n",
"{'recon_loss': 0.004758227148830663, 'discriminator_loss': 0.08945728882665423, 'generator_loss': 0.09951781483624904}\n",
"{'recon_loss': 0.004851288217340294, 'discriminator_loss': 0.08763835669522209, 'generator_loss': 0.0940006812407585}\n",
"{'recon_loss': 0.005076487462978624, 'discriminator_loss': 0.08904373585777016, 'generator_loss': 0.013907485502986254}\n"
]
}
],
"source": [
"import aae\n",
"aaes = {}\n",
"\n",
"for label, data in augmented_train.items():\n",
" input, target = generate_aae_data(label, 10000)\n",
"\n",
" A = aae.AAE(enc_dim=784*4, dec_dim=784, N=1000, disc=500, epochs=1000)\n",
" print('Training for ', label)\n",
" A(input, target)\n",
" aaes[label] = A"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a834f0160>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a835f8668>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a82d53e10>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a836895c0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a83616a20>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a832d93c8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a8379c5f8>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a834866a0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a82f73860>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a834bc240>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for label in aaes.keys():\n",
" inp, tgt = generate_aae_data(label, 1)\n",
" right, wrong = np.expand_dims(inp[0], axis=0), np.expand_dims(inp[1], axis=0)\n",
"\n",
" r = aaes[label].sample([right]).squeeze().data.cpu().numpy()\n",
" w = aaes[label].sample([wrong]).squeeze().data.cpu().numpy()\n",
" plt.figure()\n",
" plt.imshow(np.concatenate([r, w], axis=1))"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"aaes = { k: v.eval() for k,v in aaes.items() }"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"T.save(aaes, 'aaes.pt')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# The Model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part - curve / elementary object"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [],
"source": [
"class Part(ccl.Primitive):\n",
" def __init__(self, data, label):\n",
" super(Part, self).__init__()\n",
" self.data = data\n",
" self.label = label\n",
" self.part_sampler = ccl.NormalNode(1)\n",
" super(Part, self).__init__(self.part_sampler)\n",
"\n",
" def sample(self, nr_samples=1, data=None):\n",
" ret = []\n",
" for n in range(nr_samples):\n",
" part = int(self.part_sampler()[0])\n",
" part = part if part >= 0 and part < len(self.data) else 0 if part < 0 else len(data)-1\n",
" part = self.data[part]\n",
" ret.append(part)\n",
" ret = ret if nr_samples > 1 else ret[0]\n",
" return ret"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {},
"outputs": [],
"source": [
"def reward_fn(penalty_multiplier=10):\n",
" def _reward_fn(parts, target, n_samples):\n",
" target_image, aae = target\n",
" \n",
" if n_samples == 1:\n",
" target_image_var = var(T.from_numpy(target_image.astype(np.float32)).cuda())\n",
" stacked = np.stack( [target_image] + parts, axis=0 ).astype(np.float32)\n",
" sample = aae.sample([stacked])\n",
" # now we can assume the target vector is composed (a sum of the primitive vectors)\n",
" blank_image_penalty = int(int(sample.sum()) > 500)\n",
" reward = -1*T.pow((sample - target_image_var), 2).mean() - penalty_multiplier * blank_image_penalty\n",
"\n",
"# display.clear_output(wait=True)\n",
"# plt.imshow(np.concatenate([target_image, sample.squeeze().data.cpu().numpy()] + parts, axis=1))\n",
"# plt.imshow(sample.squeeze().data.cpu().numpy())\n",
"# plt.show()\n",
"\n",
" return reward\n",
" return _reward_fn"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sampling exemplars"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f6a4bfeae80>"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a68540080>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"samples = []\n",
"for label, data in augmented_exemplars.items():\n",
" p = Part(data=data['augmented'], label=label)\n",
" samples.append(p.sample())\n",
"plt.imshow(np.concatenate(samples, axis=1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# CCL Training"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Train AAEPrim Model"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training for label 8 -----------------------------------------\n",
"(125_w,250)-aCMA-ES (mu_w=65.3,w_1=3%) in dimension 18 (seed=859372, Fri Mar 23 16:19:35 2018)\n",
"Best reward at iteration 0: -10.830313682556152 with nr of solutions: 0 / 250 mean reward -10.830353359222412\n",
"Best reward at iteration 10: -3.3490957403181643e-12 with nr of solutions: 178 / 250 mean reward -3.063496535687086\n",
"Best reward at iteration 20: -5.5234588604291535e-12 with nr of solutions: 240 / 250 mean reward -0.4296060802654041\n",
"Best reward at iteration 30: -5.5562958747867874e-12 with nr of solutions: 244 / 250 mean reward -0.21745299870136636\n",
"Best reward at iteration 40: -8.4093444013833e-12 with nr of solutions: 245 / 250 mean reward -0.17372230787603077\n",
"Best reward at iteration 50: -1.6192751349855539e-12 with nr of solutions: 248 / 250 mean reward -0.043338843464677757\n",
"Best reward at iteration 60: -1.6192751349855539e-12 with nr of solutions: 236 / 250 mean reward -1.6287423744810406e-07\n",
"Best reward at iteration 70: -7.792684900143065e-12 with nr of solutions: 249 / 250 mean reward -0.04110626113918937\n",
"Best reward at iteration 80: -3.426500619699291e-12 with nr of solutions: 226 / 250 mean reward -1.0222439217108612e-07\n",
"Best reward at iteration 90: -2.9862160921129144e-12 with nr of solutions: 207 / 250 mean reward -3.927601385268764e-08\n",
"Best reward at iteration 100: -3.173613932413999e-12 with nr of solutions: 249 / 250 mean reward -0.04332093784559734\n",
"Best reward at iteration 110: -7.792684900143065e-12 with nr of solutions: 249 / 250 mean reward -0.04332144308541339\n",
"Best reward at iteration 120: -7.792684900143065e-12 with nr of solutions: 227 / 250 mean reward -8.754999471997927e-08\n",
"Best reward at iteration 130: -3.2986760024888984e-12 with nr of solutions: 210 / 250 mean reward -3.924424888000419e-08\n",
"Best reward at iteration 140: -2.9862160921129144e-12 with nr of solutions: 198 / 250 mean reward -3.170213698805348e-08\n",
"Best reward at iteration 150: -3.426500619699291e-12 with nr of solutions: 129 / 250 mean reward -4.761689140149287e-09\n",
"Best reward at iteration 160: -3.0711991109988457e-12 with nr of solutions: 247 / 250 mean reward -0.12979961069581786\n",
"Best reward at iteration 170: -3.426500619699291e-12 with nr of solutions: 187 / 250 mean reward -2.0778659365149227e-08\n",
"Best reward at iteration 180: -3.173613932413999e-12 with nr of solutions: 249 / 250 mean reward -0.04291861504816721\n",
"Best reward at iteration 190: -3.2986760024888984e-12 with nr of solutions: 249 / 250 mean reward -0.04327361893481165\n",
"Taking 1 with rewards [47396]\n",
"Training for label 5 -----------------------------------------\n",
"(125_w,250)-aCMA-ES (mu_w=65.3,w_1=3%) in dimension 18 (seed=858922, Fri Mar 23 16:21:12 2018)\n",
"Best reward at iteration 0: -0.0012985997600480914 with nr of solutions: 3 / 250 mean reward -10.690905092287343\n",
"Best reward at iteration 10: -9.651105435659613e-12 with nr of solutions: 11 / 250 mean reward -10.343627642563842\n",
"Best reward at iteration 20: -9.893382874238405e-18 with nr of solutions: 26 / 250 mean reward -9.696136138919003\n",
"Best reward at iteration 30: -1.5155162461366205e-16 with nr of solutions: 31 / 250 mean reward -9.480028924277393\n",
"Best reward at iteration 40: -1.1243849522821054e-18 with nr of solutions: 62 / 250 mean reward -8.137786783131205\n",
"Best reward at iteration 50: -1.1243849522821054e-18 with nr of solutions: 82 / 250 mean reward -7.272655455857915\n",
"Best reward at iteration 60: -2.2931400794167084e-19 with nr of solutions: 123 / 250 mean reward -5.498455888048398\n",
"Best reward at iteration 70: -2.2931400794167084e-19 with nr of solutions: 127 / 250 mean reward -5.324911027087343\n",
"Best reward at iteration 80: -2.2931400794167084e-19 with nr of solutions: 138 / 250 mean reward -4.849298999711545\n",
"Best reward at iteration 90: -2.2931400794167084e-19 with nr of solutions: 168 / 250 mean reward -3.5502380889948646\n",
"Best reward at iteration 100: -2.2931400794167084e-19 with nr of solutions: 171 / 250 mean reward -3.4137750784170953\n",
"Best reward at iteration 110: -2.2931400794167084e-19 with nr of solutions: 189 / 250 mean reward -2.640540068178415\n",
"Best reward at iteration 120: -2.2931400794167084e-19 with nr of solutions: 201 / 250 mean reward -2.119290700170266\n",
"Best reward at iteration 130: -2.2931400794167084e-19 with nr of solutions: 211 / 250 mean reward -1.6850065307174908\n",
"Best reward at iteration 140: -2.2931400794167084e-19 with nr of solutions: 223 / 250 mean reward -1.167514247984909\n",
"Best reward at iteration 150: -2.2931400794167084e-19 with nr of solutions: 223 / 250 mean reward -1.167260446185971\n",
"Best reward at iteration 160: -2.2931400794167084e-19 with nr of solutions: 230 / 250 mean reward -0.8226569474543799\n",
"Best reward at iteration 170: -2.2931400794167084e-19 with nr of solutions: 228 / 250 mean reward -0.9522766896726591\n",
"Best reward at iteration 180: -2.2931400794167084e-19 with nr of solutions: 222 / 250 mean reward -1.2103092472993207\n",
"Best reward at iteration 190: -2.2931400794167084e-19 with nr of solutions: 233 / 250 mean reward -0.7331834455614455\n",
"Taking 1 with rewards [30114]\n",
"Training for label 4 -----------------------------------------\n",
"(125_w,250)-aCMA-ES (mu_w=65.3,w_1=3%) in dimension 18 (seed=951750, Fri Mar 23 16:22:48 2018)\n",
"Best reward at iteration 0: -2.4334477677698537e-26 with nr of solutions: 21 / 250 mean reward -9.97864450263991\n",
"Best reward at iteration 10: -2.4334477677698537e-26 with nr of solutions: 81 / 250 mean reward -7.370492620292272\n",
"Best reward at iteration 20: -2.4334477677698537e-26 with nr of solutions: 61 / 250 mean reward -8.243349910497837\n",
"Best reward at iteration 30: -2.4334477677698537e-26 with nr of solutions: 76 / 250 mean reward -7.587273887642334\n",
"Best reward at iteration 40: -2.4334477677698537e-26 with nr of solutions: 90 / 250 mean reward -6.978830441959004\n",
"Best reward at iteration 50: -2.4334477677698537e-26 with nr of solutions: 104 / 250 mean reward -6.369520848320364\n",
"Best reward at iteration 60: -3.787881218245657e-28 with nr of solutions: 110 / 250 mean reward -6.107279191824634\n",
"Best reward at iteration 70: -3.787881218245657e-28 with nr of solutions: 126 / 250 mean reward -5.404988158464952\n",
"Best reward at iteration 80: -2.4334477677698537e-26 with nr of solutions: 149 / 250 mean reward -4.40482953143158\n",
"Best reward at iteration 90: -1.7201650937616726e-29 with nr of solutions: 168 / 250 mean reward -3.572064439726198\n",
"Best reward at iteration 100: -3.787881218245657e-28 with nr of solutions: 162 / 250 mean reward -3.836805921268094\n",
"Best reward at iteration 110: -1.6304536436027147e-33 with nr of solutions: 183 / 250 mean reward -2.920114127110163\n",
"Best reward at iteration 120: -1.2148258775220228e-32 with nr of solutions: 202 / 250 mean reward -2.048515750422458\n",
"Best reward at iteration 130: -1.2148258775220228e-32 with nr of solutions: 191 / 250 mean reward -2.4838642252965735\n",
"Best reward at iteration 140: -9.4438078245868e-36 with nr of solutions: 213 / 250 mean reward -1.610273056989061\n",
"Best reward at iteration 150: -4.694283310626663e-36 with nr of solutions: 224 / 250 mean reward -1.0897070553181119\n",
"Best reward at iteration 160: -3.036382120740144e-36 with nr of solutions: 234 / 250 mean reward -0.6530917084502816\n",
"Best reward at iteration 170: -3.036382120740144e-36 with nr of solutions: 235 / 250 mean reward -0.6535169604691965\n",
"Best reward at iteration 180: -1.6082001825823763e-40 with nr of solutions: 233 / 250 mean reward -0.6972055310496046\n",
"Best reward at iteration 190: -1.3070569387035801e-39 with nr of solutions: 219 / 250 mean reward -1.3030802685570944\n",
"Taking 1 with rewards [31911]\n",
"Training for label 9 -----------------------------------------\n",
"(125_w,250)-aCMA-ES (mu_w=65.3,w_1=3%) in dimension 18 (seed=846761, Fri Mar 23 16:24:25 2018)\n",
"Best reward at iteration 0: -10.903060913085938 with nr of solutions: 0 / 250 mean reward -10.903060913085938\n",
"Best reward at iteration 10: -4.678437637295474e-10 with nr of solutions: 2 / 250 mean reward -10.815795246134806\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best reward at iteration 20: -8.567433327483661e-22 with nr of solutions: 40 / 250 mean reward -9.144329114527634\n",
"Best reward at iteration 30: -8.567433327483661e-22 with nr of solutions: 59 / 250 mean reward -8.312731335206376\n",
"Best reward at iteration 40: -8.567433327483661e-22 with nr of solutions: 84 / 250 mean reward -7.221990925459319\n",
"Best reward at iteration 50: -8.567433327483661e-22 with nr of solutions: 87 / 250 mean reward -7.102364701967316\n",
"Best reward at iteration 60: -8.567433327483661e-22 with nr of solutions: 122 / 250 mean reward -5.576967231055934\n",
"Best reward at iteration 70: -8.567433327483661e-22 with nr of solutions: 109 / 250 mean reward -6.139952115977199\n",
"Best reward at iteration 80: -8.567433327483661e-22 with nr of solutions: 127 / 250 mean reward -5.359317467612413\n",
"Best reward at iteration 90: -8.567433327483661e-22 with nr of solutions: 150 / 250 mean reward -4.355461871333782\n",
"Best reward at iteration 100: -8.567433327483661e-22 with nr of solutions: 145 / 250 mean reward -4.57489139803562\n",
"Best reward at iteration 110: -8.567433327483661e-22 with nr of solutions: 175 / 250 mean reward -3.266762968804626\n",
"Best reward at iteration 120: -8.567433327483661e-22 with nr of solutions: 188 / 250 mean reward -2.702788792999554\n",
"Best reward at iteration 130: -8.567433327483661e-22 with nr of solutions: 209 / 250 mean reward -1.7844823252559086\n",
"Best reward at iteration 140: -8.567433327483661e-22 with nr of solutions: 224 / 250 mean reward -1.0477516741997\n",
"Best reward at iteration 150: -8.567433327483661e-22 with nr of solutions: 235 / 250 mean reward -0.6111554582510071\n",
"Best reward at iteration 160: -8.567433327483661e-22 with nr of solutions: 240 / 250 mean reward -0.4339354482948435\n",
"Best reward at iteration 170: -8.567433327483661e-22 with nr of solutions: 240 / 250 mean reward -0.43569627601241345\n",
"Best reward at iteration 180: -8.567433327483661e-22 with nr of solutions: 241 / 250 mean reward -0.39215881602183217\n",
"Best reward at iteration 190: -8.567433327483661e-22 with nr of solutions: 243 / 250 mean reward -0.305248073301033\n",
"Taking 1 with rewards [29785]\n",
"Training for label 1 -----------------------------------------\n",
"(125_w,250)-aCMA-ES (mu_w=65.3,w_1=3%) in dimension 18 (seed=861807, Fri Mar 23 16:26:03 2018)\n",
"Best reward at iteration 0: -10.930864334106445 with nr of solutions: 0 / 250 mean reward -10.933577728271484\n",
"Best reward at iteration 10: -3.783232023124583e-05 with nr of solutions: 7 / 250 mean reward -10.624416545751709\n",
"Best reward at iteration 20: -3.783232023124583e-05 with nr of solutions: 145 / 250 mean reward -4.577917801168486\n",
"Best reward at iteration 30: -3.934488177037565e-06 with nr of solutions: 205 / 250 mean reward -1.91610079135667\n",
"Best reward at iteration 40: -3.934488177037565e-06 with nr of solutions: 181 / 250 mean reward -2.9953111546766724\n",
"Best reward at iteration 50: -3.783232023124583e-05 with nr of solutions: 152 / 250 mean reward -4.251626474543198\n",
"Best reward at iteration 60: -3.783232023124583e-05 with nr of solutions: 176 / 250 mean reward -3.221081641751007\n",
"Best reward at iteration 70: -3.783232023124583e-05 with nr of solutions: 176 / 250 mean reward -3.2094428941186925\n",
"Best reward at iteration 80: -3.783232023124583e-05 with nr of solutions: 181 / 250 mean reward -3.0098866916997067\n",
"Best reward at iteration 90: -3.783232023124583e-05 with nr of solutions: 195 / 250 mean reward -2.396396192408443\n",
"Best reward at iteration 100: -3.783232023124583e-05 with nr of solutions: 195 / 250 mean reward -2.400219927688944\n",
"Best reward at iteration 110: -3.783232023124583e-05 with nr of solutions: 201 / 250 mean reward -2.137045131310515\n",
"Best reward at iteration 120: -3.783232023124583e-05 with nr of solutions: 200 / 250 mean reward -2.182809863414761\n",
"Best reward at iteration 130: -3.783232023124583e-05 with nr of solutions: 211 / 250 mean reward -1.7053017255361047\n",
"Best reward at iteration 140: -3.783232023124583e-05 with nr of solutions: 232 / 250 mean reward -0.787329796485763\n",
"Best reward at iteration 150: -3.783232023124583e-05 with nr of solutions: 229 / 250 mean reward -0.9185029463610263\n",
"Best reward at iteration 160: -3.783232023124583e-05 with nr of solutions: 229 / 250 mean reward -0.918510910119061\n",
"Best reward at iteration 170: -3.783232023124583e-05 with nr of solutions: 235 / 250 mean reward -0.6558425075514243\n",
"Best reward at iteration 180: -3.783232023124583e-05 with nr of solutions: 236 / 250 mean reward -0.612329767339048\n",
"Best reward at iteration 190: -2.6218778657494113e-05 with nr of solutions: 245 / 250 mean reward -0.17502895536609867\n",
"Taking 1 with rewards [37390]\n",
"Training for label 7 -----------------------------------------\n",
"(125_w,250)-aCMA-ES (mu_w=65.3,w_1=3%) in dimension 18 (seed=895607, Fri Mar 23 16:27:41 2018)\n",
"Best reward at iteration 0: -10.835180282592773 with nr of solutions: 0 / 250 mean reward -10.835448188781738\n",
"Best reward at iteration 10: -1.2944316267748945e-06 with nr of solutions: 2 / 250 mean reward -10.748597793367185\n",
"Best reward at iteration 20: -5.379894862933554e-10 with nr of solutions: 29 / 250 mean reward -9.579423168138607\n",
"Best reward at iteration 30: -5.657182722274001e-09 with nr of solutions: 35 / 250 mean reward -9.31794889331002\n",
"Best reward at iteration 40: -5.657182722274001e-09 with nr of solutions: 48 / 250 mean reward -8.755460159969916\n",
"Best reward at iteration 50: -2.669045651160218e-09 with nr of solutions: 51 / 250 mean reward -8.624325806115664\n",
"Best reward at iteration 60: -1.7690992004659734e-09 with nr of solutions: 92 / 250 mean reward -6.850394085746339\n",
"Best reward at iteration 70: -1.7690992004659734e-09 with nr of solutions: 78 / 250 mean reward -7.454937403826051\n",
"Best reward at iteration 80: -1.7690992004659734e-09 with nr of solutions: 103 / 250 mean reward -6.371917439475708\n",
"Best reward at iteration 90: -1.7690992004659734e-09 with nr of solutions: 128 / 250 mean reward -5.288049062005053\n",
"Best reward at iteration 100: -1.7690992004659734e-09 with nr of solutions: 167 / 250 mean reward -3.597160009256283\n",
"Best reward at iteration 110: -1.7690992004659734e-09 with nr of solutions: 185 / 250 mean reward -2.8171635070004086\n",
"Best reward at iteration 120: -1.7690992004659734e-09 with nr of solutions: 188 / 250 mean reward -2.6871366314081184\n",
"Best reward at iteration 130: -1.7690992004659734e-09 with nr of solutions: 214 / 250 mean reward -1.5598805386745391\n",
"Best reward at iteration 140: -1.7690992004659734e-09 with nr of solutions: 224 / 250 mean reward -1.1268577950599379\n",
"Best reward at iteration 150: -9.117470916051414e-18 with nr of solutions: 231 / 250 mean reward -0.8234911343368196\n",
"Best reward at iteration 160: -2.9890258398629847e-23 with nr of solutions: 225 / 250 mean reward -1.083535344244684\n",
"Best reward at iteration 170: -2.9890258398629847e-23 with nr of solutions: 223 / 250 mean reward -1.1700733875824318\n",
"Best reward at iteration 180: -9.117470916051414e-18 with nr of solutions: 224 / 250 mean reward -1.126764168844646\n",
"Best reward at iteration 190: -4.1627773450514383e-10 with nr of solutions: 233 / 250 mean reward -0.694418082151715\n",
"Taking 1 with rewards [27608]\n",
"Training for label 6 -----------------------------------------\n",
"(125_w,250)-aCMA-ES (mu_w=65.3,w_1=3%) in dimension 18 (seed=936036, Fri Mar 23 16:29:19 2018)\n",
"Best reward at iteration 0: -10.849623680114746 with nr of solutions: 0 / 250 mean reward -10.875914916992187\n",
"Best reward at iteration 10: -2.324559815469751e-12 with nr of solutions: 34 / 250 mean reward -9.294707543921056\n",
"Best reward at iteration 20: -1.7388109062556766e-17 with nr of solutions: 74 / 250 mean reward -7.619176281952883\n",
"Best reward at iteration 30: -1.7388109062556766e-17 with nr of solutions: 98 / 250 mean reward -6.574829478025686\n",
"Best reward at iteration 40: -1.7388109062556766e-17 with nr of solutions: 130 / 250 mean reward -5.186653998836762\n",
"Best reward at iteration 50: -2.1353887212227104e-16 with nr of solutions: 121 / 250 mean reward -5.574271173189057\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best reward at iteration 60: -2.1353887212227104e-16 with nr of solutions: 123 / 250 mean reward -5.506563197406457\n",
"Best reward at iteration 70: -1.7388109062556766e-17 with nr of solutions: 137 / 250 mean reward -4.899386032521789\n",
"Best reward at iteration 80: -1.7388109062556766e-17 with nr of solutions: 122 / 250 mean reward -5.5447948866633565\n",
"Best reward at iteration 90: -1.715105039518431e-20 with nr of solutions: 128 / 250 mean reward -5.295210982885848\n",
"Best reward at iteration 100: -7.950965384140832e-20 with nr of solutions: 122 / 250 mean reward -5.550468416963572\n",
"Best reward at iteration 110: -1.0663810104745113e-21 with nr of solutions: 121 / 250 mean reward -5.60969423769738\n",
"Best reward at iteration 120: -2.275784699254352e-22 with nr of solutions: 127 / 250 mean reward -5.341333891916096\n",
"Best reward at iteration 130: -2.9935149380411226e-21 with nr of solutions: 131 / 250 mean reward -5.169513085856746\n",
"Best reward at iteration 140: -2.275784699254352e-22 with nr of solutions: 145 / 250 mean reward -4.562662341072959\n",
"Best reward at iteration 150: -2.275784699254352e-22 with nr of solutions: 159 / 250 mean reward -3.956325886531354\n",
"Best reward at iteration 160: -1.0663810104745113e-21 with nr of solutions: 168 / 250 mean reward -3.480748273365348\n",
"Best reward at iteration 170: -2.275784699254352e-22 with nr of solutions: 179 / 250 mean reward -2.9973912846810817\n",
"Best reward at iteration 180: -1.0663810104745113e-21 with nr of solutions: 209 / 250 mean reward -1.6935271783271195\n",
"Best reward at iteration 190: -1.0663810104745113e-21 with nr of solutions: 210 / 250 mean reward -1.3973222995849817\n",
"Taking 1 with rewards [26416]\n",
"Training for label 3 -----------------------------------------\n",
"(125_w,250)-aCMA-ES (mu_w=65.3,w_1=3%) in dimension 18 (seed=876218, Fri Mar 23 16:30:57 2018)\n",
"Best reward at iteration 0: -10.862244606018066 with nr of solutions: 0 / 250 mean reward -10.862244606018066\n",
"Best reward at iteration 10: -10.722893714904785 with nr of solutions: 0 / 250 mean reward -10.861489234924317\n",
"Best reward at iteration 20: -2.6430140565025795e-07 with nr of solutions: 10 / 250 mean reward -10.42062556753152\n",
"Best reward at iteration 30: -8.513492502970621e-06 with nr of solutions: 28 / 250 mean reward -9.634508307893364\n",
"Best reward at iteration 40: -2.6430140565025795e-07 with nr of solutions: 70 / 250 mean reward -7.806844346638844\n",
"Best reward at iteration 50: -1.4169249880069401e-06 with nr of solutions: 112 / 250 mean reward -5.98056795361587\n",
"Best reward at iteration 60: -1.4169249880069401e-06 with nr of solutions: 118 / 250 mean reward -5.7299989032476955\n",
"Best reward at iteration 70: -1.4169249880069401e-06 with nr of solutions: 130 / 250 mean reward -5.209427876808022\n",
"Best reward at iteration 80: -1.3317426805770083e-07 with nr of solutions: 110 / 250 mean reward -6.08024198636384\n",
"Best reward at iteration 90: -1.4169249880069401e-06 with nr of solutions: 110 / 250 mean reward -6.081455445577126\n",
"Best reward at iteration 100: -1.4169249880069401e-06 with nr of solutions: 98 / 250 mean reward -6.604072707634454\n",
"Best reward at iteration 110: -1.4169249880069401e-06 with nr of solutions: 110 / 250 mean reward -6.082580512972036\n",
"Best reward at iteration 120: -1.4169249880069401e-06 with nr of solutions: 147 / 250 mean reward -4.475152592979113\n",
"Best reward at iteration 130: -1.4169249880069401e-06 with nr of solutions: 176 / 250 mean reward -3.2152040730743066\n",
"Best reward at iteration 140: -1.4169249880069401e-06 with nr of solutions: 182 / 250 mean reward -2.9544879074299826\n",
"Best reward at iteration 150: -1.4169249880069401e-06 with nr of solutions: 206 / 250 mean reward -1.9117401523838762\n",
"Best reward at iteration 160: -1.4169249880069401e-06 with nr of solutions: 227 / 250 mean reward -0.9993104180439859\n",
"Best reward at iteration 170: -1.4169249880069401e-06 with nr of solutions: 239 / 250 mean reward -0.4779386327773427\n",
"Best reward at iteration 180: -1.4169249880069401e-06 with nr of solutions: 242 / 250 mean reward -0.3475950239335216\n",
"Best reward at iteration 190: -1.4169249880069401e-06 with nr of solutions: 234 / 250 mean reward -0.6951840896232552\n",
"Taking 1 with rewards [26266]\n",
"Training for label 2 -----------------------------------------\n",
"(125_w,250)-aCMA-ES (mu_w=65.3,w_1=3%) in dimension 18 (seed=924115, Fri Mar 23 16:32:34 2018)\n",
"Best reward at iteration 0: -10.818464279174805 with nr of solutions: 0 / 250 mean reward -10.821398880004883\n",
"Best reward at iteration 10: -4.581691420707393e-15 with nr of solutions: 11 / 250 mean reward -10.323959008365636\n",
"Best reward at iteration 20: -1.3762617434576185e-10 with nr of solutions: 35 / 250 mean reward -9.241664526258043\n",
"Best reward at iteration 30: -1.3762617434576185e-10 with nr of solutions: 45 / 250 mean reward -8.817936596382824\n",
"Best reward at iteration 40: -1.3762617434576185e-10 with nr of solutions: 51 / 250 mean reward -8.546609393498573\n",
"Best reward at iteration 50: -1.3762617434576185e-10 with nr of solutions: 67 / 250 mean reward -7.843050972537018\n",
"Best reward at iteration 60: -1.3762617434576185e-10 with nr of solutions: 85 / 250 mean reward -7.098893751506057\n",
"Best reward at iteration 70: -1.2031249477587047e-12 with nr of solutions: 106 / 250 mean reward -6.2128720521331875\n",
"Best reward at iteration 80: -1.3762617434576185e-10 with nr of solutions: 139 / 250 mean reward -4.796028333279308\n",
"Best reward at iteration 90: -1.3762617434576185e-10 with nr of solutions: 153 / 250 mean reward -4.1961987344330645\n",
"Best reward at iteration 100: -1.3762617434576185e-10 with nr of solutions: 200 / 250 mean reward -2.164343629057097\n",
"Best reward at iteration 110: -1.3762617434576185e-10 with nr of solutions: 206 / 250 mean reward -1.9041871361995546\n",
"Best reward at iteration 120: -1.3762617434576185e-10 with nr of solutions: 224 / 250 mean reward -1.1261788781642474\n",
"Best reward at iteration 130: -1.3762617434576185e-10 with nr of solutions: 229 / 250 mean reward -0.9098112532850826\n",
"Best reward at iteration 140: -1.3762617434576185e-10 with nr of solutions: 224 / 250 mean reward -1.1256579156607862\n",
"Best reward at iteration 150: -1.3762617434576185e-10 with nr of solutions: 233 / 250 mean reward -0.7354650361748225\n",
"Best reward at iteration 160: -1.3762617434576185e-10 with nr of solutions: 244 / 250 mean reward -0.17272030385048615\n",
"Best reward at iteration 170: -1.3762617434576185e-10 with nr of solutions: 243 / 250 mean reward -0.30344964355150544\n",
"Best reward at iteration 180: -1.3762617434576185e-10 with nr of solutions: 237 / 250 mean reward -0.5625246705779876\n",
"Best reward at iteration 190: -1.3762617434576185e-10 with nr of solutions: 237 / 250 mean reward -0.5624415452711843\n",
"Taking 1 with rewards [30988]\n",
"Training for label 0 -----------------------------------------\n",
"(125_w,250)-aCMA-ES (mu_w=65.3,w_1=3%) in dimension 18 (seed=896140, Fri Mar 23 16:34:11 2018)\n",
"Best reward at iteration 0: -10.841832160949707 with nr of solutions: 0 / 250 mean reward -10.841836910247803\n",
"Best reward at iteration 10: -10.84179973602295 with nr of solutions: 0 / 250 mean reward -10.841836177825927\n",
"Best reward at iteration 20: -10.841577529907227 with nr of solutions: 0 / 250 mean reward -10.841830871582031\n",
"Best reward at iteration 30: -5.570849228968278e-13 with nr of solutions: 174 / 250 mean reward -3.292035216222846\n",
"Best reward at iteration 40: -5.570849228968278e-13 with nr of solutions: 234 / 250 mean reward -0.30509643400466174\n",
"Best reward at iteration 50: -5.570849228968278e-13 with nr of solutions: 233 / 250 mean reward -0.04482912173359773\n",
"Best reward at iteration 60: -5.570849228968278e-13 with nr of solutions: 234 / 250 mean reward -0.044737768185862094\n",
"Best reward at iteration 70: -5.570849228968278e-13 with nr of solutions: 235 / 250 mean reward -0.0013696096739484228\n",
"Best reward at iteration 80: -5.570849228968278e-13 with nr of solutions: 213 / 250 mean reward -0.0033772460085631233\n",
"Best reward at iteration 90: -5.570849228968278e-13 with nr of solutions: 198 / 250 mean reward -0.22109153193667708\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best reward at iteration 100: -5.570849228968278e-13 with nr of solutions: 188 / 250 mean reward -0.04893527019773158\n",
"Best reward at iteration 110: -5.570849228968278e-13 with nr of solutions: 199 / 250 mean reward -0.04793097430619392\n",
"Best reward at iteration 120: -5.570849228968278e-13 with nr of solutions: 192 / 250 mean reward -0.13512221379275371\n",
"Best reward at iteration 130: -5.570849228968278e-13 with nr of solutions: 195 / 250 mean reward -0.3512286239204575\n",
"Best reward at iteration 140: -5.570849228968278e-13 with nr of solutions: 191 / 250 mean reward -0.3495238543580513\n",
"Best reward at iteration 150: -5.570849228968278e-13 with nr of solutions: 215 / 250 mean reward -0.0031946615966571734\n",
"Best reward at iteration 160: -5.570849228968278e-13 with nr of solutions: 224 / 250 mean reward -0.0889253121879542\n",
"Best reward at iteration 170: -5.570849228968278e-13 with nr of solutions: 236 / 250 mean reward -0.0012778642360970873\n",
"Best reward at iteration 180: -5.570849228968278e-13 with nr of solutions: 237 / 250 mean reward -0.17425153409356675\n",
"Best reward at iteration 190: -5.570849228968278e-13 with nr of solutions: 238 / 250 mean reward -0.04437138390972288\n",
"Taking 1 with rewards [42109]\n"
]
}
],
"source": [
"progs = {}\n",
"\n",
"primitives = []\n",
"\n",
"for label, data in augmented_exemplars.items():\n",
" e = Part(data['augmented'], label=label)\n",
" primitives.append(e)\n",
"\n",
"for label, data in augmented_train.items():\n",
"# parts_sampler = ccl.MultinomialNode(len(primitives), name=\"parts_sampler\")\n",
" parts_sampler = ccl.NormalNode(1)\n",
" prims = ccl.PrimitiveSet(primitives, sampler=parts_sampler, needs_argmax=False, topk=3)\n",
" model = ccl.CCLBase(n_samples=1, reward_fn=reward_fn())\n",
" model.add_primitive_set(prims)\n",
"\n",
"# t_data = [ (x, aaes[label]) for x in data['augmented'] ]\n",
" print('Training for label', label, '-----------------------------------------')\n",
" prog = model.run([ (data['original'], aaes[label]) ], epochs=200, popsize=250, n_programs=1)\n",
" progs[label] = prog"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Test"
]
},
{
"cell_type": "code",
"execution_count": 144,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"successes = 0\n",
"failures = 0\n",
"\n",
"# for each type of digit image\n",
"for label, test_data in buckets.items():\n",
" print('eval for', label)\n",
" # for each image\n",
" for datum in test_data[:10]:\n",
" rewards = {}\n",
" # for each type of program\n",
" for prog_label, programs in progs.items():\n",
" rewards[prog_label] = []\n",
" for p in programs:\n",
" sampled = p.sample(1000, data=datum)\n",
"\n",
" for i, sample in enumerate(sampled):\n",
"\n",
"# display.clear_output(wait=True)\n",
"# plt.imshow(sample[0].squeeze().data.cpu().numpy())\n",
"# plt.show()\n",
"\n",
" reward = p.reward_fn(sample, (datum, aaes[label]), 1)\n",
" rewards[prog_label].append(float(reward.data.cpu().numpy()))\n",
" \n",
" # take the mean of all the rewards\n",
" _rewards = { k: np.array(v).mean() for k,v in rewards.items() }\n",
" # calculate the predicted label for datum\n",
" predicted_label = max(_rewards, key=_rewards.get)\n",
" # account for the prediction\n",
" if predicted_label == label:\n",
" successes += 1\n",
" else:\n",
" failures += 1\n"
]
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy 91.72946445332404 %\n"
]
}
],
"source": [
"print(\"Accuracy\", 100 * successes / (failures + successes), '%')"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 141,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"1"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Generate table of contents"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%%javascript\n",
"$.getScript('https://kmahelona.github.io/ipython_notebook_goodies/ipython_notebook_toc.js')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"state": {},
"version_major": 2,
"version_minor": 0
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment