rasbt--deeplearning-models
1026 行
84 KiB
Plaintext
1026 行
84 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"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"
|
|
]
|
|
},
|
|
{
|
|
"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 -- Generative Adversarial Networks (GAN)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Implementation of a standard GAN."
|
|
]
|
|
},
|
|
{
|
|
"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 torchvision import datasets\n",
|
|
"from torchvision import transforms\n",
|
|
"import torch.nn as nn\n",
|
|
"from torch.utils.data import DataLoader\n",
|
|
"\n",
|
|
"\n",
|
|
"if torch.cuda.is_available():\n",
|
|
" torch.backends.cudnn.deterministic = True"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Settings and Dataset"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"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:2\" if torch.cuda.is_available() else \"cpu\")\n",
|
|
"\n",
|
|
"# Hyperparameters\n",
|
|
"random_seed = 123\n",
|
|
"generator_learning_rate = 0.001\n",
|
|
"discriminator_learning_rate = 0.001\n",
|
|
"num_epochs = 100\n",
|
|
"batch_size = 128\n",
|
|
"LATENT_DIM = 100\n",
|
|
"IMG_SHAPE = (1, 28, 28)\n",
|
|
"IMG_SIZE = 1\n",
|
|
"for x in IMG_SHAPE:\n",
|
|
" IMG_SIZE *= x\n",
|
|
"\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",
|
|
"class GAN(torch.nn.Module):\n",
|
|
"\n",
|
|
" def __init__(self):\n",
|
|
" super(GAN, self).__init__()\n",
|
|
" \n",
|
|
" \n",
|
|
" self.generator = nn.Sequential(\n",
|
|
" nn.Linear(LATENT_DIM, 128),\n",
|
|
" nn.LeakyReLU(inplace=True),\n",
|
|
" nn.Dropout(p=0.5),\n",
|
|
" nn.Linear(128, IMG_SIZE),\n",
|
|
" nn.Tanh()\n",
|
|
" )\n",
|
|
" \n",
|
|
" self.discriminator = nn.Sequential(\n",
|
|
" nn.Linear(IMG_SIZE, 128),\n",
|
|
" nn.LeakyReLU(inplace=True),\n",
|
|
" nn.Dropout(p=0.5),\n",
|
|
" nn.Linear(128, 1),\n",
|
|
" nn.Sigmoid()\n",
|
|
" )\n",
|
|
"\n",
|
|
" \n",
|
|
" def generator_forward(self, z):\n",
|
|
" img = self.generator(z)\n",
|
|
" return img\n",
|
|
" \n",
|
|
" def discriminator_forward(self, img):\n",
|
|
" pred = model.discriminator(img)\n",
|
|
" return pred.view(-1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"torch.manual_seed(random_seed)\n",
|
|
"\n",
|
|
"model = GAN()\n",
|
|
"model = model.to(device)\n",
|
|
"\n",
|
|
"optim_gener = torch.optim.Adam(model.generator.parameters(), lr=generator_learning_rate)\n",
|
|
"optim_discr = torch.optim.Adam(model.discriminator.parameters(), lr=discriminator_learning_rate)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Training"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch: 001/100 | Batch 000/469 | Gen/Dis Loss: 0.6840/0.7187\n",
|
|
"Epoch: 001/100 | Batch 100/469 | Gen/Dis Loss: 4.5653/0.0418\n",
|
|
"Epoch: 001/100 | Batch 200/469 | Gen/Dis Loss: 1.8552/0.0949\n",
|
|
"Epoch: 001/100 | Batch 300/469 | Gen/Dis Loss: 1.3644/0.1683\n",
|
|
"Epoch: 001/100 | Batch 400/469 | Gen/Dis Loss: 2.5513/0.0578\n",
|
|
"Time elapsed: 0.34 min\n",
|
|
"Epoch: 002/100 | Batch 000/469 | Gen/Dis Loss: 2.1382/0.1542\n",
|
|
"Epoch: 002/100 | Batch 100/469 | Gen/Dis Loss: 1.8133/0.2276\n",
|
|
"Epoch: 002/100 | Batch 200/469 | Gen/Dis Loss: 1.0152/0.4610\n",
|
|
"Epoch: 002/100 | Batch 300/469 | Gen/Dis Loss: 1.2685/0.3756\n",
|
|
"Epoch: 002/100 | Batch 400/469 | Gen/Dis Loss: 1.0637/0.4322\n",
|
|
"Time elapsed: 0.66 min\n",
|
|
"Epoch: 003/100 | Batch 000/469 | Gen/Dis Loss: 0.8237/0.4880\n",
|
|
"Epoch: 003/100 | Batch 100/469 | Gen/Dis Loss: 1.1913/0.3777\n",
|
|
"Epoch: 003/100 | Batch 200/469 | Gen/Dis Loss: 1.3542/0.3576\n",
|
|
"Epoch: 003/100 | Batch 300/469 | Gen/Dis Loss: 1.7944/0.3458\n",
|
|
"Epoch: 003/100 | Batch 400/469 | Gen/Dis Loss: 0.7673/0.5411\n",
|
|
"Time elapsed: 1.00 min\n",
|
|
"Epoch: 004/100 | Batch 000/469 | Gen/Dis Loss: 0.9829/0.4750\n",
|
|
"Epoch: 004/100 | Batch 100/469 | Gen/Dis Loss: 0.7222/0.5458\n",
|
|
"Epoch: 004/100 | Batch 200/469 | Gen/Dis Loss: 0.7310/0.5538\n",
|
|
"Epoch: 004/100 | Batch 300/469 | Gen/Dis Loss: 1.0767/0.5459\n",
|
|
"Epoch: 004/100 | Batch 400/469 | Gen/Dis Loss: 1.1510/0.4849\n",
|
|
"Time elapsed: 1.34 min\n",
|
|
"Epoch: 005/100 | Batch 000/469 | Gen/Dis Loss: 1.0973/0.4719\n",
|
|
"Epoch: 005/100 | Batch 100/469 | Gen/Dis Loss: 0.7951/0.5210\n",
|
|
"Epoch: 005/100 | Batch 200/469 | Gen/Dis Loss: 0.7507/0.5123\n",
|
|
"Epoch: 005/100 | Batch 300/469 | Gen/Dis Loss: 1.0493/0.4371\n",
|
|
"Epoch: 005/100 | Batch 400/469 | Gen/Dis Loss: 1.0945/0.4556\n",
|
|
"Time elapsed: 1.67 min\n",
|
|
"Epoch: 006/100 | Batch 000/469 | Gen/Dis Loss: 0.9199/0.5537\n",
|
|
"Epoch: 006/100 | Batch 100/469 | Gen/Dis Loss: 0.8388/0.5914\n",
|
|
"Epoch: 006/100 | Batch 200/469 | Gen/Dis Loss: 1.1800/0.5136\n",
|
|
"Epoch: 006/100 | Batch 300/469 | Gen/Dis Loss: 0.9946/0.5111\n",
|
|
"Epoch: 006/100 | Batch 400/469 | Gen/Dis Loss: 1.2360/0.4437\n",
|
|
"Time elapsed: 2.00 min\n",
|
|
"Epoch: 007/100 | Batch 000/469 | Gen/Dis Loss: 0.8061/0.5439\n",
|
|
"Epoch: 007/100 | Batch 100/469 | Gen/Dis Loss: 1.9045/0.4171\n",
|
|
"Epoch: 007/100 | Batch 200/469 | Gen/Dis Loss: 0.8996/0.5372\n",
|
|
"Epoch: 007/100 | Batch 300/469 | Gen/Dis Loss: 1.1766/0.4841\n",
|
|
"Epoch: 007/100 | Batch 400/469 | Gen/Dis Loss: 1.2704/0.5148\n",
|
|
"Time elapsed: 2.32 min\n",
|
|
"Epoch: 008/100 | Batch 000/469 | Gen/Dis Loss: 1.1567/0.5361\n",
|
|
"Epoch: 008/100 | Batch 100/469 | Gen/Dis Loss: 1.1407/0.5125\n",
|
|
"Epoch: 008/100 | Batch 200/469 | Gen/Dis Loss: 0.9516/0.4863\n",
|
|
"Epoch: 008/100 | Batch 300/469 | Gen/Dis Loss: 1.0135/0.5792\n",
|
|
"Epoch: 008/100 | Batch 400/469 | Gen/Dis Loss: 1.5229/0.4044\n",
|
|
"Time elapsed: 2.64 min\n",
|
|
"Epoch: 009/100 | Batch 000/469 | Gen/Dis Loss: 1.1099/0.4153\n",
|
|
"Epoch: 009/100 | Batch 100/469 | Gen/Dis Loss: 1.1085/0.5163\n",
|
|
"Epoch: 009/100 | Batch 200/469 | Gen/Dis Loss: 1.7178/0.4965\n",
|
|
"Epoch: 009/100 | Batch 300/469 | Gen/Dis Loss: 1.1021/0.4582\n",
|
|
"Epoch: 009/100 | Batch 400/469 | Gen/Dis Loss: 0.9463/0.5443\n",
|
|
"Time elapsed: 2.96 min\n",
|
|
"Epoch: 010/100 | Batch 000/469 | Gen/Dis Loss: 1.0017/0.4996\n",
|
|
"Epoch: 010/100 | Batch 100/469 | Gen/Dis Loss: 1.2635/0.5341\n",
|
|
"Epoch: 010/100 | Batch 200/469 | Gen/Dis Loss: 1.0603/0.4936\n",
|
|
"Epoch: 010/100 | Batch 300/469 | Gen/Dis Loss: 1.6911/0.4577\n",
|
|
"Epoch: 010/100 | Batch 400/469 | Gen/Dis Loss: 1.1464/0.4903\n",
|
|
"Time elapsed: 3.28 min\n",
|
|
"Epoch: 011/100 | Batch 000/469 | Gen/Dis Loss: 0.9209/0.5570\n",
|
|
"Epoch: 011/100 | Batch 100/469 | Gen/Dis Loss: 1.6830/0.4554\n",
|
|
"Epoch: 011/100 | Batch 200/469 | Gen/Dis Loss: 1.4097/0.4748\n",
|
|
"Epoch: 011/100 | Batch 300/469 | Gen/Dis Loss: 0.8746/0.4929\n",
|
|
"Epoch: 011/100 | Batch 400/469 | Gen/Dis Loss: 1.2066/0.4713\n",
|
|
"Time elapsed: 3.62 min\n",
|
|
"Epoch: 012/100 | Batch 000/469 | Gen/Dis Loss: 1.2052/0.5138\n",
|
|
"Epoch: 012/100 | Batch 100/469 | Gen/Dis Loss: 1.1634/0.4988\n",
|
|
"Epoch: 012/100 | Batch 200/469 | Gen/Dis Loss: 1.2664/0.5030\n",
|
|
"Epoch: 012/100 | Batch 300/469 | Gen/Dis Loss: 1.0607/0.4934\n",
|
|
"Epoch: 012/100 | Batch 400/469 | Gen/Dis Loss: 1.2109/0.4617\n",
|
|
"Time elapsed: 3.96 min\n",
|
|
"Epoch: 013/100 | Batch 000/469 | Gen/Dis Loss: 1.2762/0.4913\n",
|
|
"Epoch: 013/100 | Batch 100/469 | Gen/Dis Loss: 1.4610/0.5104\n",
|
|
"Epoch: 013/100 | Batch 200/469 | Gen/Dis Loss: 1.2449/0.5263\n",
|
|
"Epoch: 013/100 | Batch 300/469 | Gen/Dis Loss: 1.4833/0.4578\n",
|
|
"Epoch: 013/100 | Batch 400/469 | Gen/Dis Loss: 0.9275/0.5474\n",
|
|
"Time elapsed: 4.27 min\n",
|
|
"Epoch: 014/100 | Batch 000/469 | Gen/Dis Loss: 1.0150/0.5682\n",
|
|
"Epoch: 014/100 | Batch 100/469 | Gen/Dis Loss: 0.9510/0.5838\n",
|
|
"Epoch: 014/100 | Batch 200/469 | Gen/Dis Loss: 1.1226/0.5525\n",
|
|
"Epoch: 014/100 | Batch 300/469 | Gen/Dis Loss: 0.9471/0.5699\n",
|
|
"Epoch: 014/100 | Batch 400/469 | Gen/Dis Loss: 1.1766/0.4995\n",
|
|
"Time elapsed: 4.61 min\n",
|
|
"Epoch: 015/100 | Batch 000/469 | Gen/Dis Loss: 1.0230/0.5468\n",
|
|
"Epoch: 015/100 | Batch 100/469 | Gen/Dis Loss: 1.1320/0.5018\n",
|
|
"Epoch: 015/100 | Batch 200/469 | Gen/Dis Loss: 1.1575/0.4664\n",
|
|
"Epoch: 015/100 | Batch 300/469 | Gen/Dis Loss: 0.9513/0.5549\n",
|
|
"Epoch: 015/100 | Batch 400/469 | Gen/Dis Loss: 1.2755/0.5610\n",
|
|
"Time elapsed: 4.94 min\n",
|
|
"Epoch: 016/100 | Batch 000/469 | Gen/Dis Loss: 1.3175/0.4778\n",
|
|
"Epoch: 016/100 | Batch 100/469 | Gen/Dis Loss: 1.0154/0.5763\n",
|
|
"Epoch: 016/100 | Batch 200/469 | Gen/Dis Loss: 1.2173/0.5440\n",
|
|
"Epoch: 016/100 | Batch 300/469 | Gen/Dis Loss: 1.0456/0.5588\n",
|
|
"Epoch: 016/100 | Batch 400/469 | Gen/Dis Loss: 0.9994/0.5651\n",
|
|
"Time elapsed: 5.26 min\n",
|
|
"Epoch: 017/100 | Batch 000/469 | Gen/Dis Loss: 1.2691/0.5545\n",
|
|
"Epoch: 017/100 | Batch 100/469 | Gen/Dis Loss: 1.1967/0.5211\n",
|
|
"Epoch: 017/100 | Batch 200/469 | Gen/Dis Loss: 1.4639/0.5007\n",
|
|
"Epoch: 017/100 | Batch 300/469 | Gen/Dis Loss: 2.0873/0.4222\n",
|
|
"Epoch: 017/100 | Batch 400/469 | Gen/Dis Loss: 1.0368/0.5508\n",
|
|
"Time elapsed: 5.58 min\n",
|
|
"Epoch: 018/100 | Batch 000/469 | Gen/Dis Loss: 1.1890/0.5201\n",
|
|
"Epoch: 018/100 | Batch 100/469 | Gen/Dis Loss: 1.0334/0.5772\n",
|
|
"Epoch: 018/100 | Batch 200/469 | Gen/Dis Loss: 1.0025/0.5564\n",
|
|
"Epoch: 018/100 | Batch 300/469 | Gen/Dis Loss: 0.9041/0.5916\n",
|
|
"Epoch: 018/100 | Batch 400/469 | Gen/Dis Loss: 1.0740/0.5529\n",
|
|
"Time elapsed: 5.91 min\n",
|
|
"Epoch: 019/100 | Batch 000/469 | Gen/Dis Loss: 0.9862/0.5749\n",
|
|
"Epoch: 019/100 | Batch 100/469 | Gen/Dis Loss: 0.9446/0.5723\n",
|
|
"Epoch: 019/100 | Batch 200/469 | Gen/Dis Loss: 1.0151/0.5722\n",
|
|
"Epoch: 019/100 | Batch 300/469 | Gen/Dis Loss: 1.1151/0.5656\n",
|
|
"Epoch: 019/100 | Batch 400/469 | Gen/Dis Loss: 1.7559/0.5744\n",
|
|
"Time elapsed: 6.23 min\n",
|
|
"Epoch: 020/100 | Batch 000/469 | Gen/Dis Loss: 1.0507/0.5639\n",
|
|
"Epoch: 020/100 | Batch 100/469 | Gen/Dis Loss: 1.0424/0.6394\n",
|
|
"Epoch: 020/100 | Batch 200/469 | Gen/Dis Loss: 1.1046/0.5804\n",
|
|
"Epoch: 020/100 | Batch 300/469 | Gen/Dis Loss: 0.9150/0.5456\n",
|
|
"Epoch: 020/100 | Batch 400/469 | Gen/Dis Loss: 0.9545/0.6367\n",
|
|
"Time elapsed: 6.55 min\n",
|
|
"Epoch: 021/100 | Batch 000/469 | Gen/Dis Loss: 1.0178/0.5657\n",
|
|
"Epoch: 021/100 | Batch 100/469 | Gen/Dis Loss: 0.8424/0.6332\n",
|
|
"Epoch: 021/100 | Batch 200/469 | Gen/Dis Loss: 0.9367/0.5423\n",
|
|
"Epoch: 021/100 | Batch 300/469 | Gen/Dis Loss: 1.0304/0.6369\n",
|
|
"Epoch: 021/100 | Batch 400/469 | Gen/Dis Loss: 0.8230/0.6324\n",
|
|
"Time elapsed: 6.87 min\n",
|
|
"Epoch: 022/100 | Batch 000/469 | Gen/Dis Loss: 1.0053/0.5809\n",
|
|
"Epoch: 022/100 | Batch 100/469 | Gen/Dis Loss: 1.0413/0.5686\n",
|
|
"Epoch: 022/100 | Batch 200/469 | Gen/Dis Loss: 1.1675/0.5649\n",
|
|
"Epoch: 022/100 | Batch 300/469 | Gen/Dis Loss: 1.1626/0.5896\n",
|
|
"Epoch: 022/100 | Batch 400/469 | Gen/Dis Loss: 0.9832/0.5411\n",
|
|
"Time elapsed: 7.21 min\n",
|
|
"Epoch: 023/100 | Batch 000/469 | Gen/Dis Loss: 0.8595/0.5802\n",
|
|
"Epoch: 023/100 | Batch 100/469 | Gen/Dis Loss: 0.9383/0.6087\n",
|
|
"Epoch: 023/100 | Batch 200/469 | Gen/Dis Loss: 0.8724/0.5889\n",
|
|
"Epoch: 023/100 | Batch 300/469 | Gen/Dis Loss: 1.1330/0.5864\n",
|
|
"Epoch: 023/100 | Batch 400/469 | Gen/Dis Loss: 1.0185/0.5922\n",
|
|
"Time elapsed: 7.56 min\n",
|
|
"Epoch: 024/100 | Batch 000/469 | Gen/Dis Loss: 1.3813/0.4815\n",
|
|
"Epoch: 024/100 | Batch 100/469 | Gen/Dis Loss: 0.9094/0.5802\n",
|
|
"Epoch: 024/100 | Batch 200/469 | Gen/Dis Loss: 0.9704/0.5763\n",
|
|
"Epoch: 024/100 | Batch 300/469 | Gen/Dis Loss: 0.8816/0.5747\n",
|
|
"Epoch: 024/100 | Batch 400/469 | Gen/Dis Loss: 1.0859/0.5688\n",
|
|
"Time elapsed: 7.88 min\n",
|
|
"Epoch: 025/100 | Batch 000/469 | Gen/Dis Loss: 0.9025/0.6197\n",
|
|
"Epoch: 025/100 | Batch 100/469 | Gen/Dis Loss: 0.9933/0.6026\n",
|
|
"Epoch: 025/100 | Batch 200/469 | Gen/Dis Loss: 0.9847/0.5876\n",
|
|
"Epoch: 025/100 | Batch 300/469 | Gen/Dis Loss: 1.2214/0.6016\n",
|
|
"Epoch: 025/100 | Batch 400/469 | Gen/Dis Loss: 1.0922/0.5430\n",
|
|
"Time elapsed: 8.21 min\n",
|
|
"Epoch: 026/100 | Batch 000/469 | Gen/Dis Loss: 1.0883/0.6211\n",
|
|
"Epoch: 026/100 | Batch 100/469 | Gen/Dis Loss: 1.0861/0.6215\n",
|
|
"Epoch: 026/100 | Batch 200/469 | Gen/Dis Loss: 0.9556/0.5680\n",
|
|
"Epoch: 026/100 | Batch 300/469 | Gen/Dis Loss: 0.8929/0.5826\n",
|
|
"Epoch: 026/100 | Batch 400/469 | Gen/Dis Loss: 1.1345/0.6392\n",
|
|
"Time elapsed: 8.54 min\n",
|
|
"Epoch: 027/100 | Batch 000/469 | Gen/Dis Loss: 1.1850/0.6075\n",
|
|
"Epoch: 027/100 | Batch 100/469 | Gen/Dis Loss: 1.0241/0.5448\n",
|
|
"Epoch: 027/100 | Batch 200/469 | Gen/Dis Loss: 1.0992/0.5809\n",
|
|
"Epoch: 027/100 | Batch 300/469 | Gen/Dis Loss: 1.1104/0.6639\n",
|
|
"Epoch: 027/100 | Batch 400/469 | Gen/Dis Loss: 1.1786/0.5524\n",
|
|
"Time elapsed: 8.88 min\n",
|
|
"Epoch: 028/100 | Batch 000/469 | Gen/Dis Loss: 0.9801/0.5434\n",
|
|
"Epoch: 028/100 | Batch 100/469 | Gen/Dis Loss: 0.9323/0.6251\n",
|
|
"Epoch: 028/100 | Batch 200/469 | Gen/Dis Loss: 1.0304/0.5421\n",
|
|
"Epoch: 028/100 | Batch 300/469 | Gen/Dis Loss: 0.8736/0.6080\n",
|
|
"Epoch: 028/100 | Batch 400/469 | Gen/Dis Loss: 0.9776/0.5976\n",
|
|
"Time elapsed: 9.21 min\n",
|
|
"Epoch: 029/100 | Batch 000/469 | Gen/Dis Loss: 0.9565/0.6030\n",
|
|
"Epoch: 029/100 | Batch 100/469 | Gen/Dis Loss: 0.8315/0.6128\n",
|
|
"Epoch: 029/100 | Batch 200/469 | Gen/Dis Loss: 1.0538/0.5952\n",
|
|
"Epoch: 029/100 | Batch 300/469 | Gen/Dis Loss: 0.9743/0.5584\n",
|
|
"Epoch: 029/100 | Batch 400/469 | Gen/Dis Loss: 1.1805/0.5971\n",
|
|
"Time elapsed: 9.54 min\n",
|
|
"Epoch: 030/100 | Batch 000/469 | Gen/Dis Loss: 0.9726/0.6118\n",
|
|
"Epoch: 030/100 | Batch 100/469 | Gen/Dis Loss: 1.0770/0.6107\n",
|
|
"Epoch: 030/100 | Batch 200/469 | Gen/Dis Loss: 0.9959/0.6021\n",
|
|
"Epoch: 030/100 | Batch 300/469 | Gen/Dis Loss: 0.9506/0.5945\n",
|
|
"Epoch: 030/100 | Batch 400/469 | Gen/Dis Loss: 1.0558/0.5752\n",
|
|
"Time elapsed: 9.88 min\n",
|
|
"Epoch: 031/100 | Batch 000/469 | Gen/Dis Loss: 1.3542/0.5565\n",
|
|
"Epoch: 031/100 | Batch 100/469 | Gen/Dis Loss: 0.9010/0.5851\n",
|
|
"Epoch: 031/100 | Batch 200/469 | Gen/Dis Loss: 1.2038/0.6280\n",
|
|
"Epoch: 031/100 | Batch 300/469 | Gen/Dis Loss: 1.2909/0.5850\n",
|
|
"Epoch: 031/100 | Batch 400/469 | Gen/Dis Loss: 0.9105/0.6239\n",
|
|
"Time elapsed: 10.21 min\n",
|
|
"Epoch: 032/100 | Batch 000/469 | Gen/Dis Loss: 0.9069/0.5876\n",
|
|
"Epoch: 032/100 | Batch 100/469 | Gen/Dis Loss: 0.9948/0.6073\n",
|
|
"Epoch: 032/100 | Batch 200/469 | Gen/Dis Loss: 0.8933/0.6262\n",
|
|
"Epoch: 032/100 | Batch 300/469 | Gen/Dis Loss: 0.8818/0.6278\n",
|
|
"Epoch: 032/100 | Batch 400/469 | Gen/Dis Loss: 1.0359/0.5568\n",
|
|
"Time elapsed: 10.54 min\n",
|
|
"Epoch: 033/100 | Batch 000/469 | Gen/Dis Loss: 0.8754/0.6093\n",
|
|
"Epoch: 033/100 | Batch 100/469 | Gen/Dis Loss: 0.9417/0.5723\n",
|
|
"Epoch: 033/100 | Batch 200/469 | Gen/Dis Loss: 1.2760/0.5399\n",
|
|
"Epoch: 033/100 | Batch 300/469 | Gen/Dis Loss: 0.9101/0.6483\n",
|
|
"Epoch: 033/100 | Batch 400/469 | Gen/Dis Loss: 1.1257/0.5565\n",
|
|
"Time elapsed: 10.88 min\n",
|
|
"Epoch: 034/100 | Batch 000/469 | Gen/Dis Loss: 0.8362/0.6059\n",
|
|
"Epoch: 034/100 | Batch 100/469 | Gen/Dis Loss: 1.1056/0.5824\n",
|
|
"Epoch: 034/100 | Batch 200/469 | Gen/Dis Loss: 1.0331/0.5450\n",
|
|
"Epoch: 034/100 | Batch 300/469 | Gen/Dis Loss: 0.8052/0.6274\n",
|
|
"Epoch: 034/100 | Batch 400/469 | Gen/Dis Loss: 0.7200/0.6174\n",
|
|
"Time elapsed: 11.21 min\n",
|
|
"Epoch: 035/100 | Batch 000/469 | Gen/Dis Loss: 1.1204/0.5497\n",
|
|
"Epoch: 035/100 | Batch 100/469 | Gen/Dis Loss: 1.0631/0.5457\n",
|
|
"Epoch: 035/100 | Batch 200/469 | Gen/Dis Loss: 0.8305/0.6092\n",
|
|
"Epoch: 035/100 | Batch 300/469 | Gen/Dis Loss: 0.9248/0.6153\n",
|
|
"Epoch: 035/100 | Batch 400/469 | Gen/Dis Loss: 0.8636/0.6081\n",
|
|
"Time elapsed: 11.54 min\n",
|
|
"Epoch: 036/100 | Batch 000/469 | Gen/Dis Loss: 0.8574/0.6130\n",
|
|
"Epoch: 036/100 | Batch 100/469 | Gen/Dis Loss: 0.7598/0.6124\n",
|
|
"Epoch: 036/100 | Batch 200/469 | Gen/Dis Loss: 0.9497/0.6086\n",
|
|
"Epoch: 036/100 | Batch 300/469 | Gen/Dis Loss: 0.7706/0.5903\n",
|
|
"Epoch: 036/100 | Batch 400/469 | Gen/Dis Loss: 1.0871/0.5830\n",
|
|
"Time elapsed: 11.87 min\n",
|
|
"Epoch: 037/100 | Batch 000/469 | Gen/Dis Loss: 0.9759/0.5872\n",
|
|
"Epoch: 037/100 | Batch 100/469 | Gen/Dis Loss: 0.8353/0.6312\n",
|
|
"Epoch: 037/100 | Batch 200/469 | Gen/Dis Loss: 1.0386/0.5984\n",
|
|
"Epoch: 037/100 | Batch 300/469 | Gen/Dis Loss: 0.8270/0.6393\n",
|
|
"Epoch: 037/100 | Batch 400/469 | Gen/Dis Loss: 0.8449/0.6347\n",
|
|
"Time elapsed: 12.20 min\n",
|
|
"Epoch: 038/100 | Batch 000/469 | Gen/Dis Loss: 0.8785/0.6330\n",
|
|
"Epoch: 038/100 | Batch 100/469 | Gen/Dis Loss: 1.1070/0.6260\n",
|
|
"Epoch: 038/100 | Batch 200/469 | Gen/Dis Loss: 0.8515/0.6265\n",
|
|
"Epoch: 038/100 | Batch 300/469 | Gen/Dis Loss: 1.3786/0.6464\n",
|
|
"Epoch: 038/100 | Batch 400/469 | Gen/Dis Loss: 0.8377/0.5968\n",
|
|
"Time elapsed: 12.54 min\n",
|
|
"Epoch: 039/100 | Batch 000/469 | Gen/Dis Loss: 1.0116/0.6229\n",
|
|
"Epoch: 039/100 | Batch 100/469 | Gen/Dis Loss: 0.8710/0.6094\n",
|
|
"Epoch: 039/100 | Batch 200/469 | Gen/Dis Loss: 0.8696/0.6313\n",
|
|
"Epoch: 039/100 | Batch 300/469 | Gen/Dis Loss: 0.9238/0.5584\n",
|
|
"Epoch: 039/100 | Batch 400/469 | Gen/Dis Loss: 0.8970/0.5884\n",
|
|
"Time elapsed: 12.88 min\n",
|
|
"Epoch: 040/100 | Batch 000/469 | Gen/Dis Loss: 0.7513/0.6290\n",
|
|
"Epoch: 040/100 | Batch 100/469 | Gen/Dis Loss: 0.8653/0.6368\n",
|
|
"Epoch: 040/100 | Batch 200/469 | Gen/Dis Loss: 0.8695/0.6221\n",
|
|
"Epoch: 040/100 | Batch 300/469 | Gen/Dis Loss: 0.8933/0.6093\n",
|
|
"Epoch: 040/100 | Batch 400/469 | Gen/Dis Loss: 0.9048/0.6254\n",
|
|
"Time elapsed: 13.20 min\n",
|
|
"Epoch: 041/100 | Batch 000/469 | Gen/Dis Loss: 0.8156/0.6900\n",
|
|
"Epoch: 041/100 | Batch 100/469 | Gen/Dis Loss: 1.6826/0.6355\n",
|
|
"Epoch: 041/100 | Batch 200/469 | Gen/Dis Loss: 0.9716/0.6079\n",
|
|
"Epoch: 041/100 | Batch 300/469 | Gen/Dis Loss: 1.1645/0.5836\n",
|
|
"Epoch: 041/100 | Batch 400/469 | Gen/Dis Loss: 1.0017/0.5833\n",
|
|
"Time elapsed: 13.52 min\n",
|
|
"Epoch: 042/100 | Batch 000/469 | Gen/Dis Loss: 0.8907/0.6060\n",
|
|
"Epoch: 042/100 | Batch 100/469 | Gen/Dis Loss: 0.8830/0.6369\n",
|
|
"Epoch: 042/100 | Batch 200/469 | Gen/Dis Loss: 0.8182/0.6298\n",
|
|
"Epoch: 042/100 | Batch 300/469 | Gen/Dis Loss: 0.8291/0.6427\n",
|
|
"Epoch: 042/100 | Batch 400/469 | Gen/Dis Loss: 0.8875/0.6115\n",
|
|
"Time elapsed: 13.85 min\n",
|
|
"Epoch: 043/100 | Batch 000/469 | Gen/Dis Loss: 0.9703/0.5961\n",
|
|
"Epoch: 043/100 | Batch 100/469 | Gen/Dis Loss: 0.8935/0.6383\n",
|
|
"Epoch: 043/100 | Batch 200/469 | Gen/Dis Loss: 0.9997/0.5957\n",
|
|
"Epoch: 043/100 | Batch 300/469 | Gen/Dis Loss: 1.0789/0.6338\n",
|
|
"Epoch: 043/100 | Batch 400/469 | Gen/Dis Loss: 0.9160/0.6372\n",
|
|
"Time elapsed: 14.17 min\n",
|
|
"Epoch: 044/100 | Batch 000/469 | Gen/Dis Loss: 0.8453/0.5959\n",
|
|
"Epoch: 044/100 | Batch 100/469 | Gen/Dis Loss: 0.9197/0.6351\n",
|
|
"Epoch: 044/100 | Batch 200/469 | Gen/Dis Loss: 0.8454/0.6329\n",
|
|
"Epoch: 044/100 | Batch 300/469 | Gen/Dis Loss: 0.9702/0.6142\n",
|
|
"Epoch: 044/100 | Batch 400/469 | Gen/Dis Loss: 0.8193/0.6374\n",
|
|
"Time elapsed: 14.51 min\n",
|
|
"Epoch: 045/100 | Batch 000/469 | Gen/Dis Loss: 0.8386/0.5956\n",
|
|
"Epoch: 045/100 | Batch 100/469 | Gen/Dis Loss: 0.9686/0.6224\n",
|
|
"Epoch: 045/100 | Batch 200/469 | Gen/Dis Loss: 1.1623/0.5633\n",
|
|
"Epoch: 045/100 | Batch 300/469 | Gen/Dis Loss: 0.8464/0.6601\n",
|
|
"Epoch: 045/100 | Batch 400/469 | Gen/Dis Loss: 0.9593/0.6157\n",
|
|
"Time elapsed: 14.84 min\n",
|
|
"Epoch: 046/100 | Batch 000/469 | Gen/Dis Loss: 0.7500/0.6090\n",
|
|
"Epoch: 046/100 | Batch 100/469 | Gen/Dis Loss: 0.9146/0.6030\n",
|
|
"Epoch: 046/100 | Batch 200/469 | Gen/Dis Loss: 1.0464/0.6103\n",
|
|
"Epoch: 046/100 | Batch 300/469 | Gen/Dis Loss: 0.8345/0.6603\n",
|
|
"Epoch: 046/100 | Batch 400/469 | Gen/Dis Loss: 0.8401/0.6796\n",
|
|
"Time elapsed: 15.16 min\n",
|
|
"Epoch: 047/100 | Batch 000/469 | Gen/Dis Loss: 1.0640/0.6066\n",
|
|
"Epoch: 047/100 | Batch 100/469 | Gen/Dis Loss: 0.8738/0.5979\n",
|
|
"Epoch: 047/100 | Batch 200/469 | Gen/Dis Loss: 0.8716/0.6292\n",
|
|
"Epoch: 047/100 | Batch 300/469 | Gen/Dis Loss: 0.8200/0.5926\n",
|
|
"Epoch: 047/100 | Batch 400/469 | Gen/Dis Loss: 0.8194/0.6547\n",
|
|
"Time elapsed: 15.49 min\n",
|
|
"Epoch: 048/100 | Batch 000/469 | Gen/Dis Loss: 1.0382/0.6361\n",
|
|
"Epoch: 048/100 | Batch 100/469 | Gen/Dis Loss: 1.2560/0.5894\n",
|
|
"Epoch: 048/100 | Batch 200/469 | Gen/Dis Loss: 0.9200/0.6016\n",
|
|
"Epoch: 048/100 | Batch 300/469 | Gen/Dis Loss: 0.8353/0.6308\n",
|
|
"Epoch: 048/100 | Batch 400/469 | Gen/Dis Loss: 1.0444/0.6147\n",
|
|
"Time elapsed: 15.82 min\n",
|
|
"Epoch: 049/100 | Batch 000/469 | Gen/Dis Loss: 0.9350/0.6576\n",
|
|
"Epoch: 049/100 | Batch 100/469 | Gen/Dis Loss: 0.8670/0.6193\n",
|
|
"Epoch: 049/100 | Batch 200/469 | Gen/Dis Loss: 0.8244/0.6091\n",
|
|
"Epoch: 049/100 | Batch 300/469 | Gen/Dis Loss: 0.8193/0.6365\n",
|
|
"Epoch: 049/100 | Batch 400/469 | Gen/Dis Loss: 0.7594/0.6432\n",
|
|
"Time elapsed: 16.15 min\n",
|
|
"Epoch: 050/100 | Batch 000/469 | Gen/Dis Loss: 1.1243/0.5892\n",
|
|
"Epoch: 050/100 | Batch 100/469 | Gen/Dis Loss: 1.1167/0.5817\n",
|
|
"Epoch: 050/100 | Batch 200/469 | Gen/Dis Loss: 0.8432/0.6398\n",
|
|
"Epoch: 050/100 | Batch 300/469 | Gen/Dis Loss: 0.8544/0.6260\n",
|
|
"Epoch: 050/100 | Batch 400/469 | Gen/Dis Loss: 0.8468/0.6526\n",
|
|
"Time elapsed: 16.48 min\n",
|
|
"Epoch: 051/100 | Batch 000/469 | Gen/Dis Loss: 1.1169/0.6575\n",
|
|
"Epoch: 051/100 | Batch 100/469 | Gen/Dis Loss: 0.8787/0.6160\n",
|
|
"Epoch: 051/100 | Batch 200/469 | Gen/Dis Loss: 0.8586/0.6111\n",
|
|
"Epoch: 051/100 | Batch 300/469 | Gen/Dis Loss: 0.8247/0.6670\n",
|
|
"Epoch: 051/100 | Batch 400/469 | Gen/Dis Loss: 0.8248/0.6445\n",
|
|
"Time elapsed: 16.81 min\n",
|
|
"Epoch: 052/100 | Batch 000/469 | Gen/Dis Loss: 0.8634/0.6250\n",
|
|
"Epoch: 052/100 | Batch 100/469 | Gen/Dis Loss: 0.7513/0.6662\n",
|
|
"Epoch: 052/100 | Batch 200/469 | Gen/Dis Loss: 0.8639/0.6511\n",
|
|
"Epoch: 052/100 | Batch 300/469 | Gen/Dis Loss: 0.8311/0.6408\n",
|
|
"Epoch: 052/100 | Batch 400/469 | Gen/Dis Loss: 0.8495/0.6189\n",
|
|
"Time elapsed: 17.14 min\n",
|
|
"Epoch: 053/100 | Batch 000/469 | Gen/Dis Loss: 0.8787/0.6390\n",
|
|
"Epoch: 053/100 | Batch 100/469 | Gen/Dis Loss: 0.7394/0.6606\n",
|
|
"Epoch: 053/100 | Batch 200/469 | Gen/Dis Loss: 0.7430/0.6043\n",
|
|
"Epoch: 053/100 | Batch 300/469 | Gen/Dis Loss: 0.9093/0.6441\n",
|
|
"Epoch: 053/100 | Batch 400/469 | Gen/Dis Loss: 0.8781/0.6596\n",
|
|
"Time elapsed: 17.46 min\n",
|
|
"Epoch: 054/100 | Batch 000/469 | Gen/Dis Loss: 0.8262/0.6726\n",
|
|
"Epoch: 054/100 | Batch 100/469 | Gen/Dis Loss: 0.8397/0.6483\n",
|
|
"Epoch: 054/100 | Batch 200/469 | Gen/Dis Loss: 0.8543/0.6450\n",
|
|
"Epoch: 054/100 | Batch 300/469 | Gen/Dis Loss: 0.8540/0.6404\n",
|
|
"Epoch: 054/100 | Batch 400/469 | Gen/Dis Loss: 0.8832/0.6416\n",
|
|
"Time elapsed: 17.81 min\n",
|
|
"Epoch: 055/100 | Batch 000/469 | Gen/Dis Loss: 0.8807/0.6754\n",
|
|
"Epoch: 055/100 | Batch 100/469 | Gen/Dis Loss: 1.0622/0.6618\n",
|
|
"Epoch: 055/100 | Batch 200/469 | Gen/Dis Loss: 0.7789/0.6444\n",
|
|
"Epoch: 055/100 | Batch 300/469 | Gen/Dis Loss: 0.9238/0.6198\n",
|
|
"Epoch: 055/100 | Batch 400/469 | Gen/Dis Loss: 0.8936/0.6273\n",
|
|
"Time elapsed: 18.15 min\n",
|
|
"Epoch: 056/100 | Batch 000/469 | Gen/Dis Loss: 0.8266/0.6256\n",
|
|
"Epoch: 056/100 | Batch 100/469 | Gen/Dis Loss: 0.7266/0.6309\n",
|
|
"Epoch: 056/100 | Batch 200/469 | Gen/Dis Loss: 0.9582/0.6389\n",
|
|
"Epoch: 056/100 | Batch 300/469 | Gen/Dis Loss: 0.9875/0.6675\n",
|
|
"Epoch: 056/100 | Batch 400/469 | Gen/Dis Loss: 0.8361/0.6403\n",
|
|
"Time elapsed: 18.47 min\n",
|
|
"Epoch: 057/100 | Batch 000/469 | Gen/Dis Loss: 0.8893/0.6182\n",
|
|
"Epoch: 057/100 | Batch 100/469 | Gen/Dis Loss: 0.8226/0.6915\n",
|
|
"Epoch: 057/100 | Batch 200/469 | Gen/Dis Loss: 0.8826/0.6504\n",
|
|
"Epoch: 057/100 | Batch 300/469 | Gen/Dis Loss: 0.8746/0.6371\n",
|
|
"Epoch: 057/100 | Batch 400/469 | Gen/Dis Loss: 0.8151/0.6252\n",
|
|
"Time elapsed: 18.79 min\n",
|
|
"Epoch: 058/100 | Batch 000/469 | Gen/Dis Loss: 0.8043/0.6610\n",
|
|
"Epoch: 058/100 | Batch 100/469 | Gen/Dis Loss: 0.8699/0.6551\n",
|
|
"Epoch: 058/100 | Batch 200/469 | Gen/Dis Loss: 0.9349/0.6771\n",
|
|
"Epoch: 058/100 | Batch 300/469 | Gen/Dis Loss: 0.9085/0.6367\n",
|
|
"Epoch: 058/100 | Batch 400/469 | Gen/Dis Loss: 0.7508/0.6449\n",
|
|
"Time elapsed: 19.13 min\n",
|
|
"Epoch: 059/100 | Batch 000/469 | Gen/Dis Loss: 0.8304/0.6587\n",
|
|
"Epoch: 059/100 | Batch 100/469 | Gen/Dis Loss: 0.9261/0.6597\n",
|
|
"Epoch: 059/100 | Batch 200/469 | Gen/Dis Loss: 0.8069/0.6239\n",
|
|
"Epoch: 059/100 | Batch 300/469 | Gen/Dis Loss: 0.8897/0.6196\n",
|
|
"Epoch: 059/100 | Batch 400/469 | Gen/Dis Loss: 0.7658/0.6355\n",
|
|
"Time elapsed: 19.47 min\n",
|
|
"Epoch: 060/100 | Batch 000/469 | Gen/Dis Loss: 0.8423/0.6347\n",
|
|
"Epoch: 060/100 | Batch 100/469 | Gen/Dis Loss: 0.8776/0.6197\n",
|
|
"Epoch: 060/100 | Batch 200/469 | Gen/Dis Loss: 0.7769/0.6467\n",
|
|
"Epoch: 060/100 | Batch 300/469 | Gen/Dis Loss: 0.8130/0.6738\n",
|
|
"Epoch: 060/100 | Batch 400/469 | Gen/Dis Loss: 1.2987/0.5990\n",
|
|
"Time elapsed: 19.79 min\n",
|
|
"Epoch: 061/100 | Batch 000/469 | Gen/Dis Loss: 0.7656/0.6286\n",
|
|
"Epoch: 061/100 | Batch 100/469 | Gen/Dis Loss: 0.7893/0.6633\n",
|
|
"Epoch: 061/100 | Batch 200/469 | Gen/Dis Loss: 0.8352/0.6383\n",
|
|
"Epoch: 061/100 | Batch 300/469 | Gen/Dis Loss: 0.8038/0.6312\n",
|
|
"Epoch: 061/100 | Batch 400/469 | Gen/Dis Loss: 0.8129/0.6255\n",
|
|
"Time elapsed: 20.12 min\n",
|
|
"Epoch: 062/100 | Batch 000/469 | Gen/Dis Loss: 0.7961/0.6222\n",
|
|
"Epoch: 062/100 | Batch 100/469 | Gen/Dis Loss: 0.7905/0.6677\n",
|
|
"Epoch: 062/100 | Batch 200/469 | Gen/Dis Loss: 0.8841/0.6281\n",
|
|
"Epoch: 062/100 | Batch 300/469 | Gen/Dis Loss: 0.7918/0.6537\n",
|
|
"Epoch: 062/100 | Batch 400/469 | Gen/Dis Loss: 0.7647/0.6391\n",
|
|
"Time elapsed: 20.45 min\n",
|
|
"Epoch: 063/100 | Batch 000/469 | Gen/Dis Loss: 0.9213/0.6316\n",
|
|
"Epoch: 063/100 | Batch 100/469 | Gen/Dis Loss: 0.8297/0.6621\n",
|
|
"Epoch: 063/100 | Batch 200/469 | Gen/Dis Loss: 0.7627/0.6687\n",
|
|
"Epoch: 063/100 | Batch 300/469 | Gen/Dis Loss: 0.8490/0.6208\n",
|
|
"Epoch: 063/100 | Batch 400/469 | Gen/Dis Loss: 0.8167/0.6312\n",
|
|
"Time elapsed: 20.77 min\n",
|
|
"Epoch: 064/100 | Batch 000/469 | Gen/Dis Loss: 0.8828/0.6541\n",
|
|
"Epoch: 064/100 | Batch 100/469 | Gen/Dis Loss: 0.8488/0.6540\n",
|
|
"Epoch: 064/100 | Batch 200/469 | Gen/Dis Loss: 0.8102/0.6532\n",
|
|
"Epoch: 064/100 | Batch 300/469 | Gen/Dis Loss: 0.9335/0.6742\n",
|
|
"Epoch: 064/100 | Batch 400/469 | Gen/Dis Loss: 0.8492/0.6597\n",
|
|
"Time elapsed: 21.09 min\n",
|
|
"Epoch: 065/100 | Batch 000/469 | Gen/Dis Loss: 0.9883/0.6166\n",
|
|
"Epoch: 065/100 | Batch 100/469 | Gen/Dis Loss: 0.8081/0.6414\n",
|
|
"Epoch: 065/100 | Batch 200/469 | Gen/Dis Loss: 0.9112/0.6121\n",
|
|
"Epoch: 065/100 | Batch 300/469 | Gen/Dis Loss: 0.8161/0.6545\n",
|
|
"Epoch: 065/100 | Batch 400/469 | Gen/Dis Loss: 0.7722/0.6494\n",
|
|
"Time elapsed: 21.43 min\n",
|
|
"Epoch: 066/100 | Batch 000/469 | Gen/Dis Loss: 1.1144/0.6265\n",
|
|
"Epoch: 066/100 | Batch 100/469 | Gen/Dis Loss: 0.9142/0.6447\n",
|
|
"Epoch: 066/100 | Batch 200/469 | Gen/Dis Loss: 0.7862/0.6520\n",
|
|
"Epoch: 066/100 | Batch 300/469 | Gen/Dis Loss: 0.9425/0.6801\n",
|
|
"Epoch: 066/100 | Batch 400/469 | Gen/Dis Loss: 0.8772/0.5920\n",
|
|
"Time elapsed: 21.77 min\n",
|
|
"Epoch: 067/100 | Batch 000/469 | Gen/Dis Loss: 0.8104/0.6160\n",
|
|
"Epoch: 067/100 | Batch 100/469 | Gen/Dis Loss: 0.7382/0.6327\n",
|
|
"Epoch: 067/100 | Batch 200/469 | Gen/Dis Loss: 0.7860/0.6501\n",
|
|
"Epoch: 067/100 | Batch 300/469 | Gen/Dis Loss: 0.9281/0.6206\n",
|
|
"Epoch: 067/100 | Batch 400/469 | Gen/Dis Loss: 0.8101/0.6815\n",
|
|
"Time elapsed: 22.10 min\n",
|
|
"Epoch: 068/100 | Batch 000/469 | Gen/Dis Loss: 0.9310/0.6156\n",
|
|
"Epoch: 068/100 | Batch 100/469 | Gen/Dis Loss: 0.8572/0.6361\n",
|
|
"Epoch: 068/100 | Batch 200/469 | Gen/Dis Loss: 0.7960/0.6109\n",
|
|
"Epoch: 068/100 | Batch 300/469 | Gen/Dis Loss: 0.8748/0.6433\n",
|
|
"Epoch: 068/100 | Batch 400/469 | Gen/Dis Loss: 0.7151/0.6345\n",
|
|
"Time elapsed: 22.43 min\n",
|
|
"Epoch: 069/100 | Batch 000/469 | Gen/Dis Loss: 0.9562/0.6399\n",
|
|
"Epoch: 069/100 | Batch 100/469 | Gen/Dis Loss: 0.9509/0.6178\n",
|
|
"Epoch: 069/100 | Batch 200/469 | Gen/Dis Loss: 0.7511/0.6464\n",
|
|
"Epoch: 069/100 | Batch 300/469 | Gen/Dis Loss: 0.8760/0.6459\n",
|
|
"Epoch: 069/100 | Batch 400/469 | Gen/Dis Loss: 0.8780/0.6006\n",
|
|
"Time elapsed: 22.76 min\n",
|
|
"Epoch: 070/100 | Batch 000/469 | Gen/Dis Loss: 0.8984/0.6479\n",
|
|
"Epoch: 070/100 | Batch 100/469 | Gen/Dis Loss: 0.7896/0.6602\n",
|
|
"Epoch: 070/100 | Batch 200/469 | Gen/Dis Loss: 0.9184/0.6249\n",
|
|
"Epoch: 070/100 | Batch 300/469 | Gen/Dis Loss: 0.7650/0.6631\n",
|
|
"Epoch: 070/100 | Batch 400/469 | Gen/Dis Loss: 0.8468/0.6639\n",
|
|
"Time elapsed: 23.09 min\n",
|
|
"Epoch: 071/100 | Batch 000/469 | Gen/Dis Loss: 0.9176/0.6297\n",
|
|
"Epoch: 071/100 | Batch 100/469 | Gen/Dis Loss: 0.9179/0.6214\n",
|
|
"Epoch: 071/100 | Batch 200/469 | Gen/Dis Loss: 0.8695/0.5816\n",
|
|
"Epoch: 071/100 | Batch 300/469 | Gen/Dis Loss: 0.9253/0.6614\n",
|
|
"Epoch: 071/100 | Batch 400/469 | Gen/Dis Loss: 0.8964/0.6019\n",
|
|
"Time elapsed: 23.42 min\n",
|
|
"Epoch: 072/100 | Batch 000/469 | Gen/Dis Loss: 0.8582/0.6613\n",
|
|
"Epoch: 072/100 | Batch 100/469 | Gen/Dis Loss: 0.8015/0.6448\n",
|
|
"Epoch: 072/100 | Batch 200/469 | Gen/Dis Loss: 0.6486/0.6561\n",
|
|
"Epoch: 072/100 | Batch 300/469 | Gen/Dis Loss: 0.8569/0.6524\n",
|
|
"Epoch: 072/100 | Batch 400/469 | Gen/Dis Loss: 0.8845/0.6389\n",
|
|
"Time elapsed: 23.74 min\n",
|
|
"Epoch: 073/100 | Batch 000/469 | Gen/Dis Loss: 0.8141/0.6423\n",
|
|
"Epoch: 073/100 | Batch 100/469 | Gen/Dis Loss: 0.8862/0.6540\n",
|
|
"Epoch: 073/100 | Batch 200/469 | Gen/Dis Loss: 0.7776/0.6417\n",
|
|
"Epoch: 073/100 | Batch 300/469 | Gen/Dis Loss: 0.8549/0.6078\n",
|
|
"Epoch: 073/100 | Batch 400/469 | Gen/Dis Loss: 0.8241/0.6715\n",
|
|
"Time elapsed: 24.07 min\n",
|
|
"Epoch: 074/100 | Batch 000/469 | Gen/Dis Loss: 0.8562/0.6573\n",
|
|
"Epoch: 074/100 | Batch 100/469 | Gen/Dis Loss: 0.9498/0.5789\n",
|
|
"Epoch: 074/100 | Batch 200/469 | Gen/Dis Loss: 0.7352/0.6670\n",
|
|
"Epoch: 074/100 | Batch 300/469 | Gen/Dis Loss: 0.8090/0.6209\n",
|
|
"Epoch: 074/100 | Batch 400/469 | Gen/Dis Loss: 0.8586/0.6445\n",
|
|
"Time elapsed: 24.40 min\n",
|
|
"Epoch: 075/100 | Batch 000/469 | Gen/Dis Loss: 0.8233/0.6546\n",
|
|
"Epoch: 075/100 | Batch 100/469 | Gen/Dis Loss: 0.9612/0.6318\n",
|
|
"Epoch: 075/100 | Batch 200/469 | Gen/Dis Loss: 0.9021/0.6274\n",
|
|
"Epoch: 075/100 | Batch 300/469 | Gen/Dis Loss: 0.8424/0.6449\n",
|
|
"Epoch: 075/100 | Batch 400/469 | Gen/Dis Loss: 0.8922/0.6487\n",
|
|
"Time elapsed: 24.72 min\n",
|
|
"Epoch: 076/100 | Batch 000/469 | Gen/Dis Loss: 0.8978/0.6371\n",
|
|
"Epoch: 076/100 | Batch 100/469 | Gen/Dis Loss: 0.8162/0.6275\n",
|
|
"Epoch: 076/100 | Batch 200/469 | Gen/Dis Loss: 0.7811/0.5938\n",
|
|
"Epoch: 076/100 | Batch 300/469 | Gen/Dis Loss: 0.7602/0.6409\n",
|
|
"Epoch: 076/100 | Batch 400/469 | Gen/Dis Loss: 0.8538/0.6157\n",
|
|
"Time elapsed: 25.06 min\n",
|
|
"Epoch: 077/100 | Batch 000/469 | Gen/Dis Loss: 0.9253/0.6234\n",
|
|
"Epoch: 077/100 | Batch 100/469 | Gen/Dis Loss: 0.8326/0.6352\n",
|
|
"Epoch: 077/100 | Batch 200/469 | Gen/Dis Loss: 0.8831/0.6306\n",
|
|
"Epoch: 077/100 | Batch 300/469 | Gen/Dis Loss: 0.9677/0.6187\n",
|
|
"Epoch: 077/100 | Batch 400/469 | Gen/Dis Loss: 0.7626/0.6541\n",
|
|
"Time elapsed: 25.40 min\n",
|
|
"Epoch: 078/100 | Batch 000/469 | Gen/Dis Loss: 0.8180/0.6464\n",
|
|
"Epoch: 078/100 | Batch 100/469 | Gen/Dis Loss: 0.8250/0.6614\n",
|
|
"Epoch: 078/100 | Batch 200/469 | Gen/Dis Loss: 0.7809/0.6596\n",
|
|
"Epoch: 078/100 | Batch 300/469 | Gen/Dis Loss: 0.8908/0.6529\n",
|
|
"Epoch: 078/100 | Batch 400/469 | Gen/Dis Loss: 0.9106/0.5921\n",
|
|
"Time elapsed: 25.71 min\n",
|
|
"Epoch: 079/100 | Batch 000/469 | Gen/Dis Loss: 0.7413/0.6357\n",
|
|
"Epoch: 079/100 | Batch 100/469 | Gen/Dis Loss: 0.9426/0.6542\n",
|
|
"Epoch: 079/100 | Batch 200/469 | Gen/Dis Loss: 0.7310/0.6614\n",
|
|
"Epoch: 079/100 | Batch 300/469 | Gen/Dis Loss: 0.8052/0.6333\n",
|
|
"Epoch: 079/100 | Batch 400/469 | Gen/Dis Loss: 0.8847/0.6163\n",
|
|
"Time elapsed: 26.03 min\n",
|
|
"Epoch: 080/100 | Batch 000/469 | Gen/Dis Loss: 0.8031/0.6091\n",
|
|
"Epoch: 080/100 | Batch 100/469 | Gen/Dis Loss: 0.7836/0.6816\n",
|
|
"Epoch: 080/100 | Batch 200/469 | Gen/Dis Loss: 0.8071/0.6535\n",
|
|
"Epoch: 080/100 | Batch 300/469 | Gen/Dis Loss: 0.7776/0.6370\n",
|
|
"Epoch: 080/100 | Batch 400/469 | Gen/Dis Loss: 0.9356/0.6750\n",
|
|
"Time elapsed: 26.36 min\n",
|
|
"Epoch: 081/100 | Batch 000/469 | Gen/Dis Loss: 0.8445/0.6093\n",
|
|
"Epoch: 081/100 | Batch 100/469 | Gen/Dis Loss: 0.8387/0.6331\n",
|
|
"Epoch: 081/100 | Batch 200/469 | Gen/Dis Loss: 0.8961/0.6645\n",
|
|
"Epoch: 081/100 | Batch 300/469 | Gen/Dis Loss: 0.7370/0.6399\n",
|
|
"Epoch: 081/100 | Batch 400/469 | Gen/Dis Loss: 0.8485/0.6403\n",
|
|
"Time elapsed: 26.68 min\n",
|
|
"Epoch: 082/100 | Batch 000/469 | Gen/Dis Loss: 0.9880/0.6108\n",
|
|
"Epoch: 082/100 | Batch 100/469 | Gen/Dis Loss: 0.8161/0.6442\n",
|
|
"Epoch: 082/100 | Batch 200/469 | Gen/Dis Loss: 0.7552/0.6458\n",
|
|
"Epoch: 082/100 | Batch 300/469 | Gen/Dis Loss: 1.0909/0.6478\n",
|
|
"Epoch: 082/100 | Batch 400/469 | Gen/Dis Loss: 0.7957/0.6312\n",
|
|
"Time elapsed: 27.00 min\n",
|
|
"Epoch: 083/100 | Batch 000/469 | Gen/Dis Loss: 0.9428/0.6490\n",
|
|
"Epoch: 083/100 | Batch 100/469 | Gen/Dis Loss: 0.8881/0.6561\n",
|
|
"Epoch: 083/100 | Batch 200/469 | Gen/Dis Loss: 0.9819/0.6062\n",
|
|
"Epoch: 083/100 | Batch 300/469 | Gen/Dis Loss: 0.7503/0.6573\n",
|
|
"Epoch: 083/100 | Batch 400/469 | Gen/Dis Loss: 0.8471/0.6103\n",
|
|
"Time elapsed: 27.32 min\n",
|
|
"Epoch: 084/100 | Batch 000/469 | Gen/Dis Loss: 0.8649/0.6038\n",
|
|
"Epoch: 084/100 | Batch 100/469 | Gen/Dis Loss: 0.8929/0.6797\n",
|
|
"Epoch: 084/100 | Batch 200/469 | Gen/Dis Loss: 0.8298/0.6387\n",
|
|
"Epoch: 084/100 | Batch 300/469 | Gen/Dis Loss: 0.7430/0.6482\n",
|
|
"Epoch: 084/100 | Batch 400/469 | Gen/Dis Loss: 0.9054/0.6606\n",
|
|
"Time elapsed: 27.65 min\n",
|
|
"Epoch: 085/100 | Batch 000/469 | Gen/Dis Loss: 0.8955/0.6492\n",
|
|
"Epoch: 085/100 | Batch 100/469 | Gen/Dis Loss: 0.9057/0.6677\n",
|
|
"Epoch: 085/100 | Batch 200/469 | Gen/Dis Loss: 0.8066/0.6672\n",
|
|
"Epoch: 085/100 | Batch 300/469 | Gen/Dis Loss: 0.8405/0.6186\n",
|
|
"Epoch: 085/100 | Batch 400/469 | Gen/Dis Loss: 0.7902/0.6566\n",
|
|
"Time elapsed: 27.97 min\n",
|
|
"Epoch: 086/100 | Batch 000/469 | Gen/Dis Loss: 0.8329/0.6380\n",
|
|
"Epoch: 086/100 | Batch 100/469 | Gen/Dis Loss: 0.7943/0.6351\n",
|
|
"Epoch: 086/100 | Batch 200/469 | Gen/Dis Loss: 0.8267/0.6181\n",
|
|
"Epoch: 086/100 | Batch 300/469 | Gen/Dis Loss: 0.8134/0.6201\n",
|
|
"Epoch: 086/100 | Batch 400/469 | Gen/Dis Loss: 0.7792/0.6261\n",
|
|
"Time elapsed: 28.29 min\n",
|
|
"Epoch: 087/100 | Batch 000/469 | Gen/Dis Loss: 0.7690/0.6724\n",
|
|
"Epoch: 087/100 | Batch 100/469 | Gen/Dis Loss: 0.8583/0.6380\n",
|
|
"Epoch: 087/100 | Batch 200/469 | Gen/Dis Loss: 0.8866/0.6587\n",
|
|
"Epoch: 087/100 | Batch 300/469 | Gen/Dis Loss: 0.8352/0.6150\n",
|
|
"Epoch: 087/100 | Batch 400/469 | Gen/Dis Loss: 0.8467/0.6394\n",
|
|
"Time elapsed: 28.63 min\n",
|
|
"Epoch: 088/100 | Batch 000/469 | Gen/Dis Loss: 1.0191/0.6406\n",
|
|
"Epoch: 088/100 | Batch 100/469 | Gen/Dis Loss: 0.8610/0.6540\n",
|
|
"Epoch: 088/100 | Batch 200/469 | Gen/Dis Loss: 0.8660/0.6474\n",
|
|
"Epoch: 088/100 | Batch 300/469 | Gen/Dis Loss: 0.9056/0.6660\n",
|
|
"Epoch: 088/100 | Batch 400/469 | Gen/Dis Loss: 0.9242/0.6643\n",
|
|
"Time elapsed: 28.96 min\n",
|
|
"Epoch: 089/100 | Batch 000/469 | Gen/Dis Loss: 0.7956/0.6340\n",
|
|
"Epoch: 089/100 | Batch 100/469 | Gen/Dis Loss: 0.9198/0.6242\n",
|
|
"Epoch: 089/100 | Batch 200/469 | Gen/Dis Loss: 0.7616/0.6380\n",
|
|
"Epoch: 089/100 | Batch 300/469 | Gen/Dis Loss: 0.8863/0.5965\n",
|
|
"Epoch: 089/100 | Batch 400/469 | Gen/Dis Loss: 0.7759/0.6827\n",
|
|
"Time elapsed: 29.29 min\n",
|
|
"Epoch: 090/100 | Batch 000/469 | Gen/Dis Loss: 0.8185/0.6479\n",
|
|
"Epoch: 090/100 | Batch 100/469 | Gen/Dis Loss: 0.8872/0.6186\n",
|
|
"Epoch: 090/100 | Batch 200/469 | Gen/Dis Loss: 0.7187/0.6278\n",
|
|
"Epoch: 090/100 | Batch 300/469 | Gen/Dis Loss: 0.8923/0.6281\n",
|
|
"Epoch: 090/100 | Batch 400/469 | Gen/Dis Loss: 0.9982/0.6463\n",
|
|
"Time elapsed: 29.61 min\n",
|
|
"Epoch: 091/100 | Batch 000/469 | Gen/Dis Loss: 0.7918/0.6309\n",
|
|
"Epoch: 091/100 | Batch 100/469 | Gen/Dis Loss: 0.8389/0.6199\n",
|
|
"Epoch: 091/100 | Batch 200/469 | Gen/Dis Loss: 0.8410/0.6529\n",
|
|
"Epoch: 091/100 | Batch 300/469 | Gen/Dis Loss: 0.8419/0.6403\n",
|
|
"Epoch: 091/100 | Batch 400/469 | Gen/Dis Loss: 0.9572/0.6225\n",
|
|
"Time elapsed: 29.93 min\n",
|
|
"Epoch: 092/100 | Batch 000/469 | Gen/Dis Loss: 0.7799/0.6296\n",
|
|
"Epoch: 092/100 | Batch 100/469 | Gen/Dis Loss: 0.8062/0.6253\n",
|
|
"Epoch: 092/100 | Batch 200/469 | Gen/Dis Loss: 0.8968/0.5927\n",
|
|
"Epoch: 092/100 | Batch 300/469 | Gen/Dis Loss: 0.8659/0.6430\n",
|
|
"Epoch: 092/100 | Batch 400/469 | Gen/Dis Loss: 0.8538/0.6428\n",
|
|
"Time elapsed: 30.25 min\n",
|
|
"Epoch: 093/100 | Batch 000/469 | Gen/Dis Loss: 0.8086/0.6581\n",
|
|
"Epoch: 093/100 | Batch 100/469 | Gen/Dis Loss: 0.8352/0.6173\n",
|
|
"Epoch: 093/100 | Batch 200/469 | Gen/Dis Loss: 0.8675/0.6440\n",
|
|
"Epoch: 093/100 | Batch 300/469 | Gen/Dis Loss: 0.8280/0.6301\n",
|
|
"Epoch: 093/100 | Batch 400/469 | Gen/Dis Loss: 0.7901/0.6401\n",
|
|
"Time elapsed: 30.58 min\n",
|
|
"Epoch: 094/100 | Batch 000/469 | Gen/Dis Loss: 0.8181/0.6240\n",
|
|
"Epoch: 094/100 | Batch 100/469 | Gen/Dis Loss: 0.7925/0.6491\n",
|
|
"Epoch: 094/100 | Batch 200/469 | Gen/Dis Loss: 1.0735/0.6365\n",
|
|
"Epoch: 094/100 | Batch 300/469 | Gen/Dis Loss: 0.7595/0.6691\n",
|
|
"Epoch: 094/100 | Batch 400/469 | Gen/Dis Loss: 0.9616/0.6151\n",
|
|
"Time elapsed: 30.91 min\n",
|
|
"Epoch: 095/100 | Batch 000/469 | Gen/Dis Loss: 0.8819/0.6103\n",
|
|
"Epoch: 095/100 | Batch 100/469 | Gen/Dis Loss: 0.8988/0.6140\n",
|
|
"Epoch: 095/100 | Batch 200/469 | Gen/Dis Loss: 0.7358/0.6849\n",
|
|
"Epoch: 095/100 | Batch 300/469 | Gen/Dis Loss: 0.8665/0.6324\n",
|
|
"Epoch: 095/100 | Batch 400/469 | Gen/Dis Loss: 0.9067/0.6512\n",
|
|
"Time elapsed: 31.24 min\n",
|
|
"Epoch: 096/100 | Batch 000/469 | Gen/Dis Loss: 0.6700/0.6599\n",
|
|
"Epoch: 096/100 | Batch 100/469 | Gen/Dis Loss: 0.9485/0.6660\n",
|
|
"Epoch: 096/100 | Batch 200/469 | Gen/Dis Loss: 0.8327/0.6410\n",
|
|
"Epoch: 096/100 | Batch 300/469 | Gen/Dis Loss: 0.8570/0.6311\n",
|
|
"Epoch: 096/100 | Batch 400/469 | Gen/Dis Loss: 0.7926/0.6610\n",
|
|
"Time elapsed: 31.57 min\n",
|
|
"Epoch: 097/100 | Batch 000/469 | Gen/Dis Loss: 0.8499/0.6367\n",
|
|
"Epoch: 097/100 | Batch 100/469 | Gen/Dis Loss: 0.8856/0.6605\n",
|
|
"Epoch: 097/100 | Batch 200/469 | Gen/Dis Loss: 0.8316/0.6492\n",
|
|
"Epoch: 097/100 | Batch 300/469 | Gen/Dis Loss: 0.8009/0.6381\n",
|
|
"Epoch: 097/100 | Batch 400/469 | Gen/Dis Loss: 0.7995/0.6290\n",
|
|
"Time elapsed: 31.89 min\n",
|
|
"Epoch: 098/100 | Batch 000/469 | Gen/Dis Loss: 0.8702/0.6647\n",
|
|
"Epoch: 098/100 | Batch 100/469 | Gen/Dis Loss: 0.8847/0.6373\n",
|
|
"Epoch: 098/100 | Batch 200/469 | Gen/Dis Loss: 0.8239/0.6928\n",
|
|
"Epoch: 098/100 | Batch 300/469 | Gen/Dis Loss: 0.8464/0.6540\n",
|
|
"Epoch: 098/100 | Batch 400/469 | Gen/Dis Loss: 0.8663/0.6176\n",
|
|
"Time elapsed: 32.23 min\n",
|
|
"Epoch: 099/100 | Batch 000/469 | Gen/Dis Loss: 0.8692/0.6472\n",
|
|
"Epoch: 099/100 | Batch 100/469 | Gen/Dis Loss: 0.8241/0.6173\n",
|
|
"Epoch: 099/100 | Batch 200/469 | Gen/Dis Loss: 0.7245/0.6744\n",
|
|
"Epoch: 099/100 | Batch 300/469 | Gen/Dis Loss: 0.8388/0.6572\n",
|
|
"Epoch: 099/100 | Batch 400/469 | Gen/Dis Loss: 0.7375/0.6808\n",
|
|
"Time elapsed: 32.58 min\n",
|
|
"Epoch: 100/100 | Batch 000/469 | Gen/Dis Loss: 0.7877/0.6469\n",
|
|
"Epoch: 100/100 | Batch 100/469 | Gen/Dis Loss: 0.7924/0.6401\n",
|
|
"Epoch: 100/100 | Batch 200/469 | Gen/Dis Loss: 0.8820/0.6435\n",
|
|
"Epoch: 100/100 | Batch 300/469 | Gen/Dis Loss: 1.0647/0.6531\n",
|
|
"Epoch: 100/100 | Batch 400/469 | Gen/Dis Loss: 0.9339/0.6605\n",
|
|
"Time elapsed: 32.89 min\n",
|
|
"Total Training Time: 32.89 min\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"start_time = time.time() \n",
|
|
"\n",
|
|
"discr_costs = []\n",
|
|
"gener_costs = []\n",
|
|
"for epoch in range(num_epochs):\n",
|
|
" model = model.train()\n",
|
|
" for batch_idx, (features, targets) in enumerate(train_loader):\n",
|
|
"\n",
|
|
" \n",
|
|
" \n",
|
|
" features = (features - 0.5)*2.\n",
|
|
" features = features.view(-1, IMG_SIZE).to(device) \n",
|
|
" targets = targets.to(device)\n",
|
|
"\n",
|
|
" valid = torch.ones(targets.size(0)).float().to(device)\n",
|
|
" fake = torch.zeros(targets.size(0)).float().to(device)\n",
|
|
" \n",
|
|
"\n",
|
|
" ### FORWARD AND BACK PROP\n",
|
|
" \n",
|
|
" \n",
|
|
" # --------------------------\n",
|
|
" # Train Generator\n",
|
|
" # --------------------------\n",
|
|
" \n",
|
|
" # Make new images\n",
|
|
" z = torch.zeros((targets.size(0), LATENT_DIM)).uniform_(-1.0, 1.0).to(device)\n",
|
|
" generated_features = model.generator_forward(z)\n",
|
|
" \n",
|
|
" # Loss for fooling the discriminator\n",
|
|
" discr_pred = model.discriminator_forward(generated_features)\n",
|
|
" \n",
|
|
" gener_loss = F.binary_cross_entropy(discr_pred, valid)\n",
|
|
" \n",
|
|
" optim_gener.zero_grad()\n",
|
|
" gener_loss.backward()\n",
|
|
" optim_gener.step()\n",
|
|
" \n",
|
|
" # --------------------------\n",
|
|
" # Train Discriminator\n",
|
|
" # -------------------------- \n",
|
|
" \n",
|
|
" discr_pred_real = model.discriminator_forward(features.view(-1, IMG_SIZE))\n",
|
|
" real_loss = F.binary_cross_entropy(discr_pred_real, valid)\n",
|
|
" \n",
|
|
" discr_pred_fake = model.discriminator_forward(generated_features.detach())\n",
|
|
" fake_loss = F.binary_cross_entropy(discr_pred_fake, fake)\n",
|
|
" \n",
|
|
" discr_loss = 0.5*(real_loss + fake_loss)\n",
|
|
"\n",
|
|
" optim_discr.zero_grad()\n",
|
|
" discr_loss.backward()\n",
|
|
" optim_discr.step() \n",
|
|
" \n",
|
|
" discr_costs.append(discr_loss)\n",
|
|
" gener_costs.append(gener_loss)\n",
|
|
" \n",
|
|
" \n",
|
|
" ### LOGGING\n",
|
|
" if not batch_idx % 100:\n",
|
|
" print ('Epoch: %03d/%03d | Batch %03d/%03d | Gen/Dis Loss: %.4f/%.4f' \n",
|
|
" %(epoch+1, num_epochs, batch_idx, \n",
|
|
" len(train_loader), gener_loss, discr_loss))\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": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%matplotlib inline\n",
|
|
"import matplotlib.pyplot as plt"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAW4AAAD8CAYAAABXe05zAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xd4VMX6wPHvpECE0AlFigGVHkIHRUBEpSn2K4iFa8F6vV6Vn4jYsHFRsIsXFQsKKCBY6L1DIPReA4SWECCFENLm98fZ3exmd7O7ySY5S97P8+Rhd/acs3NOyLuzc2beUVprhBBCBI6g0q6AEEII30jgFkKIACOBWwghAowEbiGECDASuIUQIsBI4BZCiAAjgVsIIQKMBG4hhAgwEriFECLAhBTHQWvWrKkjIyOL49BCCHFZio2NPaO1jvBm22IJ3JGRkWzcuLE4Di2EEJclpdQRb7eVrhIhhAgwEriFECLASOAWQogAUyx93EII32RlZREfH09GRkZpV0UUs7CwMOrXr09oaGihjyGBWwgTiI+Pp1KlSkRGRqKUKu3qiGKitSYpKYn4+HgaNWpU6ONIV4kQJpCRkUGNGjUkaF/mlFLUqFGjyN+sJHALYRIStMsGf/yeTRW4L2XnMG3jMWQ5NSGEcM9UgXvcwn0Mm76NBbtOl3ZVhBCl6JNPPiE9Pb1IxxgyZAjTp0/3U43MxVSBOzH1EgCpGdmlXBMhRHHSWpObm+v29cIE7pycnKJWK2CYKnBbSVeJECXvnXfeoWnTptxwww0MGjSIjz76CICDBw/Sp08f2rdvT7du3dizZw9gtGiff/55rr/+eho3buzQuv3www/p2LEjrVu35s033wQgLi6Opk2b8vDDD9OqVSuOHTvG008/TYcOHWjZsqVtu88++4wTJ07Qs2dPevbsCcCUKVOIioqiVatWvPLKK7b3CQ8P56WXXiI6Opq1a9e6PbfFixfTtm1boqKiePTRR7l0yWgkDh8+nBYtWtC6dWtefvllAKZNm0arVq2Ijo6me/fu/rq8fmWq4YAKuTkjxNt/7WTXiRS/HrPFlZV58/aWbl/fsGEDM2bMYOvWrWRlZdGuXTvat28PwNChQ/n666+59tprWb9+Pc888wxLliwB4OTJk6xatYo9e/YwYMAA7r33XhYsWMD+/fuJiYlBa82AAQNYsWIFDRs2ZP/+/fz444906dIFgPfee4/q1auTk5NDr1692LZtG88//zzjxo1j6dKl1KxZkxMnTvDKK68QGxtLtWrVuPXWW5k1axZ33nknFy5coHPnzowdO9btuWVkZDBkyBAWL15MkyZNePjhhxk/fjwPPfQQM2fOZM+ePSilOH/+PACjRo1i/vz51KtXz1ZmNqZscQshStbq1au54447CAsLo1KlStx+++0ApKWlsWbNGu677z7atGnDk08+ycmTJ2373XnnnQQFBdGiRQtOnzbuTS1YsIAFCxbQtm1b2rVrx549e9i/fz8AV111lS1oA/z222+0a9eOtm3bsnPnTnbt2uVUtw0bNnDjjTcSERFBSEgIgwcPZsWKFQAEBwdzzz33FHhue/fupVGjRjRp0gSARx55hBUrVlClShXCwsJ47LHH+P3336lQoQIAXbt2ZciQIXzzzTem7X4xVYvbSjpKRFlWUMu4pOXm5lK1alW2bNni8vXy5cvbHlu7OLXWvPrqqzz55JMO28bFxVGxYkXb88OHD/PRRx+xYcMGqlWrxpAhQ3we3xwWFkZwcLBP+1iFhIQQExPD4sWLmT59Ol988QVLlizh66+/Zv369cyePZv27dsTGxtLjRo1CvUexcVULW4ZxipE6ejatSt//fUXGRkZpKWl8ffffwNQuXJlGjVqxLRp0wAjKG/durXAY/Xu3ZuJEyeSlpYGwPHjx0lISHDaLiUlhYoVK1KlShVOnz7N3Llzba9VqlSJ1NRUADp16sTy5cs5c+YMOTk5TJkyhR49enh9bk2bNiUuLo4DBw4AMGnSJHr06EFaWhrJycn069ePjz/+2HZeBw8epHPnzowaNYqIiAiOHTvm9XuVFFO2uIUQJatjx44MGDCA1q1bU7t2baKioqhSpQoAv/zyC08//TTvvvsuWVlZDBw4kOjoaLfHuvXWW9m9ezfXXXcdYNxA/Pnnn51axtHR0bRt25ZmzZrRoEEDunbtantt6NCh9OnThyuvvJKlS5cyevRoevbsidaa/v37c8cdd3h9bmFhYXz//ffcd999ZGdn07FjR5566inOnj3LHXfcQUZGBlprxo0bB8CwYcPYv38/Wmt69epV4LmWFlUcIzg6dOigC7OQwsvTtjI9Np4x97bmHx0a+L1eQpjV7t27ad68eanWIS0tjfDwcNLT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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.plot(range(len(gener_costs)), gener_costs, label='generator loss')\n",
|
|
"plt.plot(range(len(discr_costs)), discr_costs, label='discriminator loss')\n",
|
|
"plt.legend()\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 1440x180 with 5 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"##########################\n",
|
|
"### VISUALIZATION\n",
|
|
"##########################\n",
|
|
"\n",
|
|
"\n",
|
|
"model.eval()\n",
|
|
"# Make new images\n",
|
|
"z = torch.zeros((5, LATENT_DIM)).uniform_(-1.0, 1.0).to(device)\n",
|
|
"generated_features = model.generator_forward(z)\n",
|
|
"imgs = generated_features.view(-1, 28, 28)\n",
|
|
"\n",
|
|
"fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(20, 2.5))\n",
|
|
"\n",
|
|
"\n",
|
|
"for i, ax in enumerate(axes):\n",
|
|
" axes[i].imshow(imgs[i].to(torch.device('cpu')).detach(), cmap='binary')"
|
|
]
|
|
}
|
|
],
|
|
"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.7.1"
|
|
},
|
|
"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
|
|
}
|