2019-06-05 12:38:36 -05:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
2019-06-05 23:56:41 -05:00
"Deep Learning Models -- A collection of various deep learning architectures, models, and tips for TensorFlow and PyTorch in Jupyter Notebooks.\n",
"- Author: Sebastian Raschka\n",
"- GitHub Repository: https://github.com/rasbt/deeplearning-models"
2019-06-05 12:38:36 -05:00
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sebastian Raschka \n",
"\n",
"CPython 3.6.8\n",
"IPython 7.2.0\n",
"\n",
"torch 1.0.0\n"
]
}
],
"source": [
"%load_ext watermark\n",
"%watermark -a 'Sebastian Raschka' -v -p torch"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Runs on CPU or GPU (if available)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Model Zoo -- Conditional Variational Autoencoder\n",
"\n",
"## (with labels in reconstruction loss)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A simple conditional variational autoencoder that compresses 768-pixel MNIST images down to a 35-pixel latent vector representation.\n",
"\n",
"This implementation concatenates the inputs with the class labels when computing the reconstruction loss as it is commonly done in non-convolutional conditional variational autoencoders. This leads to sightly better results compared to the implementation that does NOT concatenate the labels with the inputs to compute the reconstruction loss. For reference, see the implementation [./autoencoder-cvae_no-out-concat.ipynb](./autoencoder-cvae_no-out-concat.ipynb)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Imports"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import time\n",
"import numpy as np\n",
"import torch\n",
"import torch.nn.functional as F\n",
"from torch.utils.data import DataLoader\n",
"from torchvision import datasets\n",
"from torchvision import transforms\n",
"\n",
"\n",
"if torch.cuda.is_available():\n",
" torch.backends.cudnn.deterministic = True"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Device: cuda:1\n",
"Image batch dimensions: torch.Size([128, 1, 28, 28])\n",
"Image label dimensions: torch.Size([128])\n"
]
}
],
"source": [
"##########################\n",
"### SETTINGS\n",
"##########################\n",
"\n",
"# Device\n",
"device = torch.device(\"cuda:1\" if torch.cuda.is_available() else \"cpu\")\n",
"print('Device:', device)\n",
"\n",
"# Hyperparameters\n",
"random_seed = 0\n",
"learning_rate = 0.001\n",
"num_epochs = 50\n",
"batch_size = 128\n",
"\n",
"# Architecture\n",
"num_classes = 10\n",
"num_features = 784\n",
"num_hidden_1 = 500\n",
"num_latent = 35\n",
"\n",
"\n",
"##########################\n",
"### MNIST DATASET\n",
"##########################\n",
"\n",
"# Note transforms.ToTensor() scales input images\n",
"# to 0-1 range\n",
"train_dataset = datasets.MNIST(root='data', \n",
" train=True, \n",
" transform=transforms.ToTensor(),\n",
" download=True)\n",
"\n",
"test_dataset = datasets.MNIST(root='data', \n",
" train=False, \n",
" transform=transforms.ToTensor())\n",
"\n",
"\n",
"train_loader = DataLoader(dataset=train_dataset, \n",
" batch_size=batch_size, \n",
" shuffle=True)\n",
"\n",
"test_loader = DataLoader(dataset=test_dataset, \n",
" batch_size=batch_size, \n",
" shuffle=False)\n",
"\n",
"# Checking the dataset\n",
"for images, labels in train_loader: \n",
" print('Image batch dimensions:', images.shape)\n",
" print('Image label dimensions:', labels.shape)\n",
" break"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Model"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"##########################\n",
"### MODEL\n",
"##########################\n",
"\n",
"\n",
"def to_onehot(labels, num_classes, device):\n",
"\n",
" labels_onehot = torch.zeros(labels.size()[0], num_classes).to(device)\n",
" labels_onehot.scatter_(1, labels.view(-1, 1), 1)\n",
"\n",
" return labels_onehot\n",
"\n",
"\n",
"class ConditionalVariationalAutoencoder(torch.nn.Module):\n",
"\n",
" def __init__(self, num_features, num_hidden_1, num_latent, num_classes):\n",
" super(ConditionalVariationalAutoencoder, self).__init__()\n",
" \n",
" self.num_classes = num_classes\n",
" \n",
" ### ENCODER\n",
" self.hidden_1 = torch.nn.Linear(num_features+num_classes, num_hidden_1)\n",
" self.z_mean = torch.nn.Linear(num_hidden_1, num_latent)\n",
" # in the original paper (Kingma & Welling 2015, we use\n",
" # have a z_mean and z_var, but the problem is that\n",
" # the z_var can be negative, which would cause issues\n",
" # in the log later. Hence we assume that latent vector\n",
" # has a z_mean and z_log_var component, and when we need\n",
" # the regular variance or std_dev, we simply use \n",
" # an exponential function\n",
" self.z_log_var = torch.nn.Linear(num_hidden_1, num_latent)\n",
" \n",
" \n",
" ### DECODER\n",
" self.linear_3 = torch.nn.Linear(num_latent+num_classes, num_hidden_1)\n",
" self.linear_4 = torch.nn.Linear(num_hidden_1, num_features+num_classes)\n",
"\n",
" def reparameterize(self, z_mu, z_log_var):\n",
" # Sample epsilon from standard normal distribution\n",
" eps = torch.randn(z_mu.size(0), z_mu.size(1)).to(device)\n",
" # note that log(x^2) = 2*log(x); hence divide by 2 to get std_dev\n",
" # i.e., std_dev = exp(log(std_dev^2)/2) = exp(log(var)/2)\n",
" z = z_mu + eps * torch.exp(z_log_var/2.) \n",
" return z\n",
" \n",
" def encoder(self, features, targets):\n",
" ### Add condition\n",
" onehot_targets = to_onehot(targets, self.num_classes, device)\n",
" x = torch.cat((features, onehot_targets), dim=1)\n",
"\n",
" ### ENCODER\n",
" x = self.hidden_1(x)\n",
" x = F.leaky_relu(x)\n",
" z_mean = self.z_mean(x)\n",
" z_log_var = self.z_log_var(x)\n",
" encoded = self.reparameterize(z_mean, z_log_var)\n",
" return z_mean, z_log_var, encoded\n",
" \n",
" def decoder(self, encoded, targets):\n",
" ### Add condition\n",
" onehot_targets = to_onehot(targets, self.num_classes, device)\n",
" encoded = torch.cat((encoded, onehot_targets), dim=1) \n",
" \n",
" ### DECODER\n",
" x = self.linear_3(encoded)\n",
" x = F.leaky_relu(x)\n",
" x = self.linear_4(x)\n",
" decoded = torch.sigmoid(x)\n",
" return decoded\n",
"\n",
" def forward(self, features, targets):\n",
" \n",
" z_mean, z_log_var, encoded = self.encoder(features, targets)\n",
" decoded = self.decoder(encoded, targets)\n",
" \n",
" return z_mean, z_log_var, encoded, decoded\n",
"\n",
" \n",
"torch.manual_seed(random_seed)\n",
"model = ConditionalVariationalAutoencoder(num_features,\n",
" num_hidden_1,\n",
" num_latent,\n",
" num_classes)\n",
"model = model.to(device)\n",
" \n",
"\n",
"##########################\n",
"### COST AND OPTIMIZER\n",
"##########################\n",
"\n",
"optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Training"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 001/050 | Batch 000/003 | Cost: 71038.5859\n",
"Epoch: 001/050 | Batch 050/003 | Cost: 27687.3066\n",
"Epoch: 001/050 | Batch 100/003 | Cost: 22471.4355\n",
"Epoch: 001/050 | Batch 150/003 | Cost: 20541.7598\n",
"Epoch: 001/050 | Batch 200/003 | Cost: 19670.0254\n",
"Epoch: 001/050 | Batch 250/003 | Cost: 18063.1172\n",
"Epoch: 001/050 | Batch 300/003 | Cost: 18197.8105\n",
"Epoch: 001/050 | Batch 350/003 | Cost: 17140.0234\n",
"Epoch: 001/050 | Batch 400/003 | Cost: 17088.2832\n",
"Epoch: 001/050 | Batch 450/003 | Cost: 16489.5078\n",
"Time elapsed: 0.12 min\n",
"Epoch: 002/050 | Batch 000/003 | Cost: 16543.6680\n",
"Epoch: 002/050 | Batch 050/003 | Cost: 15903.9375\n",
"Epoch: 002/050 | Batch 100/003 | Cost: 15624.4824\n",
"Epoch: 002/050 | Batch 150/003 | Cost: 15635.6016\n",
"Epoch: 002/050 | Batch 200/003 | Cost: 15245.4121\n",
"Epoch: 002/050 | Batch 250/003 | Cost: 15592.2266\n",
"Epoch: 002/050 | Batch 300/003 | Cost: 14563.4980\n",
"Epoch: 002/050 | Batch 350/003 | Cost: 15090.5811\n",
"Epoch: 002/050 | Batch 400/003 | Cost: 14832.8682\n",
"Epoch: 002/050 | Batch 450/003 | Cost: 15250.2480\n",
"Time elapsed: 0.24 min\n",
"Epoch: 003/050 | Batch 000/003 | Cost: 14894.0859\n",
"Epoch: 003/050 | Batch 050/003 | Cost: 14885.7168\n",
"Epoch: 003/050 | Batch 100/003 | Cost: 14998.2500\n",
"Epoch: 003/050 | Batch 150/003 | Cost: 14456.1309\n",
"Epoch: 003/050 | Batch 200/003 | Cost: 14737.8740\n",
"Epoch: 003/050 | Batch 250/003 | Cost: 14265.4639\n",
"Epoch: 003/050 | Batch 300/003 | Cost: 13826.1016\n",
"Epoch: 003/050 | Batch 350/003 | Cost: 14193.5059\n",
"Epoch: 003/050 | Batch 400/003 | Cost: 14308.9688\n",
"Epoch: 003/050 | Batch 450/003 | Cost: 13530.7305\n",
"Time elapsed: 0.37 min\n",
"Epoch: 004/050 | Batch 000/003 | Cost: 14149.7422\n",
"Epoch: 004/050 | Batch 050/003 | Cost: 14044.5645\n",
"Epoch: 004/050 | Batch 100/003 | Cost: 13909.8926\n",
"Epoch: 004/050 | Batch 150/003 | Cost: 14146.3789\n",
"Epoch: 004/050 | Batch 200/003 | Cost: 13917.0820\n",
"Epoch: 004/050 | Batch 250/003 | Cost: 13873.8262\n",
"Epoch: 004/050 | Batch 300/003 | Cost: 13358.3555\n",
"Epoch: 004/050 | Batch 350/003 | Cost: 13450.4238\n",
"Epoch: 004/050 | Batch 400/003 | Cost: 13677.4062\n",
"Epoch: 004/050 | Batch 450/003 | Cost: 14247.6426\n",
"Time elapsed: 0.49 min\n",
"Epoch: 005/050 | Batch 000/003 | Cost: 13364.3730\n",
"Epoch: 005/050 | Batch 050/003 | Cost: 13535.6279\n",
"Epoch: 005/050 | Batch 100/003 | Cost: 13827.6201\n",
"Epoch: 005/050 | Batch 150/003 | Cost: 13421.4111\n",
"Epoch: 005/050 | Batch 200/003 | Cost: 13467.9238\n",
"Epoch: 005/050 | Batch 250/003 | Cost: 13812.4131\n",
"Epoch: 005/050 | Batch 300/003 | Cost: 13457.0234\n",
"Epoch: 005/050 | Batch 350/003 | Cost: 14082.8926\n",
"Epoch: 005/050 | Batch 400/003 | Cost: 13224.9209\n",
"Epoch: 005/050 | Batch 450/003 | Cost: 13151.8311\n",
"Time elapsed: 0.61 min\n",
"Epoch: 006/050 | Batch 000/003 | Cost: 13850.8398\n",
"Epoch: 006/050 | Batch 050/003 | Cost: 13386.6289\n",
"Epoch: 006/050 | Batch 100/003 | Cost: 13522.1650\n",
"Epoch: 006/050 | Batch 150/003 | Cost: 12865.0898\n",
"Epoch: 006/050 | Batch 200/003 | Cost: 13949.3652\n",
"Epoch: 006/050 | Batch 250/003 | Cost: 12964.2607\n",
"Epoch: 006/050 | Batch 300/003 | Cost: 13692.9707\n",
"Epoch: 006/050 | Batch 350/003 | Cost: 13319.4219\n",
"Epoch: 006/050 | Batch 400/003 | Cost: 13278.6582\n",
"Epoch: 006/050 | Batch 450/003 | Cost: 13224.0107\n",
"Time elapsed: 0.73 min\n",
"Epoch: 007/050 | Batch 000/003 | Cost: 13686.9590\n",
"Epoch: 007/050 | Batch 050/003 | Cost: 13188.3828\n",
"Epoch: 007/050 | Batch 100/003 | Cost: 13173.3457\n",
"Epoch: 007/050 | Batch 150/003 | Cost: 13309.3906\n",
"Epoch: 007/050 | Batch 200/003 | Cost: 13174.3359\n",
"Epoch: 007/050 | Batch 250/003 | Cost: 13169.7100\n",
"Epoch: 007/050 | Batch 300/003 | Cost: 13255.1074\n",
"Epoch: 007/050 | Batch 350/003 | Cost: 13153.2480\n",
"Epoch: 007/050 | Batch 400/003 | Cost: 13683.6426\n",
"Epoch: 007/050 | Batch 450/003 | Cost: 13518.1055\n",
"Time elapsed: 0.85 min\n",
"Epoch: 008/050 | Batch 000/003 | Cost: 13531.5840\n",
"Epoch: 008/050 | Batch 050/003 | Cost: 12898.9746\n",
"Epoch: 008/050 | Batch 100/003 | Cost: 13434.8193\n",
"Epoch: 008/050 | Batch 150/003 | Cost: 13045.6172\n",
"Epoch: 008/050 | Batch 200/003 | Cost: 13175.8867\n",
"Epoch: 008/050 | Batch 250/003 | Cost: 12952.2139\n",
"Epoch: 008/050 | Batch 300/003 | Cost: 13100.8184\n",
"Epoch: 008/050 | Batch 350/003 | Cost: 13419.0410\n",
"Epoch: 008/050 | Batch 400/003 | Cost: 13768.5234\n",
"Epoch: 008/050 | Batch 450/003 | Cost: 13300.7402\n",
"Time elapsed: 0.97 min\n",
"Epoch: 009/050 | Batch 000/003 | Cost: 13035.2109\n",
"Epoch: 009/050 | Batch 050/003 | Cost: 13260.9902\n",
"Epoch: 009/050 | Batch 100/003 | Cost: 13446.3652\n",
"Epoch: 009/050 | Batch 150/003 | Cost: 13241.1523\n",
"Epoch: 009/050 | Batch 200/003 | Cost: 13139.6904\n",
"Epoch: 009/050 | Batch 250/003 | Cost: 13418.0098\n",
"Epoch: 009/050 | Batch 300/003 | Cost: 12743.2139\n",
"Epoch: 009/050 | Batch 350/003 | Cost: 13347.6465\n",
"Epoch: 009/050 | Batch 400/003 | Cost: 13353.1543\n",
"Epoch: 009/050 | Batch 450/003 | Cost: 13161.7549\n",
"Time elapsed: 1.09 min\n",
"Epoch: 010/050 | Batch 000/003 | Cost: 13043.7656\n",
"Epoch: 010/050 | Batch 050/003 | Cost: 13368.1816\n",
"Epoch: 010/050 | Batch 100/003 | Cost: 12742.3281\n",
"Epoch: 010/050 | Batch 150/003 | Cost: 13022.2832\n",
"Epoch: 010/050 | Batch 200/003 | Cost: 13076.5967\n",
"Epoch: 010/050 | Batch 250/003 | Cost: 12765.7480\n",
"Epoch: 010/050 | Batch 300/003 | Cost: 12605.2461\n",
"Epoch: 010/050 | Batch 350/003 | Cost: 12561.1895\n",
"Epoch: 010/050 | Batch 400/003 | Cost: 13314.3623\n",
"Epoch: 010/050 | Batch 450/003 | Cost: 13048.6670\n",
"Time elapsed: 1.21 min\n",
"Epoch: 011/050 | Batch 000/003 | Cost: 12769.8984\n",
"Epoch: 011/050 | Batch 050/003 | Cost: 13002.4824\n",
"Epoch: 011/050 | Batch 100/003 | Cost: 12989.9756\n",
"Epoch: 011/050 | Batch 150/003 | Cost: 12345.3877\n",
"Epoch: 011/050 | Batch 200/003 | Cost: 12599.8975\n",
"Epoch: 011/050 | Batch 250/003 | Cost: 13375.6543\n",
"Epoch: 011/050 | Batch 300/003 | Cost: 12829.1621\n",
"Epoch: 011/050 | Batch 350/003 | Cost: 12245.9316\n",
"Epoch: 011/050 | Batch 400/003 | Cost: 12745.7324\n",
"Epoch: 011/050 | Batch 450/003 | Cost: 12833.6787\n",
"Time elapsed: 1.33 min\n",
"Epoch: 012/050 | Batch 000/003 | Cost: 13168.7441\n",
"Epoch: 012/050 | Batch 050/003 | Cost: 12641.6289\n",
"Epoch: 012/050 | Batch 100/003 | Cost: 12435.3809\n",
"Epoch: 012/050 | Batch 150/003 | Cost: 12635.2422\n",
"Epoch: 012/050 | Batch 200/003 | Cost: 12657.0459\n",
"Epoch: 012/050 | Batch 250/003 | Cost: 12965.5098\n",
"Epoch: 012/050 | Batch 300/003 | Cost: 13022.1289\n",
"Epoch: 012/050 | Batch 350/003 | Cost: 13023.3535\n",
"Epoch: 012/050 | Batch 400/003 | Cost: 12723.5039\n",
"Epoch: 012/050 | Batch 450/003 | Cost: 12593.6680\n",
"Time elapsed: 1.45 min\n",
"Epoch: 013/050 | Batch 000/003 | Cost: 13062.8193\n",
"Epoch: 013/050 | Batch 050/003 | Cost: 12942.4668\n",
"Epoch: 013/050 | Batch 100/003 | Cost: 13116.7461\n",
"Epoch: 013/050 | Batch 150/003 | Cost: 12458.0615\n",
"Epoch: 013/050 | Batch 200/003 | Cost: 12586.8535\n",
"Epoch: 013/050 | Batch 250/003 | Cost: 12546.0703\n",
"Epoch: 013/050 | Batch 300/003 | Cost: 12817.3428\n",
"Epoch: 013/050 | Batch 350/003 | Cost: 13081.0586\n",
"Epoch: 013/050 | Batch 400/003 | Cost: 13006.0645\n",
"Epoch: 013/050 | Batch 450/003 | Cost: 12553.9902\n",
"Time elapsed: 1.57 min\n",
"Epoch: 014/050 | Batch 000/003 | Cost: 12912.1406\n",
"Epoch: 014/050 | Batch 050/003 | Cost: 12546.7812\n",
"Epoch: 014/050 | Batch 100/003 | Cost: 12928.7334\n",
"Epoch: 014/050 | Batch 150/003 | Cost: 12532.9268\n",
"Epoch: 014/050 | Batch 200/003 | Cost: 12385.5430\n",
"Epoch: 014/050 | Batch 250/003 | Cost: 12737.9053\n",
"Epoch: 014/050 | Batch 300/003 | Cost: 12179.8184\n",
"Epoch: 014/050 | Batch 350/003 | Cost: 12855.8301\n",
"Epoch: 014/050 | Batch 400/003 | Cost: 12984.9512\n",
"Epoch: 014/050 | Batch 450/003 | Cost: 12996.2832\n",
"Time elapsed: 1.69 min\n",
"Epoch: 015/050 | Batch 000/003 | Cost: 12615.2100\n",
"Epoch: 015/050 | Batch 050/003 | Cost: 13215.7402\n",
"Epoch: 015/050 | Batch 100/003 | Cost: 12532.8447\n",
"Epoch: 015/050 | Batch 150/003 | Cost: 12863.5928\n",
"Epoch: 015/050 | Batch 200/003 | Cost: 12683.9209\n",
"Epoch: 015/050 | Batch 250/003 | Cost: 12564.1309\n",
"Epoch: 015/050 | Batch 300/003 | Cost: 12535.2500\n",
"Epoch: 015/050 | Batch 350/003 | Cost: 12853.1445\n",
"Epoch: 015/050 | Batch 400/003 | Cost: 12600.9902\n",
"Epoch: 015/050 | Batch 450/003 | Cost: 12867.0781\n",
"Time elapsed: 1.81 min\n",
"Epoch: 016/050 | Batch 000/003 | Cost: 12429.7402\n",
"Epoch: 016/050 | Batch 050/003 | Cost: 13151.1377\n",
"Epoch: 016/050 | Batch 100/003 | Cost: 12885.5371\n",
"Epoch: 016/050 | Batch 150/003 | Cost: 12601.3242\n",
"Epoch: 016/050 | Batch 200/003 | Cost: 13196.4834\n",
"Epoch: 016/050 | Batch 250/003 | Cost: 12570.6836\n",
"Epoch: 016/050 | Batch 300/003 | Cost: 12942.7861\n",
"Epoch: 016/050 | Batch 350/003 | Cost: 12389.7363\n",
"Epoch: 016/050 | Batch 400/003 | Cost: 12576.1445\n",
"Epoch: 016/050 | Batch 450/003 | Cost: 12140.7900\n",
"Time elapsed: 1.93 min\n",
"Epoch: 017/050 | Batch 000/003 | Cost: 12978.2227\n",
"Epoch: 017/050 | Batch 050/003 | Cost: 12447.1230\n",
"Epoch: 017/050 | Batch 100/003 | Cost: 12980.0459\n",
"Epoch: 017/050 | Batch 150/003 | Cost: 12901.1045\n",
"Epoch: 017/050 | Batch 200/003 | Cost: 12381.2070\n",
"Epoch: 017/050 | Batch 250/003 | Cost: 12956.8857\n",
"Epoch: 017/050 | Batch 300/003 | Cost: 12341.9512\n",
"Epoch: 017/050 | Batch 350/003 | Cost: 12692.6270\n",
"Epoch: 017/050 | Batch 400/003 | Cost: 12316.9727\n",
"Epoch: 017/050 | Batch 450/003 | Cost: 12857.4844\n",
"Time elapsed: 2.05 min\n",
"Epoch: 018/050 | Batch 000/003 | Cost: 12531.7217\n",
"Epoch: 018/050 | Batch 050/003 | Cost: 12500.7012\n",
"Epoch: 018/050 | Batch 100/003 | Cost: 12458.2969\n",
"Epoch: 018/050 | Batch 150/003 | Cost: 12838.6758\n",
"Epoch: 018/050 | Batch 200/003 | Cost: 12678.9072\n",
"Epoch: 018/050 | Batch 250/003 | Cost: 12199.8320\n",
"Epoch: 018/050 | Batch 300/003 | Cost: 12352.8457\n",
"Epoch: 018/050 | Batch 350/003 | Cost: 12980.6797\n",
"Epoch: 018/050 | Batch 400/003 | Cost: 11996.0254\n",
"Epoch: 018/050 | Batch 450/003 | Cost: 12993.7158\n",
"Time elapsed: 2.17 min\n",
"Epoch: 019/050 | Batch 000/003 | Cost: 12559.5215\n",
"Epoch: 019/050 | Batch 050/003 | Cost: 12757.8662\n",
"Epoch: 019/050 | Batch 100/003 | Cost: 13118.6836\n",
"Epoch: 019/050 | Batch 150/003 | Cost: 13059.1777\n",
"Epoch: 019/050 | Batch 200/003 | Cost: 13048.2031\n",
"Epoch: 019/050 | Batch 250/003 | Cost: 12460.9688\n",
"Epoch: 019/050 | Batch 300/003 | Cost: 12757.1748\n",
"Epoch: 019/050 | Batch 350/003 | Cost: 12035.1006\n",
"Epoch: 019/050 | Batch 400/003 | Cost: 12802.9883\n",
"Epoch: 019/050 | Batch 450/003 | Cost: 12858.0488\n",
"Time elapsed: 2.29 min\n",
"Epoch: 020/050 | Batch 000/003 | Cost: 12934.9336\n",
"Epoch: 020/050 | Batch 050/003 | Cost: 12974.0488\n",
"Epoch: 020/050 | Batch 100/003 | Cost: 12512.7949\n",
"Epoch: 020/050 | Batch 150/003 | Cost: 12980.7275\n",
"Epoch: 020/050 | Batch 200/003 | Cost: 12930.8789\n",
"Epoch: 020/050 | Batch 250/003 | Cost: 12721.5723\n",
"Epoch: 020/050 | Batch 300/003 | Cost: 12933.5918\n",
"Epoch: 020/050 | Batch 350/003 | Cost: 12456.5488\n",
"Epoch: 020/050 | Batch 400/003 | Cost: 12849.0654\n",
"Epoch: 020/050 | Batch 450/003 | Cost: 12522.7480\n",
"Time elapsed: 2.41 min\n",
"Epoch: 021/050 | Batch 000/003 | Cost: 12122.0742\n",
"Epoch: 021/050 | Batch 050/003 | Cost: 13007.4697\n",
"Epoch: 021/050 | Batch 100/003 | Cost: 12690.0635\n",
"Epoch: 021/050 | Batch 150/003 | Cost: 12353.1621\n",
"Epoch: 021/050 | Batch 200/003 | Cost: 13007.6445\n",
"Epoch: 021/050 | Batch 250/003 | Cost: 12202.5176\n",
"Epoch: 021/050 | Batch 300/003 | Cost: 12154.6660\n",
"Epoch: 021/050 | Batch 350/003 | Cost: 12723.7158\n",
"Epoch: 021/050 | Batch 400/003 | Cost: 12902.6582\n",
"Epoch: 021/050 | Batch 450/003 | Cost: 12786.1484\n",
"Time elapsed: 2.53 min\n",
"Epoch: 022/050 | Batch 000/003 | Cost: 12648.4844\n",
"Epoch: 022/050 | Batch 050/003 | Cost: 12816.2891\n",
"Epoch: 022/050 | Batch 100/003 | Cost: 12544.2412\n",
"Epoch: 022/050 | Batch 150/003 | Cost: 12651.0215\n",
"Epoch: 022/050 | Batch 200/003 | Cost: 12831.6562\n",
"Epoch: 022/050 | Batch 250/003 | Cost: 12590.9326\n",
"Epoch: 022/050 | Batch 300/003 | Cost: 12396.2373\n",
"Epoch: 022/050 | Batch 350/003 | Cost: 12948.6094\n",
"Epoch: 022/050 | Batch 400/003 | Cost: 12553.6816\n",
"Epoch: 022/050 | Batch 450/003 | Cost: 12309.2637\n",
"Time elapsed: 2.65 min\n",
"Epoch: 023/050 | Batch 000/003 | Cost: 12857.9453\n",
"Epoch: 023/050 | Batch 050/003 | Cost: 12910.1377\n",
"Epoch: 023/050 | Batch 100/003 | Cost: 12449.3242\n",
"Epoch: 023/050 | Batch 150/003 | Cost: 12278.5312\n",
"Epoch: 023/050 | Batch 200/003 | Cost: 12971.6885\n",
"Epoch: 023/050 | Batch 250/003 | Cost: 13084.1699\n",
"Epoch: 023/050 | Batch 300/003 | Cost: 12463.8232\n",
"Epoch: 023/050 | Batch 350/003 | Cost: 12589.3398\n",
"Epoch: 023/050 | Batch 400/003 | Cost: 12732.2168\n",
"Epoch: 023/050 | Batch 450/003 | Cost: 12196.4492\n",
"Time elapsed: 2.76 min\n",
"Epoch: 024/050 | Batch 000/003 | Cost: 12342.8789\n",
"Epoch: 024/050 | Batch 050/003 | Cost: 12255.4883\n",
"Epoch: 024/050 | Batch 100/003 | Cost: 12158.4902\n",
"Epoch: 024/050 | Batch 150/003 | Cost: 12731.5742\n",
"Epoch: 024/050 | Batch 200/003 | Cost: 12789.7168\n",
"Epoch: 024/050 | Batch 250/003 | Cost: 12213.1104\n",
"Epoch: 024/050 | Batch 300/003 | Cost: 12613.8281\n",
"Epoch: 024/050 | Batch 350/003 | Cost: 12530.3096\n",
"Epoch: 024/050 | Batch 400/003 | Cost: 12475.6035\n",
"Epoch: 024/050 | Batch 450/003 | Cost: 12182.7178\n",
"Time elapsed: 2.88 min\n",
"Epoch: 025/050 | Batch 000/003 | Cost: 12929.5430\n",
"Epoch: 025/050 | Batch 050/003 | Cost: 12472.9180\n",
"Epoch: 025/050 | Batch 100/003 | Cost: 11870.2754\n",
"Epoch: 025/050 | Batch 150/003 | Cost: 12619.1641\n",
"Epoch: 025/050 | Batch 200/003 | Cost: 12285.2344\n",
"Epoch: 025/050 | Batch 250/003 | Cost: 12557.6367\n",
"Epoch: 025/050 | Batch 300/003 | Cost: 12409.3574\n",
"Epoch: 025/050 | Batch 350/003 | Cost: 12889.7910\n",
"Epoch: 025/050 | Batch 400/003 | Cost: 12708.5605\n",
"Epoch: 025/050 | Batch 450/003 | Cost: 12577.1514\n",
"Time elapsed: 3.00 min\n",
"Epoch: 026/050 | Batch 000/003 | Cost: 12301.7139\n",
"Epoch: 026/050 | Batch 050/003 | Cost: 12692.7188\n",
"Epoch: 026/050 | Batch 100/003 | Cost: 12601.7607\n",
"Epoch: 026/050 | Batch 150/003 | Cost: 12460.5254\n",
"Epoch: 026/050 | Batch 200/003 | Cost: 12769.4287\n",
"Epoch: 026/050 | Batch 250/003 | Cost: 12428.0000\n",
"Epoch: 026/050 | Batch 300/003 | Cost: 12987.5449\n",
"Epoch: 026/050 | Batch 350/003 | Cost: 12646.5908\n",
"Epoch: 026/050 | Batch 400/003 | Cost: 12335.6738\n",
"Epoch: 026/050 | Batch 450/003 | Cost: 12613.5449\n",
"Time elapsed: 3.12 min\n",
"Epoch: 027/050 | Batch 000/003 | Cost: 12647.8809\n",
"Epoch: 027/050 | Batch 050/003 | Cost: 12970.0127\n",
"Epoch: 027/050 | Batch 100/003 | Cost: 12870.9219\n",
"Epoch: 027/050 | Batch 150/003 | Cost: 12435.1553\n",
"Epoch: 027/050 | Batch 200/003 | Cost: 12810.8418\n",
"Epoch: 027/050 | Batch 250/003 | Cost: 12727.6777\n",
"Epoch: 027/050 | Batch 300/003 | Cost: 12762.6055\n",
"Epoch: 027/050 | Batch 350/003 | Cost: 12970.4414\n",
"Epoch: 027/050 | Batch 400/003 | Cost: 12745.8652\n",
"Epoch: 027/050 | Batch 450/003 | Cost: 12442.3232\n",
"Time elapsed: 3.24 min\n",
"Epoch: 028/050 | Batch 000/003 | Cost: 12199.5078\n",
"Epoch: 028/050 | Batch 050/003 | Cost: 12707.5625\n",
"Epoch: 028/050 | Batch 100/003 | Cost: 12289.9277\n",
"Epoch: 028/050 | Batch 150/003 | Cost: 12375.3242\n",
"Epoch: 028/050 | Batch 200/003 | Cost: 12023.3887\n",
"Epoch: 028/050 | Batch 250/003 | Cost: 12776.7168\n",
"Epoch: 028/050 | Batch 300/003 | Cost: 12680.4668\n",
"Epoch: 028/050 | Batch 350/003 | Cost: 12701.3281\n",
"Epoch: 028/050 | Batch 400/003 | Cost: 12561.7227\n",
"Epoch: 028/050 | Batch 450/003 | Cost: 12763.8447\n",
"Time elapsed: 3.36 min\n",
"Epoch: 029/050 | Batch 000/003 | Cost: 12721.6777\n",
"Epoch: 029/050 | Batch 050/003 | Cost: 12443.0645\n",
"Epoch: 029/050 | Batch 100/003 | Cost: 12057.7822\n",
"Epoch: 029/050 | Batch 150/003 | Cost: 12504.2529\n",
"Epoch: 029/050 | Batch 200/003 | Cost: 12310.3965\n",
"Epoch: 029/050 | Batch 250/003 | Cost: 13202.6211\n",
"Epoch: 029/050 | Batch 300/003 | Cost: 12117.8008\n",
"Epoch: 029/050 | Batch 350/003 | Cost: 12538.9092\n",
"Epoch: 029/050 | Batch 400/003 | Cost: 12451.9180\n",
"Epoch: 029/050 | Batch 450/003 | Cost: 12649.5537\n",
"Time elapsed: 3.48 min\n",
"Epoch: 030/050 | Batch 000/003 | Cost: 13177.7520\n",
"Epoch: 030/050 | Batch 050/003 | Cost: 12634.2002\n",
"Epoch: 030/050 | Batch 100/003 | Cost: 12582.4863\n",
"Epoch: 030/050 | Batch 150/003 | Cost: 12516.8877\n",
"Epoch: 030/050 | Batch 200/003 | Cost: 12460.7139\n",
"Epoch: 030/050 | Batch 250/003 | Cost: 12385.2090\n",
"Epoch: 030/050 | Batch 300/003 | Cost: 12847.1113\n",
"Epoch: 030/050 | Batch 350/003 | Cost: 12123.1543\n",
"Epoch: 030/050 | Batch 400/003 | Cost: 12427.7227\n",
"Epoch: 030/050 | Batch 450/003 | Cost: 12904.1279\n",
"Time elapsed: 3.60 min\n",
"Epoch: 031/050 | Batch 000/003 | Cost: 12551.2178\n",
"Epoch: 031/050 | Batch 050/003 | Cost: 13006.6875\n",
"Epoch: 031/050 | Batch 100/003 | Cost: 12672.4551\n",
"Epoch: 031/050 | Batch 150/003 | Cost: 12577.4131\n",
"Epoch: 031/050 | Batch 200/003 | Cost: 12595.9150\n",
"Epoch: 031/050 | Batch 250/003 | Cost: 12294.5635\n",
"Epoch: 031/050 | Batch 300/003 | Cost: 12491.6406\n",
"Epoch: 031/050 | Batch 350/003 | Cost: 12726.5947\n",
"Epoch: 031/050 | Batch 400/003 | Cost: 12449.7246\n",
"Epoch: 031/050 | Batch 450/003 | Cost: 12771.0234\n",
"Time elapsed: 3.72 min\n",
"Epoch: 032/050 | Batch 000/003 | Cost: 12567.2988\n",
"Epoch: 032/050 | Batch 050/003 | Cost: 11960.7676\n",
"Epoch: 032/050 | Batch 100/003 | Cost: 12276.4648\n",
"Epoch: 032/050 | Batch 150/003 | Cost: 13205.2402\n",
"Epoch: 032/050 | Batch 200/003 | Cost: 12931.1514\n",
"Epoch: 032/050 | Batch 250/003 | Cost: 12975.4473\n",
"Epoch: 032/050 | Batch 300/003 | Cost: 12364.8164\n",
"Epoch: 032/050 | Batch 350/003 | Cost: 13167.5020\n",
"Epoch: 032/050 | Batch 400/003 | Cost: 12439.9355\n",
"Epoch: 032/050 | Batch 450/003 | Cost: 12526.5000\n",
"Time elapsed: 3.84 min\n",
"Epoch: 033/050 | Batch 000/003 | Cost: 12447.2412\n",
"Epoch: 033/050 | Batch 050/003 | Cost: 12603.1895\n",
"Epoch: 033/050 | Batch 100/003 | Cost: 11774.2539\n",
"Epoch: 033/050 | Batch 150/003 | Cost: 12859.1406\n",
"Epoch: 033/050 | Batch 200/003 | Cost: 12321.5195\n",
"Epoch: 033/050 | Batch 250/003 | Cost: 12458.5352\n",
"Epoch: 033/050 | Batch 300/003 | Cost: 12871.9336\n",
"Epoch: 033/050 | Batch 350/003 | Cost: 12373.0039\n",
"Epoch: 033/050 | Batch 400/003 | Cost: 12674.4531\n",
"Epoch: 033/050 | Batch 450/003 | Cost: 12425.8633\n",
"Time elapsed: 3.96 min\n",
"Epoch: 034/050 | Batch 000/003 | Cost: 12650.1582\n",
"Epoch: 034/050 | Batch 050/003 | Cost: 12587.3613\n",
"Epoch: 034/050 | Batch 100/003 | Cost: 12675.3105\n",
"Epoch: 034/050 | Batch 150/003 | Cost: 12833.5391\n",
"Epoch: 034/050 | Batch 200/003 | Cost: 12441.7305\n",
"Epoch: 034/050 | Batch 250/003 | Cost: 12733.2959\n",
"Epoch: 034/050 | Batch 300/003 | Cost: 12329.9219\n",
"Epoch: 034/050 | Batch 350/003 | Cost: 12802.7354\n",
"Epoch: 034/050 | Batch 400/003 | Cost: 11619.9902\n",
"Epoch: 034/050 | Batch 450/003 | Cost: 12474.8330\n",
"Time elapsed: 4.08 min\n",
"Epoch: 035/050 | Batch 000/003 | Cost: 12535.9199\n",
"Epoch: 035/050 | Batch 050/003 | Cost: 12450.3691\n",
"Epoch: 035/050 | Batch 100/003 | Cost: 12693.5137\n",
"Epoch: 035/050 | Batch 150/003 | Cost: 12554.5850\n",
"Epoch: 035/050 | Batch 200/003 | Cost: 12123.2129\n",
"Epoch: 035/050 | Batch 250/003 | Cost: 12241.1787\n",
"Epoch: 035/050 | Batch 300/003 | Cost: 12227.1240\n",
"Epoch: 035/050 | Batch 350/003 | Cost: 12536.8457\n",
"Epoch: 035/050 | Batch 400/003 | Cost: 12318.9238\n",
"Epoch: 035/050 | Batch 450/003 | Cost: 12698.3252\n",
"Time elapsed: 4.20 min\n",
"Epoch: 036/050 | Batch 000/003 | Cost: 12412.0586\n",
"Epoch: 036/050 | Batch 050/003 | Cost: 12438.2656\n",
"Epoch: 036/050 | Batch 100/003 | Cost: 12465.1973\n",
"Epoch: 036/050 | Batch 150/003 | Cost: 12164.7285\n",
"Epoch: 036/050 | Batch 200/003 | Cost: 12492.0488\n",
"Epoch: 036/050 | Batch 250/003 | Cost: 12558.4023\n",
"Epoch: 036/050 | Batch 300/003 | Cost: 12648.7227\n",
"Epoch: 036/050 | Batch 350/003 | Cost: 12408.2832\n",
"Epoch: 036/050 | Batch 400/003 | Cost: 12169.1201\n",
"Epoch: 036/050 | Batch 450/003 | Cost: 12748.4707\n",
"Time elapsed: 4.32 min\n",
"Epoch: 037/050 | Batch 000/003 | Cost: 12361.0439\n",
"Epoch: 037/050 | Batch 050/003 | Cost: 12553.2051\n",
"Epoch: 037/050 | Batch 100/003 | Cost: 12548.9307\n",
"Epoch: 037/050 | Batch 150/003 | Cost: 12064.2344\n",
"Epoch: 037/050 | Batch 200/003 | Cost: 12219.1270\n",
"Epoch: 037/050 | Batch 250/003 | Cost: 12353.5186\n",
"Epoch: 037/050 | Batch 300/003 | Cost: 12224.3682\n",
"Epoch: 037/050 | Batch 350/003 | Cost: 12668.8193\n",
"Epoch: 037/050 | Batch 400/003 | Cost: 12274.8691\n",
"Epoch: 037/050 | Batch 450/003 | Cost: 12393.6182\n",
"Time elapsed: 4.44 min\n",
"Epoch: 038/050 | Batch 000/003 | Cost: 12669.8281\n",
"Epoch: 038/050 | Batch 050/003 | Cost: 12271.3066\n",
"Epoch: 038/050 | Batch 100/003 | Cost: 12387.7930\n",
"Epoch: 038/050 | Batch 150/003 | Cost: 11961.1123\n",
"Epoch: 038/050 | Batch 200/003 | Cost: 11976.5498\n",
"Epoch: 038/050 | Batch 250/003 | Cost: 12573.2324\n",
"Epoch: 038/050 | Batch 300/003 | Cost: 12608.4854\n",
"Epoch: 038/050 | Batch 350/003 | Cost: 12112.7617\n",
"Epoch: 038/050 | Batch 400/003 | Cost: 12275.8418\n",
"Epoch: 038/050 | Batch 450/003 | Cost: 12417.7549\n",
"Time elapsed: 4.56 min\n",
"Epoch: 039/050 | Batch 000/003 | Cost: 12874.1016\n",
"Epoch: 039/050 | Batch 050/003 | Cost: 12372.2070\n",
"Epoch: 039/050 | Batch 100/003 | Cost: 12446.2695\n",
"Epoch: 039/050 | Batch 150/003 | Cost: 13140.2764\n",
"Epoch: 039/050 | Batch 200/003 | Cost: 12825.3037\n",
"Epoch: 039/050 | Batch 250/003 | Cost: 12165.7451\n",
"Epoch: 039/050 | Batch 300/003 | Cost: 12430.3340\n",
"Epoch: 039/050 | Batch 350/003 | Cost: 12702.8613\n",
"Epoch: 039/050 | Batch 400/003 | Cost: 12374.5752\n",
"Epoch: 039/050 | Batch 450/003 | Cost: 12414.6475\n",
"Time elapsed: 4.68 min\n",
"Epoch: 040/050 | Batch 000/003 | Cost: 12147.0693\n",
"Epoch: 040/050 | Batch 050/003 | Cost: 12907.0684\n",
"Epoch: 040/050 | Batch 100/003 | Cost: 11664.0801\n",
"Epoch: 040/050 | Batch 150/003 | Cost: 12443.9512\n",
"Epoch: 040/050 | Batch 200/003 | Cost: 12112.6250\n",
"Epoch: 040/050 | Batch 250/003 | Cost: 12146.6133\n",
"Epoch: 040/050 | Batch 300/003 | Cost: 12050.8281\n",
"Epoch: 040/050 | Batch 350/003 | Cost: 12762.5020\n",
"Epoch: 040/050 | Batch 400/003 | Cost: 12517.0771\n",
"Epoch: 040/050 | Batch 450/003 | Cost: 12191.8916\n",
"Time elapsed: 4.80 min\n",
"Epoch: 041/050 | Batch 000/003 | Cost: 12098.7090\n",
"Epoch: 041/050 | Batch 050/003 | Cost: 12562.2539\n",
"Epoch: 041/050 | Batch 100/003 | Cost: 12609.0088\n",
"Epoch: 041/050 | Batch 150/003 | Cost: 12270.9854\n",
"Epoch: 041/050 | Batch 200/003 | Cost: 12757.7578\n",
"Epoch: 041/050 | Batch 250/003 | Cost: 12277.8584\n",
"Epoch: 041/050 | Batch 300/003 | Cost: 12219.4121\n",
"Epoch: 041/050 | Batch 350/003 | Cost: 12215.5977\n",
"Epoch: 041/050 | Batch 400/003 | Cost: 12476.9668\n",
"Epoch: 041/050 | Batch 450/003 | Cost: 12220.5449\n",
"Time elapsed: 4.92 min\n",
"Epoch: 042/050 | Batch 000/003 | Cost: 12391.3916\n",
"Epoch: 042/050 | Batch 050/003 | Cost: 12526.2002\n",
"Epoch: 042/050 | Batch 100/003 | Cost: 12929.2305\n",
"Epoch: 042/050 | Batch 150/003 | Cost: 12575.8652\n",
"Epoch: 042/050 | Batch 200/003 | Cost: 12588.2656\n",
"Epoch: 042/050 | Batch 250/003 | Cost: 12191.2520\n",
"Epoch: 042/050 | Batch 300/003 | Cost: 12416.6172\n",
"Epoch: 042/050 | Batch 350/003 | Cost: 12398.3096\n",
"Epoch: 042/050 | Batch 400/003 | Cost: 12093.6777\n",
"Epoch: 042/050 | Batch 450/003 | Cost: 12391.6504\n",
"Time elapsed: 5.04 min\n",
"Epoch: 043/050 | Batch 000/003 | Cost: 12748.3145\n",
"Epoch: 043/050 | Batch 050/003 | Cost: 12076.2344\n",
"Epoch: 043/050 | Batch 100/003 | Cost: 11953.4248\n",
"Epoch: 043/050 | Batch 150/003 | Cost: 12420.9707\n",
"Epoch: 043/050 | Batch 200/003 | Cost: 12428.2041\n",
"Epoch: 043/050 | Batch 250/003 | Cost: 12447.2324\n",
"Epoch: 043/050 | Batch 300/003 | Cost: 12404.4004\n",
"Epoch: 043/050 | Batch 350/003 | Cost: 13077.8926\n",
"Epoch: 043/050 | Batch 400/003 | Cost: 13071.2891\n",
"Epoch: 043/050 | Batch 450/003 | Cost: 12398.8311\n",
"Time elapsed: 5.16 min\n",
"Epoch: 044/050 | Batch 000/003 | Cost: 12913.1631\n",
"Epoch: 044/050 | Batch 050/003 | Cost: 12169.1523\n",
"Epoch: 044/050 | Batch 100/003 | Cost: 11856.3672\n",
"Epoch: 044/050 | Batch 150/003 | Cost: 12280.6045\n",
"Epoch: 044/050 | Batch 200/003 | Cost: 12343.7998\n",
"Epoch: 044/050 | Batch 250/003 | Cost: 12746.3164\n",
"Epoch: 044/050 | Batch 300/003 | Cost: 12279.5156\n",
"Epoch: 044/050 | Batch 350/003 | Cost: 12548.7598\n",
"Epoch: 044/050 | Batch 400/003 | Cost: 12430.6104\n",
"Epoch: 044/050 | Batch 450/003 | Cost: 12775.3105\n",
"Time elapsed: 5.28 min\n",
"Epoch: 045/050 | Batch 000/003 | Cost: 12245.9482\n",
"Epoch: 045/050 | Batch 050/003 | Cost: 12547.1270\n",
"Epoch: 045/050 | Batch 100/003 | Cost: 12214.5732\n",
"Epoch: 045/050 | Batch 150/003 | Cost: 12484.7715\n",
"Epoch: 045/050 | Batch 200/003 | Cost: 12552.6123\n",
"Epoch: 045/050 | Batch 250/003 | Cost: 12510.6064\n",
"Epoch: 045/050 | Batch 300/003 | Cost: 12465.5566\n",
"Epoch: 045/050 | Batch 350/003 | Cost: 12111.4629\n",
"Epoch: 045/050 | Batch 400/003 | Cost: 12435.2578\n",
"Epoch: 045/050 | Batch 450/003 | Cost: 12433.7461\n",
"Time elapsed: 5.40 min\n",
"Epoch: 046/050 | Batch 000/003 | Cost: 12598.7734\n",
"Epoch: 046/050 | Batch 050/003 | Cost: 12568.2207\n",
"Epoch: 046/050 | Batch 100/003 | Cost: 12853.6328\n",
"Epoch: 046/050 | Batch 150/003 | Cost: 12230.1533\n",
"Epoch: 046/050 | Batch 200/003 | Cost: 12326.4727\n",
"Epoch: 046/050 | Batch 250/003 | Cost: 12770.4814\n",
"Epoch: 046/050 | Batch 300/003 | Cost: 12082.1006\n",
"Epoch: 046/050 | Batch 350/003 | Cost: 11948.0430\n",
"Epoch: 046/050 | Batch 400/003 | Cost: 12462.7773\n",
"Epoch: 046/050 | Batch 450/003 | Cost: 12145.4609\n",
"Time elapsed: 5.52 min\n",
"Epoch: 047/050 | Batch 000/003 | Cost: 12146.9893\n",
"Epoch: 047/050 | Batch 050/003 | Cost: 11917.3779\n",
"Epoch: 047/050 | Batch 100/003 | Cost: 12135.3457\n",
"Epoch: 047/050 | Batch 150/003 | Cost: 11984.8691\n",
"Epoch: 047/050 | Batch 200/003 | Cost: 12437.4248\n",
"Epoch: 047/050 | Batch 250/003 | Cost: 12444.1416\n",
"Epoch: 047/050 | Batch 300/003 | Cost: 12078.9043\n",
"Epoch: 047/050 | Batch 350/003 | Cost: 12138.3818\n",
"Epoch: 047/050 | Batch 400/003 | Cost: 12556.3086\n",
"Epoch: 047/050 | Batch 450/003 | Cost: 12726.3828\n",
"Time elapsed: 5.64 min\n",
"Epoch: 048/050 | Batch 000/003 | Cost: 12927.1035\n",
"Epoch: 048/050 | Batch 050/003 | Cost: 12747.8994\n",
"Epoch: 048/050 | Batch 100/003 | Cost: 12002.6406\n",
"Epoch: 048/050 | Batch 150/003 | Cost: 12093.2988\n",
"Epoch: 048/050 | Batch 200/003 | Cost: 11541.1982\n",
"Epoch: 048/050 | Batch 250/003 | Cost: 12530.8398\n",
"Epoch: 048/050 | Batch 300/003 | Cost: 12200.4463\n",
"Epoch: 048/050 | Batch 350/003 | Cost: 12818.4082\n",
"Epoch: 048/050 | Batch 400/003 | Cost: 12760.9844\n",
"Epoch: 048/050 | Batch 450/003 | Cost: 12186.3496\n",
"Time elapsed: 5.76 min\n",
"Epoch: 049/050 | Batch 000/003 | Cost: 12394.8848\n",
"Epoch: 049/050 | Batch 050/003 | Cost: 12406.0801\n",
"Epoch: 049/050 | Batch 100/003 | Cost: 12390.3223\n",
"Epoch: 049/050 | Batch 150/003 | Cost: 12788.7949\n",
"Epoch: 049/050 | Batch 200/003 | Cost: 12015.3936\n",
"Epoch: 049/050 | Batch 250/003 | Cost: 12259.9609\n",
"Epoch: 049/050 | Batch 300/003 | Cost: 12216.9688\n",
"Epoch: 049/050 | Batch 350/003 | Cost: 12795.6113\n",
"Epoch: 049/050 | Batch 400/003 | Cost: 11885.8955\n",
"Epoch: 049/050 | Batch 450/003 | Cost: 12445.2891\n",
"Time elapsed: 5.88 min\n",
"Epoch: 050/050 | Batch 000/003 | Cost: 12782.9785\n",
"Epoch: 050/050 | Batch 050/003 | Cost: 12291.9814\n",
"Epoch: 050/050 | Batch 100/003 | Cost: 12721.1641\n",
"Epoch: 050/050 | Batch 150/003 | Cost: 12482.5762\n",
"Epoch: 050/050 | Batch 200/003 | Cost: 12581.8125\n",
"Epoch: 050/050 | Batch 250/003 | Cost: 12422.5527\n",
"Epoch: 050/050 | Batch 300/003 | Cost: 12384.3047\n",
"Epoch: 050/050 | Batch 350/003 | Cost: 12031.4541\n",
"Epoch: 050/050 | Batch 400/003 | Cost: 12278.7617\n",
"Epoch: 050/050 | Batch 450/003 | Cost: 12190.8232\n",
"Time elapsed: 6.00 min\n",
"Total Training Time: 6.00 min\n"
]
}
],
"source": [
"start_time = time.time()\n",
"for epoch in range(num_epochs):\n",
" for batch_idx, (features, targets) in enumerate(train_loader):\n",
" \n",
" features = features.view(-1, 28*28).to(device)\n",
" targets = targets.to(device)\n",
"\n",
" ### FORWARD AND BACK PROP\n",
" z_mean, z_log_var, encoded, decoded = model(features, targets)\n",
"\n",
" # cost = reconstruction loss + Kullback-Leibler divergence\n",
" kl_divergence = (0.5 * (z_mean**2 + \n",
" torch.exp(z_log_var) - z_log_var - 1)).sum()\n",
" \n",
" # add condition\n",
" x_con = torch.cat((features, to_onehot(targets, num_classes, device)), dim=1)\n",
" \n",
" pixelwise_bce = F.binary_cross_entropy(decoded, x_con, reduction='sum')\n",
" cost = kl_divergence + pixelwise_bce\n",
" \n",
" optimizer.zero_grad()\n",
" cost.backward()\n",
" \n",
" ### UPDATE MODEL PARAMETERS\n",
" optimizer.step()\n",
" \n",
" ### LOGGING\n",
" if not batch_idx % 50:\n",
" print ('Epoch: %03d/%03d | Batch %03d/%03d | Cost: %.4f' \n",
" %(epoch+1, num_epochs, batch_idx, \n",
" len(train_loader)//batch_size, cost))\n",
" \n",
" print('Time elapsed: %.2f min' % ((time.time() - start_time)/60))\n",
" \n",
"print('Total Training Time: %.2f min' % ((time.time() - start_time)/60))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Evaluation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Reconstruction"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABIAAAACqCAYAAADV0DQZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsnXeAG9X1tp8JLYTwJRA6AUzoHYND7733zo9qOgRCCx0CoffQMQSMKcEEDBgw1fSOgVBtIIQS03sPIWG+P+x37tWsdj3alVYa7fv8s9rRSJo5uk33vOecJE1TjDHGGGOMMcYYY0z78pNmX4AxxhhjjDHGGGOMaSzeADLGGGOMMcYYY4xpc7wBZIwxxhhjjDHGGNPmeAPIGGOMMcYYY4wxps3xBpAxxhhjjDHGGGNMm+MNIGOMMcYYY4wxxpg2xxtAxhhjjDHGGGOMMW1OjzaAkiRZK0mSV5Ik+UeSJIfW66KMMcYYY4wxxhhjTP1I0jTt3guTZCLgVWB1YCzwFLB1mqYv1+/yjDHGGGOMMcYYY0xPmbgHr10C+Eeapv8ESJLkWmBDoNMNoGmmmSbt169fDz6ynDz99NMfp2k6bS2vsa2KY1vVRl+015tvvsnHH3+c1Pq6vmgrcD+sBduqOLZVcTy+F8fje224HxbHtiqOx6zieMyqDffD4hS1VU82gGYG/hX9PxZYMn9SkiS7AbsBzDrrrIwaNaoHH1lOkiR5q+B5tpVtVZiithp/bp+214ABAwqf29dtBe6HtWBbFce2Ko7H9+J4fK8N98Pi2FbF8ZhVHI9ZteF+WJyitmp4Eug0TQelaTogTdMB005b88Zwn8K2Ko5tVRu2V3Fsq+LYVsWxrYpjW9WG7VUc26o4tlVxbKvasL2KY1sVx7YqTk82gN4BZon+//X4Y8YYY4wxxhhjjDGmhehJCNhTwFxJkszOuI2frYBt6nJVxhhjjDEtigpo7LLLLgBcdtllAMw222wAPPTQQ9m5s8wyC8YYY4wxrUC3N4DSNP1vkiT7AHcCEwGXpWn6Ut2uzBhjjDHGGGOMMcbUhZ4ogEjTdAQwok7XYowxxhhjjDHGGGMaQI82gIwxxhhj+gKff/559vi6664D4PLLLwcgScZV9H377bcBeP/997NzHQJmjDHGmFah4VXAjDHGGGOMMcYYY0xzsQLIGGOMaQP+97//AfDyyy9nx6688sqKcy688EIAvv76awB23XXX7LlBgwY1+hJLyccffwzABhtskB17/PHHK86ZYoopAPjjH/8IwJxzztk7F9dC/PjjjwD88MMPAPzkJ8HHOMkkkzTlmowpO1dccQUAN9xwAwC33HJLh3OWW245AI477jgAVl555V66OmNMGbECyBhjjDHGGGOMMabNaSsF0Pfff589/vOf/wzA7bffDsCYMWMAeO+993r/wtqQd955B4Bjjz0WCB6J5557Ljtnuumm6/0LMy3Fd999B8CJJ54IwAcffADAjTfeCATPOsCGG24IwM0331zxHmuuuSYAF1xwQXbsN7/5TYOu2JSJ+++/Hwhez/vuuw8I+VjqhZQNrc4ZZ5wBwGGHHTbBc2UjeZUBtt56a8DeY/Hhhx8CcNpppwEdVT8A888/PwB/+MMfANh+++176eqajxRno0ePBuBPf/oTEPIjzT333Nm5G220EQB77bUXEPIixSohY0xAiszdd98dCGP2ZJNNlp0z44wzAvDwww8DsNZaawFhXF9vvfV652KN6cN8++23AJx66qkAnHnmmQCMGDGuTpYUeq2EZ15jjDHGGGOMMcaYNqctFEBSGQwZMiQ7lveAasdcu+StuBvXanz11VdAZeWTa665BgiVT1555RUA+vfvD1j1YyoZOHAgANdee23V52OlxvDhwzscA7jrrruAkFsDKvu66cjf/va3DsdGjRoFwFNPPQXAggsumD13zjnn9M6F1YmPPvoICIoVKTXUduqtAGpV3n33XQAGDx4MwJFHHglU3v8000wDwLbbbgvA2muvDcA999wDwOmnn56dK+VGX1cAqX1tttlmQFg3xAwYMAAIHj7Zucx88cUX2eN4vO0MKaqHDh1a9flXX301eyzPqP7uvPPOABx99NFAZaU0q4JMX+WTTz7JHktV+NOf/hSAQw45BIAtttgiO0cKoCeffBKA7bbbDoBNN90UgDvuuCM7t6+O6//973+zx5deeikQVMOq1pimKVA5d0rBuM4661S8n1RVyy67bHYsVmWZvoeUrcq5qPa0zz77ACH3YldoHo0jldSfG6Hk8yxrjDHGGGOMMcYY0+a0hQLo7rvvBsIOXDUmn3xyAOaYY45Oz3nzzTcB6NevX92urYyo0onUPbEXL88SSywBdO4BLBPyEsjbK4/u9ddfn53z/PPPV7xGOY/++c9/ApXKMuUjmXjituhmhYnzZMT5RXpKnBtIVY6Uf6Md+c9//gMEBd6DDz6YPffSSy9VnDvTTDMBcNlllwHwxBNPZM91pob59NNP63exvYAUiRDGHSl/hO517733zo7Jw/fzn/8cCEqD2WefvcNnXHzxxQB89tln9brshjJy5EgAjjrqqIrjyrcCQeGTv9+JJpqo4nmATTbZpCHXWRbUJzbeeGMAHn300YrnF1lkkezxnXfeCcBUU03VS1fXeOK57uyzz57g+ZNOOikAW265JRDamBSfWlNVQ2OV/l500UXZc6pMZyVQ+6FcnVKdSkGnfG7Qcc6S93z99dcHwnzXjsTr7S+//BKANdZYA+haladcicrHKdWKFAQQ1hB9JYeiFLLKoQShvYl8W4v/f+2114CQU1aqDv2/yiqrZOdOPfXUAPz+978HgnroV7/6VQ/voufo90m1713rI6mZdG41Vl99dQBmmGEGIChkIajLtE5r5z4qYrVevOaOeeGFF4DqUUfVVGd53nrrLcAKIGOMMcYYY4wxxhjTDbwBZIwxxhhjjDHGGNPmlDo2RXLGnXbaaYLnSqqshGnVkPz5qquuAoKEcr755svOkcS5HZNIH3zwwUCQkFZDoXQq/37AAQcAIZygbEgiCiFpXrVSv0WJk4XKRiqN21f417/+lT3+4Ycfan79vPPOC4TvRjJolVmE8oUv1YKS85544okAPPDAA0CQi8KEkxzH5ZfzUtxf//rXQAj1bHWUxFJJGwHefvvtqucedNBBAJxyyind+qwdd9yxW69rFk8//XTF/5qzrr766uyYEojmkV0XWGCB7NiKK65Y70tseeLEx0qQrUTp6mfnn38+EBIXQ1hTtAPvvPMOUBkOKCaZZBIgzI9xQn+FQOST/I8ZM2aCn5WfG/bYY4/s8S9+8QsAttpqq2I3YDIUtjLbbLNlx1qprR5//PFAmN80Py299NLZOfnQP4XVKATqxRdfzJ5rhRCbevLII49kjzXnx3P/hFhyySWBEJYZJ5/Ve/eVEDCFNCtBNtS3QMS9997b4ZgKcKigQhwm1Syqfd9KVqzffflweoCFFloICL/vZEfNmfqtDLDCCisA8MEHHwAwevToulx7K/PXv/41e9xVqpSiqKhJvE/RyDWZFUDGGGOMMcYYY4wxbc4EFUBJklwGrAd8mKbpguOPTQ0MBfoBbwJbpGna61kz1113XaBSGdATtFP+xhtvACF5U4wUMDpn2mmnrctnN5Mff/wR6JjgWN7OuNShHs8zzzy9dHWN5fXXX88e90T5Uw2VEjYdkRcm9qgryZnKK6utSQG0/PLLZ+e2iwIvVjJp91/JMOPSpZ0h+0nlodLum2++eXaOkhOWjdtvvx2A7bffHuha9SUv1sknn9z4C2sh1FbkIb711lsLv/aYY44BKlVPraQUaDSymUorQ1D+CHnRY3VKOyLlTzXlzv777w+EZLKx2ud3v/td1fe78cYbO/0sJbRV262mEj3hhBOAoDCabrrpurz+MpFXc8hTrmSfMVK5y7suVAQBQqEFJSSVJzoeC+M23gykCoCQaF8ceeSRQGWi3jwq3b3bbrsBlf1Riot2ROuk7qhIpPqop+KlLGgefPbZZyd47uKLLw7AsGHDOj3nmWeeAYI
"text/plain": [
"<Figure size 1440x180 with 30 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"\n",
"##########################\n",
"### VISUALIZATION\n",
"##########################\n",
"\n",
"n_images = 15\n",
"image_width = 28\n",
"\n",
"fig, axes = plt.subplots(nrows=2, ncols=n_images, \n",
" sharex=True, sharey=True, figsize=(20, 2.5))\n",
"orig_images = features[:n_images]\n",
"decoded_images = decoded[:n_images][:, :-num_classes]\n",
"\n",
"for i in range(n_images):\n",
" for ax, img in zip(axes, [orig_images, decoded_images]):\n",
" curr_img = img[i].detach().to(torch.device('cpu'))\n",
" ax[i].imshow(curr_img.view((image_width, image_width)), cmap='binary')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### New random-conditional images"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Class Label 0\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAABSCAYAAABwglFkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJztnXl8VOX1/983IYQQNkGJoCggCNqKCyiuX4tlcUctbhWXUqWtW1VE6oKK+nL/SVuta61iRStad4u0FUHcEFBBBUFBBGTfCiYCWe7vj8vnzJDEkGSSmclw3q8Xr0mGJHPPfZb7nM85z3mCMAxxHMdxHMdxakdWqi/AcRzHcRynIeOLKcdxHMdxnATwxZTjOI7jOE4C+GLKcRzHcRwnAXwx5TiO4ziOkwC+mHIcx3Ecx0kAX0w5juM4juMkQEKLqSAIjg2CYG4QBF8HQfCHuroox3Ecx3GchkJQ26KdQRBkA/OAfsASYBpwdhiGs+vu8hzHcRzHcdKbRJSpQ4CvwzBcEIbhFuAfwMC6uSzHcRzHcZyGQaMEfnc3YHHc90uA3uV/KAiCocBQgPz8/J7du3dP4CNTx8KFC1m9enVQ2f9luo2ZYh/AjBkzVodhuEv59zPFxh25n0Lm25gp9oGPRdzGBkFVNm5DGIa1+gcMAv4a9/25wANV/U7Pnj3DhsrWa9/ufcl0GxuyfWEYhsD0MINt9H6649jYkO0LQx+LodvYIKiujYmE+b4DOsR9v/vW99Ka0A92dhzHcRynDklkMTUN6BoEQacgCBoDZwGv1s1lOY7jOI7jNAxqnTMVhmFJEASXAhOAbOBvYRh+kegFhWFIEGw/PFkVmzZtYsWKFQCMGTPG3gPo0qULP/vZzwDo0CES1ho1it2GRD/bcRwnEygpKQFg8+bNrFq1apv32rVrB0B+fn5qLi4BSktLycqKdASf7zMD9ct169bxzDPPADB9+nQA+vTpA8CAAQMoKCgAtn3m1xUJ/cUwDP8F/KuOrsVxHMdxHKfBUffLswRJxFNQPtTq1at59dUo4vjpp58CMWWqdevWzJ8/H4CddtoJgBYtWpin4jipoHwuXyZ5zGVlZdt8H29bJtmZCZSWlvKf//wHgKuvvhqA+fPns2XLFgCys7OBmDI1bNgwLr74YqB+vP26ZOPGjQC8/vrrfPFFFERRlKJXr160bNkS2LH6ZHFxMQD/+9//7BnYqlUrgAbxTNS8uWbNGgDuvPNOXn75ZSD2zF+8OCo6EAQBp5xyChB79tcl6X+3HMdxHMdx0pj0diVqyLp164BIjVLOVE5ODgBr164FYO7cubRt2xaAlStXAtC0aVNyc3OTfbk1Qtd6xRVXADBx4kRbXZ9zzjkAnH/++QDsvvvuDcq7Ki0ttbaTxzhr1izzOtq3bw9Az549Adhjjz3MQ27IhGFIYWEhEHmGAI0bNwagefPm9nVD8BBFaWkpAOvXrwfgk08+Ma9x5513BmC33XYDoG3btqYGNJT2LCsrM6VNnu+yZctYsmQJEBun7733HhDVqPnpT38KwFFHHWWvyjVKl3G6efNmAB544AFGjx4NYHNoaWmptY+uV3bef//9nH322QDsskuFklFpgWy78cYbAXj22WdNkXnjjTcAuOiiixgwYAAQy6XV+GuoqJ9qbn3ooYd4+OGHgSh6A7F7AzFlUfWgJk2aRJs2bZJ2vbVB8+bf/vY3ACZMmMD333+/zc8sXboUgGnTpvF///d/QEx9q8vx1+AXU2VlZcyeHZ1gc9999wGwfPly6wRHHHEEEEuULCkp4YcffgCwpMpdd93VBk66TG7xrFq1ygb6zJkzgehBrAnt3nvvBeDzzz8H4E9/+pMl2qUjGuQaCP/4xz947LHHAPjuu6i6xpYtW+zBrLY866yzABg+fLgtJNOxvbaHJvJXXnmFV155BYgtmPbdd18AOnfubG241157AdF90KI/He3esGED//znPwH4+9//DsCXX35pE7bs0cOqX79+HHvssUDMxiZNmqSlbUpwXb9+PV9++SUA//rXv+z122+/BWJtq9eysjILm73++usA3HTTTZx44okAKZ93NMaeeOIJAG699VZb4Ddp0gSAffbZh169egEx53Ty5MkA7LfffhXCuOmCnDGFff76178C8P3339t408889thjvPnmmwCcfPLJABx55JFA5Jym2+L3x5A9S5cu5Te/+Q0A//3vf4FtF06VoT7+zTffADBv3jwOO+yw+rrUhCksLGTChAkAvP/++0DksO29995A1G4Qa7OuXbtWaPe6bM+G4/I6juM4juOkIQ1WmZJH9dZbbzFs2DAAFi1aBEDHjh3p27cvgL3q5z/44AOWL18OxFal7dq1M49fUmc6JFNKrjzvvPO2UaTKI4/jrbfeAmD06NHcfPPNQMy7TAeKioqA2HVKdv/666/t/2Rfdna2eRFSEJ999lkg8j5+/etfAzSopFGFuwYPHgxEW3fl6Uu1UTh6woQJ9vMtWrQA4NRTT7WQrmTqVIanNaY+++wzAO6++25rW6mOQRDQvHlzINa2UnHGjBnDpEmTALjqqquASElOp5C7FCZts37++ef54IMPgFhIWonNUHH+CMPQxufXX38NRKrdwQcfDMS8Z5HsfrxgwQIARowYAUS26P4fcsghAFx55ZV06dIFiM1JUhfTVUmEWB+87rrrgNi1Z2VlWaqHxl0QBHz11VcAPPLIIwA8+eSTQKRoaL7p3Ts6MU3jNl3QWFSIduTIkRaGrgxdf7NmzQD44Ycf7Of1t9IVjckpU6aYAq4xeNhhh1kb5eXlATBjxgwg6utS3ZRqUJehXFemHMdxHMdxEiD18ksNUXxeKsU111zDhg0bgJi3dMstt1i8W6tT5Ult2bLFyiVoVd6lSxfLy5GXJTUgFV6XPFltTX7rrbcqxHhzc3MrqE7yvMaMGWPJ2oMGDdrm95KNvJwZM2ZYDH/OnDlA5cmPapMmTZrY7+pVnubo0aNNFdA96t69e1onak+YMIELLrgAiCXv5uTkmGestlQbLl++3JK4lUD58MMPm92/+tWvgFheRzLRWLr11luBmCdfWFhoSeZHH300ELWL1Bfluc2bNw+A8ePHm+Jzyy23AFHuSqdOnYDUqsPqc1OmTAFi1zdz5kz7P+WYNGnSxNQ3jbuOHTsC8NFHH5n6I/Ly8kwdV/snO9lZ3r3yg+TZZ2dnm2p2zz33AJF6ptII+j0lpM+aNYvjjjsOwNSedKCsrIyRI0cCVLj/ffv25Y9//CMQlcqBSP1+/vnnAUwtVT+dPXu25eXecMMNAJxwwglpMd9ovrjwwgsBzIbK8tjy8/PtGdm/f38g1p4vvfSSKeFSJps0aVIvuUW1ReNOeVIjR45k2bJlQGzzQ3Z2tt2T+E0wECnoeuZIae3QoUOd2dZgFlO6kXfccQcQm8i3bNliDxRVPt11110r7A7S9x06dLCHWXz1Xi26NIGnovOUXyiqentxcbFdjxZ9/fr1swlbiedKCl27di133nkngE10WqQkC0nGSiy/8cYbrXML2dS0aVPbKDBw4EB778MPPwRiCZGS4desWcNLL720zefccccd7LHHHtv83VSiSUjhVvVXiE1WBxxwgO3wKr+YWrt2rT3gtJhavnw5H3/8MRCbILQYSdbEXlRUZLtGX3jhhW2uvXfv3hYuOvDAA4HIVo0pXaOcn65du/Lggw9u8/c3btxoYz2ViyklYSuMoIdpSUmJjSUtoLp162apBlpMydZFixbx6KOPAjEn4tBDD7WHeCoqcYdhyPjx44Fot2E8LVq0MAdFmyHCMLQHrcLxWgxOnjzZ+rA2EaQD06ZNs/sudJ0vvPCCtZ3YZZddrA3lgGpzyNixYy00/dRTTwFw+OGHWxumar4pKiqynZTaDBG/iFIKRL9+/QC4+OKLLbwlFMqE2HjToniXXXZJi7lUaPxcdtllQLTbVO2okHSnTp1s7Cocrzlz9erVloz/85//HNh281mipH5p7TiO4ziO04BpEMpUaWmpJdaNGjUKiEns++yzjylS5bdCxqOEux4
"text/plain": [
"<Figure size 720x180 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Class Label 1\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 720x180 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Class Label 2\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAABSCAYAAABwglFkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJztnXl4VdXV/z87N2FIggKCVQFRUJShVQFnW6xSwakWJ9pqrRbR1rb2tY4dbNG2arW+VdEO/vSt1qHVOrRYsQWqIo6IgkwWAS00lYoggYAQSO75/XH47nNyEyDJnS/r8zw8IcnNvXudvc8+a3332mu7IAgwDMMwDMMw2kdZvhtgGIZhGIZRzJgzZRiGYRiGkQbmTBmGYRiGYaSBOVOGYRiGYRhpYM6UYRiGYRhGGpgzZRiGYRiGkQbmTBmGYRiGYaRBWs6Uc260c26Rc26Jc+6aTDXKMAzDMAyjWHDtLdrpnEsA7wCfA2qA14EvBUGwMHPNMwzDMAzDKGzSUaYOA5YEQfBuEASbgT8Cp2WmWYZhGIZhGMVBeRp/2wv4d+z7GuDw1Bc55y4CLgKoqqoaduCBB6bxkfnjX//6F6tWrXIt/a7UbSwV+wDeeOONVUEQ9Ez9eanYuDOPUyh9G0vFPrB7EbOxKNiejU0IgqBd/4AzgXti338FuHN7fzNs2LCgWNna9h1el1K3sZjtC4IgAGYFJWyjjdOdx8Ziti8Icn8vJpNJ/y8X2DjduWxMR5n6D9An9n3vrT8zDKMVJJNJnAsDHn01DKPtBG3I/U0mkyQSiSy2prDQtWloaPA/S7W/rKzljJ9kMrnd3xsR6Vyh14H9nXP7Ouc6AF8EJmWmWYZhGIZhGMVBu5WpIAganHPfAv4OJID/C4JgQcZatg3kKb///vsAPP/88wwdOhSAAw44AGjudZciQRCwadMmABobG4FI3ejYsaOPJIololD0pP5tSakpFlu2RX19PQDPPfccAFOmTKFbt24AnHjiiQAMGjQIgE6dOhWNveq7xsZGNmzYAIR5BgAff/wx++23HwA9evQAilOF07hcv349U6dOBeB3v/sdENpz6aWXAnDccccBxT0HqT/Xrl0LwJIlS9i4cSMAvXv3bvK1oqIiDy0MUTudc34uVD8lEgk6duzofx9/fbHcVzuitraWDh06ANEzYPPmzf77yspKALZs2QLARx99RKdOnQDYbbfdAPzfb0slL4VrpTERJxsrAuks8xEEwWRgcobaYhiGYRiGUXSk5UzlEkVJP/7xjwG4++67gdDr7t69OwA//elPARg3blxJeNQirkLNnz8fgBtvvJFZs2YBsGbNGiCKTnr27MmYMWMA+P73v+9/lktFIFVpqq+v9zbU1tYC+O/feOMNpkyZAsCuu+7q2yv+858wFU8Kx1FHHeUVHL2+UJUAXYeamhquvfZaAF544QUANmzYwCc+8QkgskPf77XXXrluartRNPzOO+9w5513AjBt2jQA1q1b52266qqrABg7diyAVw4KGd1T//53uHH5kUce4Te/+Q0Aq1at8q/78MMPgUhZ7NWrVy6bmTHq6+t5/fXXAXj00UcBeOWVV/joo4+ASJG67bbbADj44IPzpjTGFafy8vBRpv6CKEdIvxNBEDRTK8rKygpeMZVtH3zwARDeb//973+BaP7T165du3q71XeVlZV+Ptpll12AaL7ZY489/Ot1bcrLy5s9RzP5XG2pD1pDPAds3bp1QKiAA7z33nvMnTsXgGeffRaAf/7zn/41nTt3BqJnyYQJExg2bFg6ZkTtz8i7GIZhGIZh7KQUhTK1ZcsWZsyYAcC9994L4NfwIfK8lcMwZswYn59RzMjbnjt3LtdcE57W89prrwGhGtDSWjDA8uXLmThxIgBLly4Fwohaa+jZQpFgY2OjV53Wr18PhOpZTU0NAG+//TYAf/vb3wBYtmyZVx4VWZWXl/tIUe+lPk8mk+y7774AXH311UCodhSSOqW+efrppwG49NJLvcLWtWtXAIYMGcKhhx4KhJEhwKJFi4BQtZHimhpZFwqycebMmQBccsklvv3K04BIiZRKqu+/+c1vFlSfxVH0q8j/8ssvB0JVUWNaSkEikWD58uVAqLJCpCwWutohlM/3wAMP8Itf/AII70sI+1n39ooVKwC44oor/OtzraKqb+K5ehqLyuFyzjVTOuJ/JzVVfdmxY0evWuQzD2x7yEaNycmTJ3sVUbYNGDAACOcW5RAffPDBAHTu3NnPJbJfucfr1q2juroaiJ47vXv39jlWuk8zqSZrTLX1euvvli5dyn333QfA3//+dyBcAZBt6n9dm02bNvlx/s477wDhc0k5rOn2e2HO0imUl5f7QaCvulAVFRX+wTpu3Dgg7PhtSbyFjDpdSbwPPfQQEErq7733HhA9pIIg8BO1Brom97iM/eqrrwLhksTee++dlXbrs1566SUAjjjiCH/TxbfjallSS5W6UQcPHuwfsPq76upq72Dp/bWssnTpUi/dauns6KOPpm/fvtkwr13IcfzlL38JhDfy+eefD8APfvADIEzI1s29cuXKJn/3xhtv+CUjLa0UmuMh5/aOO+4AQkcw7kQJjQH1n8b1WWedxZ577pmLprYZ3W9yGpYsWQLA8OHDOfbYYwG8sztt2jSeeeYZAB5//HEATj75ZKDw+iwVzTmzZ88GYOLEif4Bq+CrR48ePpVA9+m8efOAcCnlnHPOAbLvOKY6URpriUTCJ1K31Ia40wVQV1fn56Lp06cD4bwzePBgAE455RQgSs4uBIIg8I7fY489BsCMGTN8X2muOOqoowAYMWKEd3L1DIw/M3Qt1MfLli3jiSeeAKLgdfjw4ZxwwglN3iOTxJPfoX3jRw6wNvLU1NT495Og0q9fPwAWLFjggwG9Zv78+Rkbt7bMZxiGYRiGkQZFIds453zUcNhhhwGRPDl27FgfBcoDLSsr8xF/sZUIgEjGffjhh4FQWld0pQihc+fO3hvXspGWGrTsCTTbMpwN5NlLZUgkEv7z4ttzP/WpTwGR0iLlyTlHnz59mvwubp/eX2rUZZddxsKF4XnasvnOO+/klltuyZaJrUZ2q62Sjq+77jrOO+88IFLkAKqqqoAoAV3jdtKkSdTV1QHRNmbJ8IWC5HQt7cVVyJaQkiCJfdasWV4FKKTlsPXr13PPPfcA+HHWpUsXIFyaPOaYY4CmS9Iql6B5Kb5Fv5BRH2o5etOmTejYj5EjRwKhyqEE/FtvvRWISl88+OCDfkNBtpfHUksb6PN2NLenKlObNm3ySdxvvfUWEKnmEI1FbeIpBJLJpFdVNA+Ul5f7kipnnHEGAAcddBAQqqYaey3dW/qdrl1lZSVvvvkmEKnkjY2Nfgxkg7YUWo2jNu+6664MHDgQgHfffRcIFUZdg8997nNAlGQ/adIkJkyYAERzkcZ/JigeD8MwDMMwDKMAKQplCqI10VNPPRWIFI/Ro0f7tVF5rMlk0nueqQUtCykCTkWeutaStWVz9erVPilwn332AUKFTv/XWrpyV+LKlCKQ3XffPWvt1jXVdtOysrImBfUA+vbt63O2Uo8oSCQSXqGJK4mpfSUbxo8fz5VXXglEytukSZO4+eabm3xmPlAekSL5iy66CAhzaOKKVCrqJ/VpbW2tz9tRf1ZVVRXU+NW1V9917NixWaRXVlbm+zte+BJCVUORdSHkNmrOuOeee/xGF9koleL444/3/agxvtdee/l+l23ZVIIzSWoy/ejRoxk1ahQQzT+77LKL34KuhGcpU4sXL253InFbae82fd0zGmPV1dW+0LMUjZdeesnnhd1www0AnHTSSUBhlPAIgsBfZ6mfvXr1YvTo0UCY3wSRgppIJFo1V2gMT5s2zb+vNsoceuihWVVW2/tMVr937dqVww8/HMDnTffs2dM/J9Tfena+//77TUpnQGaLI+d/BmslmrAlKWvS7tGjh79o6pT4gzg1o7+QHkapqG1KHPzhD38IwJlnnulfI4fEOecfstqxp2WhOJ/85CcBsr6TD5pObrJFE2y3bt3Svvbq5yF
"text/plain": [
"<Figure size 720x180 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Class Label 3\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAABSCAYAAABwglFkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJztnXl4VdX1v9+ThIQZJxIDYVAmtQoiVESpQxGnVn3Uatuntj4Oda7Tz87V1mq1Wv22zrVatVorji1oq62KI2icGBQRK4gVBcMYkCHj+f1x+axzchOm3OTek8t6nyfPTXKnvc4ezl6fvfbaQRiGOI7jOI7jOK2jINcFcBzHcRzH6cj4ZMpxHMdxHCcDfDLlOI7jOI6TAT6ZchzHcRzHyQCfTDmO4ziO42SAT6Ycx3Ecx3EywCdTjuM4juM4GZDRZCoIgiOCIJgbBMGHQRD8pK0K5TiO4ziO01EIWpu0MwiCQuADYAKwEHgD+HYYhu+1XfEcx3Ecx3GSTSbK1L7Ah2EYzg/DsBaYCBzbNsVyHMdxHMfpGBRl8N6+wCexvxcCY9JfFATBmcCZAN26dRu12267ZfCVuWPBggUsXbo0aOm5fLcxX+wDeOutt5aGYdg7/f/5YuO23E4h/23MF/vA+yJuY4dgUzY2IQzDVv0A3wDuiv39XeCWTb1n1KhRYUdlQ9k3e13y3caObF8YhiHwZpjHNno73XZs7Mj2haH3xdBt7BBsqY2ZLPN9CvSL/V2x4X+O4ziO4zjbDJlMpt4AhgRBsEsQBMXAt4DJbVMsx3Ecx3GcjkGrY6bCMKwPguB84N9AIXB3GIaz26xkTt4TbthJGgSbX452HKf9UF9sbGykoCDlY3u/dJKO2m1tbS0A9fX1dO7cGYDCwsKsliWTAHTCMPwX8K82KovjOI7jOE6HI6PJlNM+aLa9ObbGcwzDMOeeZroXUV1dDcCyZctYuXIlAP379wegR48edO3aFYg8jFyXf2toaGgAIlvXrFnDJ5+kNr/+73//A2DFihX06tULgP333x+AnXbaCci+V5UJjY2NQMor1O9FRamhpbCwsEPVWzr19fUArF69GkjVndpqjx49gFRd19XVAbDzzjsD0Lt3apNa586dW2y/ub4mqqd169YBMG/ePABWrlxp/VS2DBgwgJKSEiD35d4aZOOSJUuAyMZ3332XF154AcDq8rPPPrO+Wl5eDsBRRx0FwKmnnsr2228PdCz784HGxkbWr18PwOzZqYWvyspKAKZMmcKyZcuA1FgKqfHm4IMPBuDyyy8HsLprb/w4GcdxHMdxnAzoMMqUvKWamhog8u5feuklXnzxRQA++ugjIOUpDhs2DIBjjjkGiDz/0tJSiwnINrIhrjxJwZAHDJiXKwoKCux1a9euBWD9+vXm8UrB6datG5BSBfRckuIfVIbi4mIAU2Xq6+t56623APjPf/5jr919990BOOigg4BItclV/W2OMAytnqS6yRuePn26ecNz58611/Ts2ROA73znOwCccsopQMrWJNRZS6gPqr/9/e9/B1J1J6VD12HIkCFm07hx4wDo0qULkNx6bGho4IsvvgDg4YcfBuBvf/sbkKpPecp6DILA+uCOO+4IRH1y4MCBDB8+HIB9990XSI1B/fr1a/L6bBKGoakwb775JgAPPfQQkFJthBSaCRMmMH78eAD69OkDRH04qW0UojF15syZANx1110AvPbaa6ZW6TpA1B7VZ1999VUAJk6cyGOPPQZEynku0f1j5syZ3HjjjQD84x//AFIKOKRsT1/hCILA1NR99tkHgGuvvRaI2mauUZk1fnz66af861+pSKJ7770XwBR+iBR82d3Q0GB1e9xxxwFw4IEHtn/B6SCTqYaGBj777DMAbrvtNgC7McUHt/jE4b33UqfavPzyywAcf/zxAFxwwQVUVFTY67KB5Ob4oxqNGsGaNWvsBqyJ4nbbbWefsXjxYgDeeOMNABYuXGhLKZo4Dhw4EEh1eP1eWloKJGu5JX1SteOOO9rESZOqyspKu4FpIvzDH/4QgEGDBtl7k4DqdeXKlcyaNQuAZ599FoDly5cDqQmu5OYhQ4YAqeUHLR9NnToVgL322guAQw45JFE2irq6OmbMmAFEMrpuVuvXr282gH/wwQcmy3/1q18FsMnFYYcdxq677gpAp06d2r/wW0hjYyMffPABEE2iZHNLNjY0NNgYpLYge6qqqnj99deByFE45JBD+Na3vgXADjvsAGR/UqJJ79KlS4FofFm+fLlNJP/73/8CKYf1r3/9KwAnnXQSAF/+8pcBGDx4sDlFSZscqzyy7eOPPwaiJVtouhyt12sSJqfh3Xff5Y9//CMAV111VZPPziZqd7oHHHvssXz++edNnhNBEDRrU0EQWN3qM37yk9SRuvfccw8DBgxov8K3QEsbkNR/ZNfEiROZOHEiEDkvWsY79NBD7f4Wd340CZ4zZw6QvclUslq/4ziO4zhOByPRypRmrvPnz+d3v/sdAM888wwQBQ526dKFESNGAJG3tGbNGubPnw80Dz6cMWMGZWVlAFn3/CVdQrRcJzuqqqpMTVu4cGGT15SXl5tq9emnqbyo9fX1tlwiz//BBx8EUkGvxx6bOibxnHPOAVJLaklRpoTKU1JSYorMqaeeCqS8Sak68qIkZR9xxBHsscce9t5cEIahLcfK47377rtNhdAyz9ChQwEYP368qTDyeF966SVbIlN7feWVV4BUW5ZqkQTUF5csWcIdd9wBYCqcVI6SkhJbapYys3r1apPi33nnHSBSsmbPns3pp58ORMsOSQi8LygosLFByoU8ZsC2Xus1dXV1Fqx9yCGHANHy3ezZs5k+fToQLU88//zzFn6gZaZst2PZpUeNTX379rX6rKqqAlLL0VrSnTw5lUpQY9WBBx7I3nvvDcAuu+wCJEdlVFs69NBDgWjsnD59uo2nqqcddtjB7P73v/8N0ET1Uf/M5Rgqxezuu+8GolACiJQyXfvS0lLGjEmd7qalyRkzZphao7Ervgko28pUS9cyPZxlu+2248QTTwSiFYpBgwYBUFZW1qz9Ll26lOeffx6I7v3ZwpUpx3Ecx3GcDEi0MqXZ87vvvmsxU/IKjzjiCADOPPNMBg8eDERe1hdffMHbb78NRGqGZsHV1dVNFKJsoO/TY3FxsZVVHsWaNWuaxX5J1SgvL7f3yoPv0qWL/U8zcQWTVldXm9c8YcIEAEaOHGnXIGkKFURevhSn66+/nilTpgBRPNGHH34IwOOPP26qXHrdtzW6xqqTeHJDee5SBqdPn25q0te+9jUgCrqOe1GKk+vbt68pE2rfUgCkXiWNdevWWSyf7JHNY8aMMfVN9TlgwADzjBWrovijlStXmmqjgOyysrKct8+CggJLbSBbFZtRVFRkGyEU+zZ8+HAL4JXXLKZOnWrqs+q2rq7O6rctYm+2Nu1JEARN4hUBDjjgAKDpuKI4lOLiYrseUtDUF6dPn27jzp577gnACSecYMpsLutS3y3V8OKLLwZSdqWnq1i3bh1PPvkkEG2okBIUBIFtgsmlPVKdzj77bACmTZtm6osCy0844QQAzjjjDPr27QtEZV62bBlXX301EKlvqqekxGfKRsU1H3744facYk67d+8OpPqObNO4XFlZyapVq4BohSdbJHoypYFmt912s+BVNZavf/3rQKoRxRsLpHZraPeFntPEZJ999sm6pN7SjVg3UTXiiooKa9h6VKMpLCy098YHKUm0Gtg0MBYUFNjgr07WUdANuqyszCaCCgbWbo4wDO06nHXWWUCqo7XHQKdBN30nZjz/iZaNzz//fJs4aFKhthbfkalJxTPPPGNBvloe08nq2uWXNHbeeWdbPtAy7Je+9CUgZbM2PmjCUVpaam1cS2Vajn/iiSdsqVCD58EHH2wT5VzduIIgsHqXPeqL69evtw0fmkANHTrU7FV9a7LUq1cv65dauhg0aJDVb1s4AZlcJ5VDTgxgN2E9qq9BlM9Hm2QmTZpkNy3t/tt9990Tt2wLTZdn1Rbl2EydOtU2VGjyK+J
"text/plain": [
"<Figure size 720x180 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Class Label 4\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 720x180 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Class Label 5\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 720x180 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Class Label 6\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 720x180 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Class Label 7\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 720x180 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Class Label 8\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 720x180 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Class Label 9\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAABSCAYAAABwglFkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJztnXmUlMXVh5+aHXBYFGRRFDS4gDsEIca4JYKaaOKeHJW4RD3GJEZNXGL0S4Sox0TNMZ4cWb5EkYhbYqJ87gguUVTMolEWFxCRJYzgMMrADF3fH83vdjMgDPRM99vNfc7hwDTd03Xfqrfeur9761aIMeI4juM4juNsHWWFboDjOI7jOE4x44spx3Ecx3GcHPDFlOM4juM4Tg74YspxHMdxHCcHfDHlOI7jOI6TA76YchzHcRzHyQFfTDmO4ziO4+RAToupEMLIEMLsEMI7IYQr26pRjuM4juM4xULY2qKdIYRyYA7wNeBD4FXg2zHGt9queY7jOI7jOMkmF2VqKPBOjPG9GOMaYDJwQts0y3Ecx3EcpzioyOGzOwELsn7+EDi45ZtCCOcD5wN06tRp8F577ZXDVxaOefPmsWzZsrCx/yt1G0vFPoCZM2cuizH2aPl6qdi4LY9TKH0bS8U+8HsRt7Eo2JSN6xFj3Ko/wMnA+KyfzwR+t6nPDB48OBYr69q+2etS6jYWs30xxgi8FkvYRh+n246NxWxfjH4vRrexKGitjbmE+RYCfbN+3nnda47jOI7jONsMuSymXgUGhBD6hxCqgNOBv7VNsxzHcRzHcYqDrc6ZijE2hxAuBp4AyoH/jTH+p81a5jiO4ziOUwTkkoBOjPH/gP9ro7Y4juM4juMUHTktpoqVuK621urVqwGorq4mhM0n6zuO4ziO47TEj5NxHMdxHMfJgW1GmWpqagLgww8/5J///CcAnTp1AmDo0KF07dq1YG1rDalUar2fy8qKfx0shVBbS4H1FMJSsNHZNtD92dzcDGRU76qqKqqqqgCKTv3+5JNPAHjggQc4/fTTAdhuu+0K2STHSSwltZjShDZ//nweeughAGbPng3Ap59+CsDChQtZunQpAF/4whcAuOiiixgxYgSQjAe4JuT58+cDcPvtt/P4448D0NjYCEDv3r1paGgA4MQTTwTg5z//OQAVFcns1pbhVfXNM888wyuvvALAe++9B6TtrKysBODgg9O1YI866igABg8ezC677AIko79ai+x+4YUXABg7dizPPfcckOnXQYMGATBu3DhU5K6YHsJr1qwB4KOPPgJg0aJF9OzZE4CddtoJoGgXF2Lt2rVAZvzec889/OUvfwFg2bJlQDp1ANL35k033QRAhw4d8t3UrUJzzTe+8Q0gPR9dcsklAEyZMgWAr3zlK0Bx9aHmn/r6esaOHQvAn//8ZwC6detGr169ADjllFMAOOSQQwCora1NlJ3ZTmjLdiWpne2F5tE333yTN954A8Dmyt13353a2loAampq8tqu4nkSOY7jOI7jJJBkShhbSH19PQC/+MUvgLS30blzZwBOOCF9XODOO+8MwAcffGBqwB577AHAgQcemCiFQ8rZNddcA8CLL75oYcpVq1YBsHjxYluhv/vuu0BGwTn22GPz2t7WEGM0JW3atGkA/OpXvwLSapSuv7yuVatWmcImb1+fGz58ODfccAMAO+ywA5BWqJLolUmpuf/++xkzZgwA77//PpAOPcve8vJyAF577TUAzjjjDJ544gkAunfvntc2bykam5MmTbI+XbAgc9KUlKkjjzwSgLPOOguAgw46yMJGSbr/NkW2qnH77bcD0NDQQMeOHYFMGGzFihUAPPXUU5x//vkA7LPPPvlu7hZTX19vc6YU8hCCefvz5s0DMrZsv/32ibzvslG48kc/+hGQfj5oLtL9l82kSZMATKm66667TIkr1DiNMVp/fPbZZ0D6GaBxprlSc0VFRQWLFy8GMIV/zz33NMW0mFAfSYU64ogjAPj444/tPVKhqqqq2G+//QC4++67Adh1112B9u+74pjBHMdxHMdxEkrRK1Pz5s3ja1/7GpBOLgfo06cPEyZMALBVqla3CxYsMBVAnofUjUIjz+N3v/sdALNmzQJg4MCBfPnLXwYyXv5LL73EvffeC2RyxbRyP+aYYxLjLaptS5cu5a677gJg/PjxQEZR7N+/v+Wvbb/99kA650Tqot4n+xYuXGg5Vl/60pcA6NKli/VrEpAHf+aZZwIZxQnS4xNg3333NXuXL18OwOuvvw6kr9fMmTMBOProo4Hk5UNIQZXSNH36dPOQBw4cCMDhhx9u+W2636Suzpo1iwEDBgCZfKKKigrrxyTZqxywiy++mFdffRVI59kAjB492pQL2XbnnXcCaTX1nXfeATL5cEmyS2h+7NOnj6mp8vYnT57M3nvvDUBdXR2Q6fsOHTqYKpck1q5da3mzF1xwAYCpUSEEs01KTU1NjSlYyolbsmQJANdeey2PPvoogM1J+SaVSpkCvHBh+tS2W2+91a79F7/4RQAOPfRQIG2j+vGxxx4DoEePHnz7298GCmfHlhJjZMaMGQAcd9xxQEaRqqmpsejSvvvuC6Rzo998800Abr75ZgAuvfRSAPr169eu+cRFu5hSiOv444+3B5ceUuPGjeOggw4CMtKeHuqdO3dmzz33BOCwww4DMjJooVm0aBGAJbOKc845xxaMamu3bt2YPHnyeu/TwErCZK3JWRPSDTfcwAMPPLDee5Q4f/LJJ9O3b/qYR4UTKioqbKJTXys8++qrr1poUw/jTp06WV8X0n5NyKeddhqQWQB269aNyy67DICTTjoJSC8clXiuCUMhwMWLF9uCUbK2ErcLSYyR559/HsjYqAfsoEGD+M1vfgOkQ+eQnvA0FlauXAlg4cunn36a4cOHA5kQddeuXW2XbRLG8QcffADAeeedB8CcOXP45je/CcAvf/lLIN1mtVXzzHe+8x0gvWBMwrjcHEOHDgXSDyO1U2OxV69etsB4++23AWxsnnHGGYlaTKmdt99+O1dddRWQCbX37t0bgDFjxtiDWYv4Tz75xBxwhXG1YJw7d645tkOGDAEKE+7TYuo//0kfNNLQ0GBhPT3LZGNZWZkt9uUI3HbbbTzyyCMAXH311QAMGzbM3p9EVq5cyTnnnANkNpFpY8DkyZPNQdN99/bbb3PdddcBmU09+lzLHfFtTTKvoOM4juM4TpFQtMrU3//+dyDtPSlUojDSoYce+rkr7fr6ev773/8CyUvsffDBB4FMiEihryOOOIIuXboAmdX1J598YitvKTjy7pOAQnMPP/wwkK5VIw/x1FNPBTAPolu3bia/yivO9uLlPe62225AWplSSFcJmNmlFAqlAKRSKQth/vvf/wYyoZLrr7/eJHa9lkqlTNX5wx/+AGTUgOyEfYV/C6lMSV168sknOffcc4GM5y6F8c4777R6beqDGKOFvhSe0JhYsGCBhdh33313IB2KyP5s9u/KJwolKBlbYdgrr7zSPOVN9cfLL78MpBXGfG/R3hKkuGSHoUePHg1kwrKQUUV++9vfApkkaKmshUZjRSGta665xuYbhZlffPFFIK3etBxTNTU1ps7pXhTNzc3W/5p/863kZH+fxuaKFSssrLfjjjsCrBci17hTisjEiRNNFdbzc+rUqQAccMAB7W3CVjF27FiL2Eh1U/hWKS/Z7LTTThah0nNR72vvNBBXphzHcRzHcXKg6JQpeQYTJ04E0it2eUfyLDa2ApWKc8stt9hrSSpu2dTUxJNPPglktlcrn6Rz584blA6YPXu2/Vsrb3knhSaVSpkKcd999wFpT1YJuNoqrph+RUXFBopUCMHsk1esRN5XXnnFFBBVs+/SpYvlbmxM3coHK1eu5J577lnvNeUyfOtb39pAoairq+PWW28F0vlDkMkPGzhwIGeffTZQ2GKP6oM5c+YAcMUVV5jSdPLJJwOZHJPOnTvbNZeatnTpUhvX+ltqyD777GP5YFKmqqqqCp5b1NzczBVXXAFkisiqgOVZZ521SUVKeWFSN+bNm2d
"text/plain": [
"<Figure size 720x180 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"for i in range(10):\n",
"\n",
" ##########################\n",
" ### RANDOM SAMPLE\n",
" ########################## \n",
" \n",
" labels = torch.tensor([i]*10).to(device)\n",
" n_images = labels.size()[0]\n",
" rand_features = torch.randn(n_images, num_latent).to(device)\n",
" new_images = model.decoder(rand_features, labels)\n",
"\n",
" ##########################\n",
" ### VISUALIZATION\n",
" ##########################\n",
"\n",
" image_width = 28\n",
"\n",
" fig, axes = plt.subplots(nrows=1, ncols=n_images, figsize=(10, 2.5), sharey=True)\n",
" decoded_images = new_images[:n_images][:, :-num_classes]\n",
"\n",
" print('Class Label %d' % i)\n",
"\n",
" for ax, img in zip(axes, decoded_images):\n",
" curr_img = img.detach().to(torch.device('cpu'))\n",
" ax.imshow(curr_img.view((image_width, image_width)), cmap='binary')\n",
" \n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"numpy 1.15.4\n",
"torch 1.0.0\n",
"\n"
]
}
],
"source": [
"%watermark -iv"
]
}
],
"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",
2019-06-05 23:56:41 -05:00
"version": "3.7.1"
2019-06-05 12:38:36 -05:00
},
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}