1047 lines
87 KiB
Plaintext
1047 lines
87 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.7.3\n",
|
|
"IPython 7.6.1\n",
|
|
"\n",
|
|
"torch 1.2.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 = 75\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.6576/0.7134\n",
|
|
"Epoch: 001/100 | Batch 100/469 | Gen/Dis Loss: 5.1797/0.0280\n",
|
|
"Epoch: 001/100 | Batch 200/469 | Gen/Dis Loss: 1.8944/0.0933\n",
|
|
"Epoch: 001/100 | Batch 300/469 | Gen/Dis Loss: 1.5018/0.1451\n",
|
|
"Epoch: 001/100 | Batch 400/469 | Gen/Dis Loss: 2.0884/0.1026\n",
|
|
"Time elapsed: 0.27 min\n",
|
|
"Epoch: 002/100 | Batch 000/469 | Gen/Dis Loss: 2.8803/0.0496\n",
|
|
"Epoch: 002/100 | Batch 100/469 | Gen/Dis Loss: 3.4923/0.0483\n",
|
|
"Epoch: 002/100 | Batch 200/469 | Gen/Dis Loss: 2.9812/0.1615\n",
|
|
"Epoch: 002/100 | Batch 300/469 | Gen/Dis Loss: 2.2371/0.1658\n",
|
|
"Epoch: 002/100 | Batch 400/469 | Gen/Dis Loss: 1.7027/0.2905\n",
|
|
"Time elapsed: 0.51 min\n",
|
|
"Epoch: 003/100 | Batch 000/469 | Gen/Dis Loss: 1.2188/0.3533\n",
|
|
"Epoch: 003/100 | Batch 100/469 | Gen/Dis Loss: 1.8254/0.2083\n",
|
|
"Epoch: 003/100 | Batch 200/469 | Gen/Dis Loss: 1.9774/0.2238\n",
|
|
"Epoch: 003/100 | Batch 300/469 | Gen/Dis Loss: 1.9323/0.2806\n",
|
|
"Epoch: 003/100 | Batch 400/469 | Gen/Dis Loss: 1.9518/0.2712\n",
|
|
"Time elapsed: 0.77 min\n",
|
|
"Epoch: 004/100 | Batch 000/469 | Gen/Dis Loss: 1.2785/0.3455\n",
|
|
"Epoch: 004/100 | Batch 100/469 | Gen/Dis Loss: 1.3979/0.3208\n",
|
|
"Epoch: 004/100 | Batch 200/469 | Gen/Dis Loss: 1.4295/0.3638\n",
|
|
"Epoch: 004/100 | Batch 300/469 | Gen/Dis Loss: 1.2798/0.3620\n",
|
|
"Epoch: 004/100 | Batch 400/469 | Gen/Dis Loss: 1.1321/0.4751\n",
|
|
"Time elapsed: 1.04 min\n",
|
|
"Epoch: 005/100 | Batch 000/469 | Gen/Dis Loss: 1.1786/0.3932\n",
|
|
"Epoch: 005/100 | Batch 100/469 | Gen/Dis Loss: 1.1437/0.4343\n",
|
|
"Epoch: 005/100 | Batch 200/469 | Gen/Dis Loss: 1.0105/0.4453\n",
|
|
"Epoch: 005/100 | Batch 300/469 | Gen/Dis Loss: 1.3987/0.4194\n",
|
|
"Epoch: 005/100 | Batch 400/469 | Gen/Dis Loss: 1.3960/0.4005\n",
|
|
"Time elapsed: 1.28 min\n",
|
|
"Epoch: 006/100 | Batch 000/469 | Gen/Dis Loss: 1.3119/0.4792\n",
|
|
"Epoch: 006/100 | Batch 100/469 | Gen/Dis Loss: 1.6029/0.4045\n",
|
|
"Epoch: 006/100 | Batch 200/469 | Gen/Dis Loss: 1.6302/0.3768\n",
|
|
"Epoch: 006/100 | Batch 300/469 | Gen/Dis Loss: 0.9141/0.4838\n",
|
|
"Epoch: 006/100 | Batch 400/469 | Gen/Dis Loss: 0.9891/0.4810\n",
|
|
"Time elapsed: 1.56 min\n",
|
|
"Epoch: 007/100 | Batch 000/469 | Gen/Dis Loss: 1.3198/0.4820\n",
|
|
"Epoch: 007/100 | Batch 100/469 | Gen/Dis Loss: 1.1527/0.4620\n",
|
|
"Epoch: 007/100 | Batch 200/469 | Gen/Dis Loss: 1.3668/0.3967\n",
|
|
"Epoch: 007/100 | Batch 300/469 | Gen/Dis Loss: 1.6183/0.4676\n",
|
|
"Epoch: 007/100 | Batch 400/469 | Gen/Dis Loss: 1.0077/0.4841\n",
|
|
"Time elapsed: 1.85 min\n",
|
|
"Epoch: 008/100 | Batch 000/469 | Gen/Dis Loss: 1.2245/0.5437\n",
|
|
"Epoch: 008/100 | Batch 100/469 | Gen/Dis Loss: 1.0142/0.4928\n",
|
|
"Epoch: 008/100 | Batch 200/469 | Gen/Dis Loss: 0.8817/0.4939\n",
|
|
"Epoch: 008/100 | Batch 300/469 | Gen/Dis Loss: 1.0748/0.4967\n",
|
|
"Epoch: 008/100 | Batch 400/469 | Gen/Dis Loss: 2.1265/0.4329\n",
|
|
"Time elapsed: 2.11 min\n",
|
|
"Epoch: 009/100 | Batch 000/469 | Gen/Dis Loss: 0.9277/0.4871\n",
|
|
"Epoch: 009/100 | Batch 100/469 | Gen/Dis Loss: 1.1624/0.4473\n",
|
|
"Epoch: 009/100 | Batch 200/469 | Gen/Dis Loss: 1.1869/0.4800\n",
|
|
"Epoch: 009/100 | Batch 300/469 | Gen/Dis Loss: 1.9998/0.4295\n",
|
|
"Epoch: 009/100 | Batch 400/469 | Gen/Dis Loss: 1.6921/0.5037\n",
|
|
"Time elapsed: 2.34 min\n",
|
|
"Epoch: 010/100 | Batch 000/469 | Gen/Dis Loss: 1.3091/0.4358\n",
|
|
"Epoch: 010/100 | Batch 100/469 | Gen/Dis Loss: 1.2604/0.5375\n",
|
|
"Epoch: 010/100 | Batch 200/469 | Gen/Dis Loss: 1.1491/0.4537\n",
|
|
"Epoch: 010/100 | Batch 300/469 | Gen/Dis Loss: 1.3843/0.5068\n",
|
|
"Epoch: 010/100 | Batch 400/469 | Gen/Dis Loss: 1.3413/0.5051\n",
|
|
"Time elapsed: 2.60 min\n",
|
|
"Epoch: 011/100 | Batch 000/469 | Gen/Dis Loss: 1.2368/0.5161\n",
|
|
"Epoch: 011/100 | Batch 100/469 | Gen/Dis Loss: 1.3715/0.4692\n",
|
|
"Epoch: 011/100 | Batch 200/469 | Gen/Dis Loss: 1.1182/0.5274\n",
|
|
"Epoch: 011/100 | Batch 300/469 | Gen/Dis Loss: 1.2770/0.4649\n",
|
|
"Epoch: 011/100 | Batch 400/469 | Gen/Dis Loss: 1.1847/0.5504\n",
|
|
"Time elapsed: 2.84 min\n",
|
|
"Epoch: 012/100 | Batch 000/469 | Gen/Dis Loss: 0.9930/0.5509\n",
|
|
"Epoch: 012/100 | Batch 100/469 | Gen/Dis Loss: 1.1921/0.5310\n",
|
|
"Epoch: 012/100 | Batch 200/469 | Gen/Dis Loss: 0.9925/0.6062\n",
|
|
"Epoch: 012/100 | Batch 300/469 | Gen/Dis Loss: 1.1246/0.5170\n",
|
|
"Epoch: 012/100 | Batch 400/469 | Gen/Dis Loss: 1.0432/0.4437\n",
|
|
"Time elapsed: 3.07 min\n",
|
|
"Epoch: 013/100 | Batch 000/469 | Gen/Dis Loss: 1.1419/0.5287\n",
|
|
"Epoch: 013/100 | Batch 100/469 | Gen/Dis Loss: 1.0053/0.5152\n",
|
|
"Epoch: 013/100 | Batch 200/469 | Gen/Dis Loss: 1.1308/0.5384\n",
|
|
"Epoch: 013/100 | Batch 300/469 | Gen/Dis Loss: 1.1822/0.5124\n",
|
|
"Epoch: 013/100 | Batch 400/469 | Gen/Dis Loss: 1.4501/0.5495\n",
|
|
"Time elapsed: 3.32 min\n",
|
|
"Epoch: 014/100 | Batch 000/469 | Gen/Dis Loss: 1.1417/0.5364\n",
|
|
"Epoch: 014/100 | Batch 100/469 | Gen/Dis Loss: 0.9595/0.5884\n",
|
|
"Epoch: 014/100 | Batch 200/469 | Gen/Dis Loss: 0.9887/0.5216\n",
|
|
"Epoch: 014/100 | Batch 300/469 | Gen/Dis Loss: 1.0332/0.5686\n",
|
|
"Epoch: 014/100 | Batch 400/469 | Gen/Dis Loss: 1.5268/0.4554\n",
|
|
"Time elapsed: 3.60 min\n",
|
|
"Epoch: 015/100 | Batch 000/469 | Gen/Dis Loss: 1.1181/0.4960\n",
|
|
"Epoch: 015/100 | Batch 100/469 | Gen/Dis Loss: 1.2722/0.4632\n",
|
|
"Epoch: 015/100 | Batch 200/469 | Gen/Dis Loss: 0.9523/0.6012\n",
|
|
"Epoch: 015/100 | Batch 300/469 | Gen/Dis Loss: 0.9905/0.5274\n",
|
|
"Epoch: 015/100 | Batch 400/469 | Gen/Dis Loss: 1.0448/0.5855\n",
|
|
"Time elapsed: 3.82 min\n",
|
|
"Epoch: 016/100 | Batch 000/469 | Gen/Dis Loss: 1.0641/0.5432\n",
|
|
"Epoch: 016/100 | Batch 100/469 | Gen/Dis Loss: 0.9587/0.5636\n",
|
|
"Epoch: 016/100 | Batch 200/469 | Gen/Dis Loss: 1.3602/0.5691\n",
|
|
"Epoch: 016/100 | Batch 300/469 | Gen/Dis Loss: 1.1294/0.5564\n",
|
|
"Epoch: 016/100 | Batch 400/469 | Gen/Dis Loss: 1.0727/0.5042\n",
|
|
"Time elapsed: 4.04 min\n",
|
|
"Epoch: 017/100 | Batch 000/469 | Gen/Dis Loss: 0.9285/0.6045\n",
|
|
"Epoch: 017/100 | Batch 100/469 | Gen/Dis Loss: 1.0024/0.6384\n",
|
|
"Epoch: 017/100 | Batch 200/469 | Gen/Dis Loss: 1.5662/0.4652\n",
|
|
"Epoch: 017/100 | Batch 300/469 | Gen/Dis Loss: 1.3644/0.4632\n",
|
|
"Epoch: 017/100 | Batch 400/469 | Gen/Dis Loss: 1.2681/0.5238\n",
|
|
"Time elapsed: 4.22 min\n",
|
|
"Epoch: 018/100 | Batch 000/469 | Gen/Dis Loss: 1.2578/0.5151\n",
|
|
"Epoch: 018/100 | Batch 100/469 | Gen/Dis Loss: 1.6475/0.4929\n",
|
|
"Epoch: 018/100 | Batch 200/469 | Gen/Dis Loss: 1.0610/0.5496\n",
|
|
"Epoch: 018/100 | Batch 300/469 | Gen/Dis Loss: 1.0613/0.5634\n",
|
|
"Epoch: 018/100 | Batch 400/469 | Gen/Dis Loss: 1.4675/0.4589\n",
|
|
"Time elapsed: 4.40 min\n",
|
|
"Epoch: 019/100 | Batch 000/469 | Gen/Dis Loss: 1.1211/0.5027\n",
|
|
"Epoch: 019/100 | Batch 100/469 | Gen/Dis Loss: 1.1444/0.5655\n",
|
|
"Epoch: 019/100 | Batch 200/469 | Gen/Dis Loss: 1.2471/0.5716\n",
|
|
"Epoch: 019/100 | Batch 300/469 | Gen/Dis Loss: 1.0223/0.5106\n",
|
|
"Epoch: 019/100 | Batch 400/469 | Gen/Dis Loss: 1.0361/0.5805\n",
|
|
"Time elapsed: 4.58 min\n",
|
|
"Epoch: 020/100 | Batch 000/469 | Gen/Dis Loss: 0.9195/0.5428\n",
|
|
"Epoch: 020/100 | Batch 100/469 | Gen/Dis Loss: 1.3110/0.4955\n",
|
|
"Epoch: 020/100 | Batch 200/469 | Gen/Dis Loss: 1.2449/0.4973\n",
|
|
"Epoch: 020/100 | Batch 300/469 | Gen/Dis Loss: 1.3258/0.4992\n",
|
|
"Epoch: 020/100 | Batch 400/469 | Gen/Dis Loss: 1.2196/0.5279\n",
|
|
"Time elapsed: 4.77 min\n",
|
|
"Epoch: 021/100 | Batch 000/469 | Gen/Dis Loss: 1.5621/0.5584\n",
|
|
"Epoch: 021/100 | Batch 100/469 | Gen/Dis Loss: 1.1148/0.5888\n",
|
|
"Epoch: 021/100 | Batch 200/469 | Gen/Dis Loss: 1.5108/0.4636\n",
|
|
"Epoch: 021/100 | Batch 300/469 | Gen/Dis Loss: 1.0957/0.4912\n",
|
|
"Epoch: 021/100 | Batch 400/469 | Gen/Dis Loss: 1.0342/0.5184\n",
|
|
"Time elapsed: 4.92 min\n",
|
|
"Epoch: 022/100 | Batch 000/469 | Gen/Dis Loss: 1.9312/0.4366\n",
|
|
"Epoch: 022/100 | Batch 100/469 | Gen/Dis Loss: 1.2312/0.5260\n",
|
|
"Epoch: 022/100 | Batch 200/469 | Gen/Dis Loss: 1.1939/0.5075\n",
|
|
"Epoch: 022/100 | Batch 300/469 | Gen/Dis Loss: 1.1393/0.5692\n",
|
|
"Epoch: 022/100 | Batch 400/469 | Gen/Dis Loss: 1.0390/0.5261\n",
|
|
"Time elapsed: 5.05 min\n",
|
|
"Epoch: 023/100 | Batch 000/469 | Gen/Dis Loss: 1.3148/0.4902\n",
|
|
"Epoch: 023/100 | Batch 100/469 | Gen/Dis Loss: 1.2077/0.6129\n",
|
|
"Epoch: 023/100 | Batch 200/469 | Gen/Dis Loss: 1.0886/0.5545\n",
|
|
"Epoch: 023/100 | Batch 300/469 | Gen/Dis Loss: 1.0762/0.4948\n",
|
|
"Epoch: 023/100 | Batch 400/469 | Gen/Dis Loss: 1.5361/0.5476\n",
|
|
"Time elapsed: 5.17 min\n",
|
|
"Epoch: 024/100 | Batch 000/469 | Gen/Dis Loss: 1.1752/0.5881\n",
|
|
"Epoch: 024/100 | Batch 100/469 | Gen/Dis Loss: 1.3408/0.5339\n",
|
|
"Epoch: 024/100 | Batch 200/469 | Gen/Dis Loss: 1.2613/0.4555\n",
|
|
"Epoch: 024/100 | Batch 300/469 | Gen/Dis Loss: 1.0707/0.5099\n",
|
|
"Epoch: 024/100 | Batch 400/469 | Gen/Dis Loss: 1.1063/0.5695\n",
|
|
"Time elapsed: 5.32 min\n",
|
|
"Epoch: 025/100 | Batch 000/469 | Gen/Dis Loss: 1.2911/0.5084\n",
|
|
"Epoch: 025/100 | Batch 100/469 | Gen/Dis Loss: 1.1280/0.5151\n",
|
|
"Epoch: 025/100 | Batch 200/469 | Gen/Dis Loss: 1.3799/0.5784\n",
|
|
"Epoch: 025/100 | Batch 300/469 | Gen/Dis Loss: 1.1675/0.6001\n",
|
|
"Epoch: 025/100 | Batch 400/469 | Gen/Dis Loss: 0.9834/0.6158\n",
|
|
"Time elapsed: 5.48 min\n",
|
|
"Epoch: 026/100 | Batch 000/469 | Gen/Dis Loss: 1.2713/0.5475\n",
|
|
"Epoch: 026/100 | Batch 100/469 | Gen/Dis Loss: 1.3814/0.5652\n",
|
|
"Epoch: 026/100 | Batch 200/469 | Gen/Dis Loss: 1.1782/0.4850\n",
|
|
"Epoch: 026/100 | Batch 300/469 | Gen/Dis Loss: 0.9917/0.5888\n",
|
|
"Epoch: 026/100 | Batch 400/469 | Gen/Dis Loss: 1.0909/0.5825\n",
|
|
"Time elapsed: 5.64 min\n",
|
|
"Epoch: 027/100 | Batch 000/469 | Gen/Dis Loss: 1.0873/0.5579\n",
|
|
"Epoch: 027/100 | Batch 100/469 | Gen/Dis Loss: 0.9639/0.5860\n",
|
|
"Epoch: 027/100 | Batch 200/469 | Gen/Dis Loss: 1.0458/0.5526\n",
|
|
"Epoch: 027/100 | Batch 300/469 | Gen/Dis Loss: 1.3373/0.5140\n",
|
|
"Epoch: 027/100 | Batch 400/469 | Gen/Dis Loss: 1.2790/0.5223\n",
|
|
"Time elapsed: 5.79 min\n",
|
|
"Epoch: 028/100 | Batch 000/469 | Gen/Dis Loss: 0.9300/0.5869\n",
|
|
"Epoch: 028/100 | Batch 100/469 | Gen/Dis Loss: 1.0022/0.6056\n",
|
|
"Epoch: 028/100 | Batch 200/469 | Gen/Dis Loss: 1.0688/0.5447\n",
|
|
"Epoch: 028/100 | Batch 300/469 | Gen/Dis Loss: 1.0161/0.5702\n",
|
|
"Epoch: 028/100 | Batch 400/469 | Gen/Dis Loss: 0.8731/0.5543\n",
|
|
"Time elapsed: 5.92 min\n",
|
|
"Epoch: 029/100 | Batch 000/469 | Gen/Dis Loss: 0.8719/0.5524\n",
|
|
"Epoch: 029/100 | Batch 100/469 | Gen/Dis Loss: 1.3005/0.5179\n",
|
|
"Epoch: 029/100 | Batch 200/469 | Gen/Dis Loss: 1.2986/0.5312\n",
|
|
"Epoch: 029/100 | Batch 300/469 | Gen/Dis Loss: 1.1084/0.5207\n",
|
|
"Epoch: 029/100 | Batch 400/469 | Gen/Dis Loss: 1.0591/0.5577\n",
|
|
"Time elapsed: 6.07 min\n",
|
|
"Epoch: 030/100 | Batch 000/469 | Gen/Dis Loss: 1.0231/0.6170\n",
|
|
"Epoch: 030/100 | Batch 100/469 | Gen/Dis Loss: 0.9142/0.6046\n",
|
|
"Epoch: 030/100 | Batch 200/469 | Gen/Dis Loss: 1.2140/0.5290\n",
|
|
"Epoch: 030/100 | Batch 300/469 | Gen/Dis Loss: 0.8784/0.5804\n",
|
|
"Epoch: 030/100 | Batch 400/469 | Gen/Dis Loss: 1.1178/0.5165\n",
|
|
"Time elapsed: 6.20 min\n",
|
|
"Epoch: 031/100 | Batch 000/469 | Gen/Dis Loss: 0.9555/0.5921\n",
|
|
"Epoch: 031/100 | Batch 100/469 | Gen/Dis Loss: 0.9644/0.5432\n",
|
|
"Epoch: 031/100 | Batch 200/469 | Gen/Dis Loss: 0.9531/0.5465\n",
|
|
"Epoch: 031/100 | Batch 300/469 | Gen/Dis Loss: 1.3496/0.5550\n",
|
|
"Epoch: 031/100 | Batch 400/469 | Gen/Dis Loss: 1.2137/0.5672\n",
|
|
"Time elapsed: 6.32 min\n",
|
|
"Epoch: 032/100 | Batch 000/469 | Gen/Dis Loss: 1.0849/0.5020\n",
|
|
"Epoch: 032/100 | Batch 100/469 | Gen/Dis Loss: 0.9098/0.5481\n",
|
|
"Epoch: 032/100 | Batch 200/469 | Gen/Dis Loss: 1.2349/0.5024\n",
|
|
"Epoch: 032/100 | Batch 300/469 | Gen/Dis Loss: 0.9468/0.5599\n",
|
|
"Epoch: 032/100 | Batch 400/469 | Gen/Dis Loss: 1.4531/0.4928\n",
|
|
"Time elapsed: 6.45 min\n",
|
|
"Epoch: 033/100 | Batch 000/469 | Gen/Dis Loss: 1.3397/0.5521\n",
|
|
"Epoch: 033/100 | Batch 100/469 | Gen/Dis Loss: 1.0106/0.5472\n",
|
|
"Epoch: 033/100 | Batch 200/469 | Gen/Dis Loss: 0.9787/0.5606\n",
|
|
"Epoch: 033/100 | Batch 300/469 | Gen/Dis Loss: 1.1434/0.5388\n",
|
|
"Epoch: 033/100 | Batch 400/469 | Gen/Dis Loss: 1.0476/0.5259\n",
|
|
"Time elapsed: 6.57 min\n",
|
|
"Epoch: 034/100 | Batch 000/469 | Gen/Dis Loss: 1.3847/0.5294\n",
|
|
"Epoch: 034/100 | Batch 100/469 | Gen/Dis Loss: 0.8550/0.5800\n",
|
|
"Epoch: 034/100 | Batch 200/469 | Gen/Dis Loss: 1.0220/0.5527\n",
|
|
"Epoch: 034/100 | Batch 300/469 | Gen/Dis Loss: 0.9255/0.5751\n",
|
|
"Epoch: 034/100 | Batch 400/469 | Gen/Dis Loss: 1.0400/0.5554\n",
|
|
"Time elapsed: 6.72 min\n",
|
|
"Epoch: 035/100 | Batch 000/469 | Gen/Dis Loss: 0.9723/0.5789\n",
|
|
"Epoch: 035/100 | Batch 100/469 | Gen/Dis Loss: 1.4414/0.4769\n",
|
|
"Epoch: 035/100 | Batch 200/469 | Gen/Dis Loss: 0.9431/0.5898\n",
|
|
"Epoch: 035/100 | Batch 300/469 | Gen/Dis Loss: 0.8252/0.6573\n",
|
|
"Epoch: 035/100 | Batch 400/469 | Gen/Dis Loss: 0.9694/0.5427\n",
|
|
"Time elapsed: 6.84 min\n",
|
|
"Epoch: 036/100 | Batch 000/469 | Gen/Dis Loss: 1.3664/0.5839\n",
|
|
"Epoch: 036/100 | Batch 100/469 | Gen/Dis Loss: 1.0854/0.5739\n",
|
|
"Epoch: 036/100 | Batch 200/469 | Gen/Dis Loss: 1.0429/0.5457\n",
|
|
"Epoch: 036/100 | Batch 300/469 | Gen/Dis Loss: 0.8601/0.6151\n",
|
|
"Epoch: 036/100 | Batch 400/469 | Gen/Dis Loss: 1.2785/0.5850\n",
|
|
"Time elapsed: 6.97 min\n",
|
|
"Epoch: 037/100 | Batch 000/469 | Gen/Dis Loss: 1.0251/0.5933\n",
|
|
"Epoch: 037/100 | Batch 100/469 | Gen/Dis Loss: 1.2177/0.5053\n",
|
|
"Epoch: 037/100 | Batch 200/469 | Gen/Dis Loss: 0.8804/0.5925\n",
|
|
"Epoch: 037/100 | Batch 300/469 | Gen/Dis Loss: 1.2797/0.6173\n",
|
|
"Epoch: 037/100 | Batch 400/469 | Gen/Dis Loss: 0.9189/0.6238\n",
|
|
"Time elapsed: 7.10 min\n",
|
|
"Epoch: 038/100 | Batch 000/469 | Gen/Dis Loss: 1.3463/0.5419\n",
|
|
"Epoch: 038/100 | Batch 100/469 | Gen/Dis Loss: 1.0166/0.6045\n",
|
|
"Epoch: 038/100 | Batch 200/469 | Gen/Dis Loss: 0.9895/0.6320\n",
|
|
"Epoch: 038/100 | Batch 300/469 | Gen/Dis Loss: 0.9749/0.5621\n",
|
|
"Epoch: 038/100 | Batch 400/469 | Gen/Dis Loss: 1.0448/0.5945\n",
|
|
"Time elapsed: 7.24 min\n",
|
|
"Epoch: 039/100 | Batch 000/469 | Gen/Dis Loss: 0.9662/0.5669\n",
|
|
"Epoch: 039/100 | Batch 100/469 | Gen/Dis Loss: 1.1476/0.5462\n",
|
|
"Epoch: 039/100 | Batch 200/469 | Gen/Dis Loss: 0.9662/0.5554\n",
|
|
"Epoch: 039/100 | Batch 300/469 | Gen/Dis Loss: 1.0850/0.6031\n",
|
|
"Epoch: 039/100 | Batch 400/469 | Gen/Dis Loss: 1.1491/0.6014\n",
|
|
"Time elapsed: 7.41 min\n",
|
|
"Epoch: 040/100 | Batch 000/469 | Gen/Dis Loss: 0.9942/0.5999\n",
|
|
"Epoch: 040/100 | Batch 100/469 | Gen/Dis Loss: 0.9034/0.5979\n",
|
|
"Epoch: 040/100 | Batch 200/469 | Gen/Dis Loss: 1.1880/0.5693\n",
|
|
"Epoch: 040/100 | Batch 300/469 | Gen/Dis Loss: 1.0893/0.5933\n",
|
|
"Epoch: 040/100 | Batch 400/469 | Gen/Dis Loss: 1.0711/0.5501\n",
|
|
"Time elapsed: 7.59 min\n",
|
|
"Epoch: 041/100 | Batch 000/469 | Gen/Dis Loss: 0.9100/0.5957\n",
|
|
"Epoch: 041/100 | Batch 100/469 | Gen/Dis Loss: 0.7538/0.5947\n",
|
|
"Epoch: 041/100 | Batch 200/469 | Gen/Dis Loss: 0.9743/0.5999\n",
|
|
"Epoch: 041/100 | Batch 300/469 | Gen/Dis Loss: 0.8305/0.6395\n",
|
|
"Epoch: 041/100 | Batch 400/469 | Gen/Dis Loss: 1.1106/0.6419\n",
|
|
"Time elapsed: 7.73 min\n",
|
|
"Epoch: 042/100 | Batch 000/469 | Gen/Dis Loss: 1.1241/0.5890\n",
|
|
"Epoch: 042/100 | Batch 100/469 | Gen/Dis Loss: 0.8509/0.6164\n",
|
|
"Epoch: 042/100 | Batch 200/469 | Gen/Dis Loss: 1.2024/0.5684\n",
|
|
"Epoch: 042/100 | Batch 300/469 | Gen/Dis Loss: 0.9708/0.6378\n",
|
|
"Epoch: 042/100 | Batch 400/469 | Gen/Dis Loss: 1.1171/0.5501\n",
|
|
"Time elapsed: 7.85 min\n",
|
|
"Epoch: 043/100 | Batch 000/469 | Gen/Dis Loss: 1.0931/0.5653\n",
|
|
"Epoch: 043/100 | Batch 100/469 | Gen/Dis Loss: 1.0468/0.5782\n",
|
|
"Epoch: 043/100 | Batch 200/469 | Gen/Dis Loss: 1.0359/0.6329\n",
|
|
"Epoch: 043/100 | Batch 300/469 | Gen/Dis Loss: 1.1976/0.6114\n",
|
|
"Epoch: 043/100 | Batch 400/469 | Gen/Dis Loss: 0.8817/0.6200\n",
|
|
"Time elapsed: 7.98 min\n",
|
|
"Epoch: 044/100 | Batch 000/469 | Gen/Dis Loss: 0.9911/0.6061\n",
|
|
"Epoch: 044/100 | Batch 100/469 | Gen/Dis Loss: 1.0196/0.6435\n",
|
|
"Epoch: 044/100 | Batch 200/469 | Gen/Dis Loss: 1.0005/0.6266\n",
|
|
"Epoch: 044/100 | Batch 300/469 | Gen/Dis Loss: 0.8342/0.6092\n",
|
|
"Epoch: 044/100 | Batch 400/469 | Gen/Dis Loss: 0.8342/0.5589\n",
|
|
"Time elapsed: 8.10 min\n",
|
|
"Epoch: 045/100 | Batch 000/469 | Gen/Dis Loss: 0.7638/0.6289\n",
|
|
"Epoch: 045/100 | Batch 100/469 | Gen/Dis Loss: 0.9049/0.5920\n",
|
|
"Epoch: 045/100 | Batch 200/469 | Gen/Dis Loss: 1.0077/0.5975\n",
|
|
"Epoch: 045/100 | Batch 300/469 | Gen/Dis Loss: 0.9315/0.6066\n",
|
|
"Epoch: 045/100 | Batch 400/469 | Gen/Dis Loss: 0.7719/0.6624\n",
|
|
"Time elapsed: 8.23 min\n",
|
|
"Epoch: 046/100 | Batch 000/469 | Gen/Dis Loss: 1.0064/0.5672\n",
|
|
"Epoch: 046/100 | Batch 100/469 | Gen/Dis Loss: 0.8730/0.6217\n",
|
|
"Epoch: 046/100 | Batch 200/469 | Gen/Dis Loss: 1.2217/0.5859\n",
|
|
"Epoch: 046/100 | Batch 300/469 | Gen/Dis Loss: 1.1649/0.5878\n",
|
|
"Epoch: 046/100 | Batch 400/469 | Gen/Dis Loss: 0.9912/0.5882\n",
|
|
"Time elapsed: 8.35 min\n",
|
|
"Epoch: 047/100 | Batch 000/469 | Gen/Dis Loss: 0.8579/0.6209\n",
|
|
"Epoch: 047/100 | Batch 100/469 | Gen/Dis Loss: 1.0072/0.5908\n",
|
|
"Epoch: 047/100 | Batch 200/469 | Gen/Dis Loss: 0.8694/0.6285\n",
|
|
"Epoch: 047/100 | Batch 300/469 | Gen/Dis Loss: 0.9354/0.6087\n",
|
|
"Epoch: 047/100 | Batch 400/469 | Gen/Dis Loss: 0.8800/0.6521\n",
|
|
"Time elapsed: 8.48 min\n",
|
|
"Epoch: 048/100 | Batch 000/469 | Gen/Dis Loss: 0.8513/0.6051\n",
|
|
"Epoch: 048/100 | Batch 100/469 | Gen/Dis Loss: 0.8803/0.6090\n",
|
|
"Epoch: 048/100 | Batch 200/469 | Gen/Dis Loss: 1.0930/0.6115\n",
|
|
"Epoch: 048/100 | Batch 300/469 | Gen/Dis Loss: 0.7406/0.6692\n",
|
|
"Epoch: 048/100 | Batch 400/469 | Gen/Dis Loss: 0.8551/0.6188\n",
|
|
"Time elapsed: 8.62 min\n",
|
|
"Epoch: 049/100 | Batch 000/469 | Gen/Dis Loss: 0.8792/0.5986\n",
|
|
"Epoch: 049/100 | Batch 100/469 | Gen/Dis Loss: 0.8424/0.6277\n",
|
|
"Epoch: 049/100 | Batch 200/469 | Gen/Dis Loss: 0.7973/0.6320\n",
|
|
"Epoch: 049/100 | Batch 300/469 | Gen/Dis Loss: 0.9188/0.5828\n",
|
|
"Epoch: 049/100 | Batch 400/469 | Gen/Dis Loss: 0.9253/0.6013\n",
|
|
"Time elapsed: 8.80 min\n",
|
|
"Epoch: 050/100 | Batch 000/469 | Gen/Dis Loss: 1.3241/0.5689\n",
|
|
"Epoch: 050/100 | Batch 100/469 | Gen/Dis Loss: 1.0220/0.5922\n",
|
|
"Epoch: 050/100 | Batch 200/469 | Gen/Dis Loss: 0.9210/0.6024\n",
|
|
"Epoch: 050/100 | Batch 300/469 | Gen/Dis Loss: 0.8139/0.6578\n",
|
|
"Epoch: 050/100 | Batch 400/469 | Gen/Dis Loss: 1.0371/0.5987\n",
|
|
"Time elapsed: 8.93 min\n",
|
|
"Epoch: 051/100 | Batch 000/469 | Gen/Dis Loss: 0.9253/0.6002\n",
|
|
"Epoch: 051/100 | Batch 100/469 | Gen/Dis Loss: 0.8154/0.5774\n",
|
|
"Epoch: 051/100 | Batch 200/469 | Gen/Dis Loss: 0.9697/0.6240\n",
|
|
"Epoch: 051/100 | Batch 300/469 | Gen/Dis Loss: 1.1185/0.5541\n",
|
|
"Epoch: 051/100 | Batch 400/469 | Gen/Dis Loss: 0.8016/0.6642\n",
|
|
"Time elapsed: 9.06 min\n",
|
|
"Epoch: 052/100 | Batch 000/469 | Gen/Dis Loss: 0.8716/0.6364\n",
|
|
"Epoch: 052/100 | Batch 100/469 | Gen/Dis Loss: 0.9636/0.5944\n",
|
|
"Epoch: 052/100 | Batch 200/469 | Gen/Dis Loss: 0.9511/0.6204\n",
|
|
"Epoch: 052/100 | Batch 300/469 | Gen/Dis Loss: 0.9293/0.5901\n",
|
|
"Epoch: 052/100 | Batch 400/469 | Gen/Dis Loss: 1.1139/0.5535\n",
|
|
"Time elapsed: 9.18 min\n",
|
|
"Epoch: 053/100 | Batch 000/469 | Gen/Dis Loss: 0.8345/0.6399\n",
|
|
"Epoch: 053/100 | Batch 100/469 | Gen/Dis Loss: 1.0420/0.5847\n",
|
|
"Epoch: 053/100 | Batch 200/469 | Gen/Dis Loss: 0.8887/0.6183\n",
|
|
"Epoch: 053/100 | Batch 300/469 | Gen/Dis Loss: 1.1280/0.5869\n",
|
|
"Epoch: 053/100 | Batch 400/469 | Gen/Dis Loss: 0.8391/0.6031\n",
|
|
"Time elapsed: 9.30 min\n",
|
|
"Epoch: 054/100 | Batch 000/469 | Gen/Dis Loss: 1.0584/0.5659\n",
|
|
"Epoch: 054/100 | Batch 100/469 | Gen/Dis Loss: 0.8722/0.5991\n",
|
|
"Epoch: 054/100 | Batch 200/469 | Gen/Dis Loss: 0.8416/0.6067\n",
|
|
"Epoch: 054/100 | Batch 300/469 | Gen/Dis Loss: 0.9295/0.5910\n",
|
|
"Epoch: 054/100 | Batch 400/469 | Gen/Dis Loss: 0.7705/0.6145\n",
|
|
"Time elapsed: 9.43 min\n",
|
|
"Epoch: 055/100 | Batch 000/469 | Gen/Dis Loss: 0.9697/0.6207\n",
|
|
"Epoch: 055/100 | Batch 100/469 | Gen/Dis Loss: 1.3702/0.5782\n",
|
|
"Epoch: 055/100 | Batch 200/469 | Gen/Dis Loss: 0.8874/0.6034\n",
|
|
"Epoch: 055/100 | Batch 300/469 | Gen/Dis Loss: 0.9273/0.6095\n",
|
|
"Epoch: 055/100 | Batch 400/469 | Gen/Dis Loss: 1.0736/0.5893\n",
|
|
"Time elapsed: 9.57 min\n",
|
|
"Epoch: 056/100 | Batch 000/469 | Gen/Dis Loss: 0.9631/0.5959\n",
|
|
"Epoch: 056/100 | Batch 100/469 | Gen/Dis Loss: 0.8657/0.6398\n",
|
|
"Epoch: 056/100 | Batch 200/469 | Gen/Dis Loss: 0.8120/0.6027\n",
|
|
"Epoch: 056/100 | Batch 300/469 | Gen/Dis Loss: 1.1529/0.6493\n",
|
|
"Epoch: 056/100 | Batch 400/469 | Gen/Dis Loss: 0.9172/0.5788\n",
|
|
"Time elapsed: 9.77 min\n",
|
|
"Epoch: 057/100 | Batch 000/469 | Gen/Dis Loss: 0.9197/0.6090\n",
|
|
"Epoch: 057/100 | Batch 100/469 | Gen/Dis Loss: 0.9413/0.6255\n",
|
|
"Epoch: 057/100 | Batch 200/469 | Gen/Dis Loss: 0.9020/0.5870\n",
|
|
"Epoch: 057/100 | Batch 300/469 | Gen/Dis Loss: 0.9947/0.5586\n",
|
|
"Epoch: 057/100 | Batch 400/469 | Gen/Dis Loss: 0.9077/0.6454\n",
|
|
"Time elapsed: 10.03 min\n",
|
|
"Epoch: 058/100 | Batch 000/469 | Gen/Dis Loss: 0.8899/0.6106\n",
|
|
"Epoch: 058/100 | Batch 100/469 | Gen/Dis Loss: 0.8154/0.6554\n",
|
|
"Epoch: 058/100 | Batch 200/469 | Gen/Dis Loss: 0.9307/0.5997\n",
|
|
"Epoch: 058/100 | Batch 300/469 | Gen/Dis Loss: 0.8293/0.5881\n",
|
|
"Epoch: 058/100 | Batch 400/469 | Gen/Dis Loss: 0.9434/0.6448\n",
|
|
"Time elapsed: 10.31 min\n",
|
|
"Epoch: 059/100 | Batch 000/469 | Gen/Dis Loss: 0.9638/0.6325\n",
|
|
"Epoch: 059/100 | Batch 100/469 | Gen/Dis Loss: 0.9374/0.6304\n",
|
|
"Epoch: 059/100 | Batch 200/469 | Gen/Dis Loss: 0.8452/0.6464\n",
|
|
"Epoch: 059/100 | Batch 300/469 | Gen/Dis Loss: 1.0170/0.6210\n",
|
|
"Epoch: 059/100 | Batch 400/469 | Gen/Dis Loss: 0.8808/0.5950\n",
|
|
"Time elapsed: 10.56 min\n",
|
|
"Epoch: 060/100 | Batch 000/469 | Gen/Dis Loss: 0.9076/0.5969\n",
|
|
"Epoch: 060/100 | Batch 100/469 | Gen/Dis Loss: 1.1195/0.6040\n",
|
|
"Epoch: 060/100 | Batch 200/469 | Gen/Dis Loss: 0.9015/0.6149\n",
|
|
"Epoch: 060/100 | Batch 300/469 | Gen/Dis Loss: 0.8414/0.5804\n",
|
|
"Epoch: 060/100 | Batch 400/469 | Gen/Dis Loss: 0.8220/0.6557\n",
|
|
"Time elapsed: 10.83 min\n",
|
|
"Epoch: 061/100 | Batch 000/469 | Gen/Dis Loss: 0.8411/0.6360\n",
|
|
"Epoch: 061/100 | Batch 100/469 | Gen/Dis Loss: 0.8431/0.6304\n",
|
|
"Epoch: 061/100 | Batch 200/469 | Gen/Dis Loss: 0.7740/0.6395\n",
|
|
"Epoch: 061/100 | Batch 300/469 | Gen/Dis Loss: 0.8840/0.5987\n",
|
|
"Epoch: 061/100 | Batch 400/469 | Gen/Dis Loss: 0.8510/0.6232\n",
|
|
"Time elapsed: 11.07 min\n",
|
|
"Epoch: 062/100 | Batch 000/469 | Gen/Dis Loss: 1.0286/0.6151\n",
|
|
"Epoch: 062/100 | Batch 100/469 | Gen/Dis Loss: 1.0516/0.5767\n",
|
|
"Epoch: 062/100 | Batch 200/469 | Gen/Dis Loss: 0.8182/0.5654\n",
|
|
"Epoch: 062/100 | Batch 300/469 | Gen/Dis Loss: 0.8658/0.6156\n",
|
|
"Epoch: 062/100 | Batch 400/469 | Gen/Dis Loss: 0.9674/0.6434\n",
|
|
"Time elapsed: 11.33 min\n",
|
|
"Epoch: 063/100 | Batch 000/469 | Gen/Dis Loss: 0.6952/0.6601\n",
|
|
"Epoch: 063/100 | Batch 100/469 | Gen/Dis Loss: 0.8180/0.6041\n",
|
|
"Epoch: 063/100 | Batch 200/469 | Gen/Dis Loss: 0.8224/0.6683\n",
|
|
"Epoch: 063/100 | Batch 300/469 | Gen/Dis Loss: 0.9604/0.5938\n",
|
|
"Epoch: 063/100 | Batch 400/469 | Gen/Dis Loss: 0.7969/0.6561\n",
|
|
"Time elapsed: 11.54 min\n",
|
|
"Epoch: 064/100 | Batch 000/469 | Gen/Dis Loss: 0.8544/0.6290\n",
|
|
"Epoch: 064/100 | Batch 100/469 | Gen/Dis Loss: 0.8685/0.5925\n",
|
|
"Epoch: 064/100 | Batch 200/469 | Gen/Dis Loss: 1.4746/0.5992\n",
|
|
"Epoch: 064/100 | Batch 300/469 | Gen/Dis Loss: 0.8570/0.6417\n",
|
|
"Epoch: 064/100 | Batch 400/469 | Gen/Dis Loss: 0.8588/0.6461\n",
|
|
"Time elapsed: 11.78 min\n",
|
|
"Epoch: 065/100 | Batch 000/469 | Gen/Dis Loss: 0.8579/0.6151\n",
|
|
"Epoch: 065/100 | Batch 100/469 | Gen/Dis Loss: 0.9720/0.5867\n",
|
|
"Epoch: 065/100 | Batch 200/469 | Gen/Dis Loss: 0.8870/0.6215\n",
|
|
"Epoch: 065/100 | Batch 300/469 | Gen/Dis Loss: 0.8184/0.6506\n",
|
|
"Epoch: 065/100 | Batch 400/469 | Gen/Dis Loss: 0.9247/0.6219\n",
|
|
"Time elapsed: 12.03 min\n",
|
|
"Epoch: 066/100 | Batch 000/469 | Gen/Dis Loss: 0.9073/0.6157\n",
|
|
"Epoch: 066/100 | Batch 100/469 | Gen/Dis Loss: 0.8459/0.6364\n",
|
|
"Epoch: 066/100 | Batch 200/469 | Gen/Dis Loss: 1.0687/0.5647\n",
|
|
"Epoch: 066/100 | Batch 300/469 | Gen/Dis Loss: 0.9213/0.6136\n",
|
|
"Epoch: 066/100 | Batch 400/469 | Gen/Dis Loss: 0.7895/0.6409\n",
|
|
"Time elapsed: 12.30 min\n",
|
|
"Epoch: 067/100 | Batch 000/469 | Gen/Dis Loss: 0.8258/0.6246\n",
|
|
"Epoch: 067/100 | Batch 100/469 | Gen/Dis Loss: 0.9616/0.5776\n",
|
|
"Epoch: 067/100 | Batch 200/469 | Gen/Dis Loss: 0.9039/0.6012\n",
|
|
"Epoch: 067/100 | Batch 300/469 | Gen/Dis Loss: 0.9857/0.5949\n",
|
|
"Epoch: 067/100 | Batch 400/469 | Gen/Dis Loss: 1.1779/0.5773\n",
|
|
"Time elapsed: 12.58 min\n",
|
|
"Epoch: 068/100 | Batch 000/469 | Gen/Dis Loss: 0.9631/0.6006\n",
|
|
"Epoch: 068/100 | Batch 100/469 | Gen/Dis Loss: 0.7157/0.6103\n",
|
|
"Epoch: 068/100 | Batch 200/469 | Gen/Dis Loss: 0.8400/0.6223\n",
|
|
"Epoch: 068/100 | Batch 300/469 | Gen/Dis Loss: 1.0586/0.5840\n",
|
|
"Epoch: 068/100 | Batch 400/469 | Gen/Dis Loss: 0.9487/0.6224\n",
|
|
"Time elapsed: 12.84 min\n",
|
|
"Epoch: 069/100 | Batch 000/469 | Gen/Dis Loss: 1.0124/0.5248\n",
|
|
"Epoch: 069/100 | Batch 100/469 | Gen/Dis Loss: 0.8849/0.6481\n",
|
|
"Epoch: 069/100 | Batch 200/469 | Gen/Dis Loss: 0.9250/0.6130\n",
|
|
"Epoch: 069/100 | Batch 300/469 | Gen/Dis Loss: 0.9207/0.6420\n",
|
|
"Epoch: 069/100 | Batch 400/469 | Gen/Dis Loss: 0.8661/0.6100\n",
|
|
"Time elapsed: 13.11 min\n",
|
|
"Epoch: 070/100 | Batch 000/469 | Gen/Dis Loss: 1.0647/0.6247\n",
|
|
"Epoch: 070/100 | Batch 100/469 | Gen/Dis Loss: 0.8877/0.6254\n",
|
|
"Epoch: 070/100 | Batch 200/469 | Gen/Dis Loss: 0.8151/0.6462\n",
|
|
"Epoch: 070/100 | Batch 300/469 | Gen/Dis Loss: 0.8807/0.6079\n",
|
|
"Epoch: 070/100 | Batch 400/469 | Gen/Dis Loss: 0.9690/0.6432\n",
|
|
"Time elapsed: 13.34 min\n",
|
|
"Epoch: 071/100 | Batch 000/469 | Gen/Dis Loss: 0.8764/0.6338\n",
|
|
"Epoch: 071/100 | Batch 100/469 | Gen/Dis Loss: 0.9052/0.5937\n",
|
|
"Epoch: 071/100 | Batch 200/469 | Gen/Dis Loss: 1.0023/0.5866\n",
|
|
"Epoch: 071/100 | Batch 300/469 | Gen/Dis Loss: 0.7945/0.6066\n",
|
|
"Epoch: 071/100 | Batch 400/469 | Gen/Dis Loss: 0.8566/0.6092\n",
|
|
"Time elapsed: 13.57 min\n",
|
|
"Epoch: 072/100 | Batch 000/469 | Gen/Dis Loss: 1.0826/0.5474\n",
|
|
"Epoch: 072/100 | Batch 100/469 | Gen/Dis Loss: 0.9077/0.6232\n",
|
|
"Epoch: 072/100 | Batch 200/469 | Gen/Dis Loss: 1.0860/0.6291\n",
|
|
"Epoch: 072/100 | Batch 300/469 | Gen/Dis Loss: 0.9009/0.6444\n",
|
|
"Epoch: 072/100 | Batch 400/469 | Gen/Dis Loss: 0.9546/0.6265\n",
|
|
"Time elapsed: 13.82 min\n",
|
|
"Epoch: 073/100 | Batch 000/469 | Gen/Dis Loss: 0.9126/0.5977\n",
|
|
"Epoch: 073/100 | Batch 100/469 | Gen/Dis Loss: 1.0169/0.6357\n",
|
|
"Epoch: 073/100 | Batch 200/469 | Gen/Dis Loss: 0.8760/0.6333\n",
|
|
"Epoch: 073/100 | Batch 300/469 | Gen/Dis Loss: 0.8972/0.5929\n",
|
|
"Epoch: 073/100 | Batch 400/469 | Gen/Dis Loss: 0.9535/0.6609\n",
|
|
"Time elapsed: 14.05 min\n",
|
|
"Epoch: 074/100 | Batch 000/469 | Gen/Dis Loss: 0.8905/0.6017\n",
|
|
"Epoch: 074/100 | Batch 100/469 | Gen/Dis Loss: 0.9040/0.6458\n",
|
|
"Epoch: 074/100 | Batch 200/469 | Gen/Dis Loss: 0.8277/0.6424\n",
|
|
"Epoch: 074/100 | Batch 300/469 | Gen/Dis Loss: 1.6138/0.5738\n",
|
|
"Epoch: 074/100 | Batch 400/469 | Gen/Dis Loss: 0.9943/0.6718\n",
|
|
"Time elapsed: 14.31 min\n",
|
|
"Epoch: 075/100 | Batch 000/469 | Gen/Dis Loss: 1.0839/0.6357\n",
|
|
"Epoch: 075/100 | Batch 100/469 | Gen/Dis Loss: 0.8858/0.6300\n",
|
|
"Epoch: 075/100 | Batch 200/469 | Gen/Dis Loss: 0.9034/0.6045\n",
|
|
"Epoch: 075/100 | Batch 300/469 | Gen/Dis Loss: 0.8336/0.5991\n",
|
|
"Epoch: 075/100 | Batch 400/469 | Gen/Dis Loss: 0.8414/0.6642\n",
|
|
"Time elapsed: 14.54 min\n",
|
|
"Epoch: 076/100 | Batch 000/469 | Gen/Dis Loss: 0.8422/0.6506\n",
|
|
"Epoch: 076/100 | Batch 100/469 | Gen/Dis Loss: 0.8560/0.5884\n",
|
|
"Epoch: 076/100 | Batch 200/469 | Gen/Dis Loss: 0.8066/0.6215\n",
|
|
"Epoch: 076/100 | Batch 300/469 | Gen/Dis Loss: 0.7987/0.6537\n",
|
|
"Epoch: 076/100 | Batch 400/469 | Gen/Dis Loss: 0.8784/0.5854\n",
|
|
"Time elapsed: 14.82 min\n",
|
|
"Epoch: 077/100 | Batch 000/469 | Gen/Dis Loss: 0.9845/0.6067\n",
|
|
"Epoch: 077/100 | Batch 100/469 | Gen/Dis Loss: 0.8514/0.6269\n",
|
|
"Epoch: 077/100 | Batch 200/469 | Gen/Dis Loss: 1.0448/0.6637\n",
|
|
"Epoch: 077/100 | Batch 300/469 | Gen/Dis Loss: 0.9325/0.5811\n",
|
|
"Epoch: 077/100 | Batch 400/469 | Gen/Dis Loss: 0.9169/0.5837\n",
|
|
"Time elapsed: 15.08 min\n",
|
|
"Epoch: 078/100 | Batch 000/469 | Gen/Dis Loss: 0.9746/0.6398\n",
|
|
"Epoch: 078/100 | Batch 100/469 | Gen/Dis Loss: 0.8518/0.6321\n",
|
|
"Epoch: 078/100 | Batch 200/469 | Gen/Dis Loss: 0.9485/0.5925\n",
|
|
"Epoch: 078/100 | Batch 300/469 | Gen/Dis Loss: 0.8646/0.6530\n",
|
|
"Epoch: 078/100 | Batch 400/469 | Gen/Dis Loss: 0.8851/0.6056\n",
|
|
"Time elapsed: 15.33 min\n",
|
|
"Epoch: 079/100 | Batch 000/469 | Gen/Dis Loss: 0.9215/0.6184\n",
|
|
"Epoch: 079/100 | Batch 100/469 | Gen/Dis Loss: 0.8766/0.5987\n",
|
|
"Epoch: 079/100 | Batch 200/469 | Gen/Dis Loss: 0.9273/0.6339\n",
|
|
"Epoch: 079/100 | Batch 300/469 | Gen/Dis Loss: 1.0428/0.6016\n",
|
|
"Epoch: 079/100 | Batch 400/469 | Gen/Dis Loss: 0.8676/0.6156\n",
|
|
"Time elapsed: 15.63 min\n",
|
|
"Epoch: 080/100 | Batch 000/469 | Gen/Dis Loss: 0.8753/0.6354\n",
|
|
"Epoch: 080/100 | Batch 100/469 | Gen/Dis Loss: 0.7689/0.6156\n",
|
|
"Epoch: 080/100 | Batch 200/469 | Gen/Dis Loss: 0.9524/0.5874\n",
|
|
"Epoch: 080/100 | Batch 300/469 | Gen/Dis Loss: 1.1452/0.5870\n",
|
|
"Epoch: 080/100 | Batch 400/469 | Gen/Dis Loss: 0.9418/0.5921\n",
|
|
"Time elapsed: 15.87 min\n",
|
|
"Epoch: 081/100 | Batch 000/469 | Gen/Dis Loss: 0.9341/0.5982\n",
|
|
"Epoch: 081/100 | Batch 100/469 | Gen/Dis Loss: 0.9412/0.6336\n",
|
|
"Epoch: 081/100 | Batch 200/469 | Gen/Dis Loss: 0.8976/0.6561\n",
|
|
"Epoch: 081/100 | Batch 300/469 | Gen/Dis Loss: 0.8531/0.6544\n",
|
|
"Epoch: 081/100 | Batch 400/469 | Gen/Dis Loss: 0.8658/0.6275\n",
|
|
"Time elapsed: 16.14 min\n",
|
|
"Epoch: 082/100 | Batch 000/469 | Gen/Dis Loss: 0.8624/0.6454\n",
|
|
"Epoch: 082/100 | Batch 100/469 | Gen/Dis Loss: 0.8182/0.5911\n",
|
|
"Epoch: 082/100 | Batch 200/469 | Gen/Dis Loss: 0.8794/0.6080\n",
|
|
"Epoch: 082/100 | Batch 300/469 | Gen/Dis Loss: 0.9631/0.6111\n",
|
|
"Epoch: 082/100 | Batch 400/469 | Gen/Dis Loss: 1.0426/0.6404\n",
|
|
"Time elapsed: 16.39 min\n",
|
|
"Epoch: 083/100 | Batch 000/469 | Gen/Dis Loss: 1.0449/0.6439\n",
|
|
"Epoch: 083/100 | Batch 100/469 | Gen/Dis Loss: 0.9290/0.6319\n",
|
|
"Epoch: 083/100 | Batch 200/469 | Gen/Dis Loss: 0.8768/0.6186\n",
|
|
"Epoch: 083/100 | Batch 300/469 | Gen/Dis Loss: 0.8202/0.6050\n",
|
|
"Epoch: 083/100 | Batch 400/469 | Gen/Dis Loss: 0.8840/0.6135\n",
|
|
"Time elapsed: 16.63 min\n",
|
|
"Epoch: 084/100 | Batch 000/469 | Gen/Dis Loss: 1.0632/0.6157\n",
|
|
"Epoch: 084/100 | Batch 100/469 | Gen/Dis Loss: 0.8863/0.5954\n",
|
|
"Epoch: 084/100 | Batch 200/469 | Gen/Dis Loss: 1.0618/0.6428\n",
|
|
"Epoch: 084/100 | Batch 300/469 | Gen/Dis Loss: 1.0627/0.5874\n",
|
|
"Epoch: 084/100 | Batch 400/469 | Gen/Dis Loss: 0.9114/0.6118\n",
|
|
"Time elapsed: 16.90 min\n",
|
|
"Epoch: 085/100 | Batch 000/469 | Gen/Dis Loss: 0.8453/0.6248\n",
|
|
"Epoch: 085/100 | Batch 100/469 | Gen/Dis Loss: 1.0609/0.6182\n",
|
|
"Epoch: 085/100 | Batch 200/469 | Gen/Dis Loss: 0.8899/0.6170\n",
|
|
"Epoch: 085/100 | Batch 300/469 | Gen/Dis Loss: 0.9211/0.6023\n",
|
|
"Epoch: 085/100 | Batch 400/469 | Gen/Dis Loss: 0.8161/0.6840\n",
|
|
"Time elapsed: 17.21 min\n",
|
|
"Epoch: 086/100 | Batch 000/469 | Gen/Dis Loss: 0.9190/0.5845\n",
|
|
"Epoch: 086/100 | Batch 100/469 | Gen/Dis Loss: 1.0762/0.6450\n",
|
|
"Epoch: 086/100 | Batch 200/469 | Gen/Dis Loss: 1.0070/0.6302\n",
|
|
"Epoch: 086/100 | Batch 300/469 | Gen/Dis Loss: 0.8805/0.6313\n",
|
|
"Epoch: 086/100 | Batch 400/469 | Gen/Dis Loss: 0.8568/0.6320\n",
|
|
"Time elapsed: 17.47 min\n",
|
|
"Epoch: 087/100 | Batch 000/469 | Gen/Dis Loss: 0.9597/0.6527\n",
|
|
"Epoch: 087/100 | Batch 100/469 | Gen/Dis Loss: 0.8664/0.6339\n",
|
|
"Epoch: 087/100 | Batch 200/469 | Gen/Dis Loss: 1.0466/0.6181\n",
|
|
"Epoch: 087/100 | Batch 300/469 | Gen/Dis Loss: 0.8645/0.6272\n",
|
|
"Epoch: 087/100 | Batch 400/469 | Gen/Dis Loss: 0.8296/0.6125\n",
|
|
"Time elapsed: 17.71 min\n",
|
|
"Epoch: 088/100 | Batch 000/469 | Gen/Dis Loss: 0.8497/0.6134\n",
|
|
"Epoch: 088/100 | Batch 100/469 | Gen/Dis Loss: 0.7984/0.6551\n",
|
|
"Epoch: 088/100 | Batch 200/469 | Gen/Dis Loss: 0.7777/0.6737\n",
|
|
"Epoch: 088/100 | Batch 300/469 | Gen/Dis Loss: 0.8157/0.6250\n",
|
|
"Epoch: 088/100 | Batch 400/469 | Gen/Dis Loss: 0.7993/0.6446\n",
|
|
"Time elapsed: 17.96 min\n",
|
|
"Epoch: 089/100 | Batch 000/469 | Gen/Dis Loss: 0.8526/0.6219\n",
|
|
"Epoch: 089/100 | Batch 100/469 | Gen/Dis Loss: 0.9565/0.6241\n",
|
|
"Epoch: 089/100 | Batch 200/469 | Gen/Dis Loss: 1.0437/0.6488\n",
|
|
"Epoch: 089/100 | Batch 300/469 | Gen/Dis Loss: 0.8082/0.6521\n",
|
|
"Epoch: 089/100 | Batch 400/469 | Gen/Dis Loss: 0.9082/0.6187\n",
|
|
"Time elapsed: 18.20 min\n",
|
|
"Epoch: 090/100 | Batch 000/469 | Gen/Dis Loss: 0.8507/0.6127\n",
|
|
"Epoch: 090/100 | Batch 100/469 | Gen/Dis Loss: 0.8370/0.6160\n",
|
|
"Epoch: 090/100 | Batch 200/469 | Gen/Dis Loss: 0.8270/0.6310\n",
|
|
"Epoch: 090/100 | Batch 300/469 | Gen/Dis Loss: 0.9313/0.6230\n",
|
|
"Epoch: 090/100 | Batch 400/469 | Gen/Dis Loss: 0.9462/0.6391\n",
|
|
"Time elapsed: 18.46 min\n",
|
|
"Epoch: 091/100 | Batch 000/469 | Gen/Dis Loss: 0.9294/0.6189\n",
|
|
"Epoch: 091/100 | Batch 100/469 | Gen/Dis Loss: 1.0533/0.6279\n",
|
|
"Epoch: 091/100 | Batch 200/469 | Gen/Dis Loss: 0.9623/0.6491\n",
|
|
"Epoch: 091/100 | Batch 300/469 | Gen/Dis Loss: 0.8521/0.6031\n",
|
|
"Epoch: 091/100 | Batch 400/469 | Gen/Dis Loss: 0.8233/0.6487\n",
|
|
"Time elapsed: 18.70 min\n",
|
|
"Epoch: 092/100 | Batch 000/469 | Gen/Dis Loss: 0.9691/0.6357\n",
|
|
"Epoch: 092/100 | Batch 100/469 | Gen/Dis Loss: 0.8876/0.6303\n",
|
|
"Epoch: 092/100 | Batch 200/469 | Gen/Dis Loss: 0.9333/0.6201\n",
|
|
"Epoch: 092/100 | Batch 300/469 | Gen/Dis Loss: 0.8813/0.5981\n",
|
|
"Epoch: 092/100 | Batch 400/469 | Gen/Dis Loss: 0.9026/0.6128\n",
|
|
"Time elapsed: 18.94 min\n",
|
|
"Epoch: 093/100 | Batch 000/469 | Gen/Dis Loss: 0.8874/0.6373\n",
|
|
"Epoch: 093/100 | Batch 100/469 | Gen/Dis Loss: 0.8537/0.6204\n",
|
|
"Epoch: 093/100 | Batch 200/469 | Gen/Dis Loss: 0.7982/0.6342\n",
|
|
"Epoch: 093/100 | Batch 300/469 | Gen/Dis Loss: 0.9005/0.6010\n",
|
|
"Epoch: 093/100 | Batch 400/469 | Gen/Dis Loss: 1.0532/0.6091\n",
|
|
"Time elapsed: 19.20 min\n",
|
|
"Epoch: 094/100 | Batch 000/469 | Gen/Dis Loss: 0.9877/0.6426\n",
|
|
"Epoch: 094/100 | Batch 100/469 | Gen/Dis Loss: 0.8308/0.6501\n",
|
|
"Epoch: 094/100 | Batch 200/469 | Gen/Dis Loss: 0.9217/0.6269\n",
|
|
"Epoch: 094/100 | Batch 300/469 | Gen/Dis Loss: 0.9183/0.6632\n",
|
|
"Epoch: 094/100 | Batch 400/469 | Gen/Dis Loss: 0.8859/0.6128\n",
|
|
"Time elapsed: 19.46 min\n",
|
|
"Epoch: 095/100 | Batch 000/469 | Gen/Dis Loss: 0.9032/0.6331\n",
|
|
"Epoch: 095/100 | Batch 100/469 | Gen/Dis Loss: 0.8298/0.6976\n",
|
|
"Epoch: 095/100 | Batch 200/469 | Gen/Dis Loss: 1.0004/0.6347\n",
|
|
"Epoch: 095/100 | Batch 300/469 | Gen/Dis Loss: 0.9161/0.6169\n",
|
|
"Epoch: 095/100 | Batch 400/469 | Gen/Dis Loss: 0.7622/0.6884\n",
|
|
"Time elapsed: 19.71 min\n",
|
|
"Epoch: 096/100 | Batch 000/469 | Gen/Dis Loss: 0.8816/0.5997\n",
|
|
"Epoch: 096/100 | Batch 100/469 | Gen/Dis Loss: 0.9499/0.5969\n",
|
|
"Epoch: 096/100 | Batch 200/469 | Gen/Dis Loss: 0.8974/0.6214\n",
|
|
"Epoch: 096/100 | Batch 300/469 | Gen/Dis Loss: 0.8853/0.6259\n",
|
|
"Epoch: 096/100 | Batch 400/469 | Gen/Dis Loss: 0.8107/0.6027\n",
|
|
"Time elapsed: 19.95 min\n",
|
|
"Epoch: 097/100 | Batch 000/469 | Gen/Dis Loss: 0.9242/0.6189\n",
|
|
"Epoch: 097/100 | Batch 100/469 | Gen/Dis Loss: 0.8917/0.6491\n",
|
|
"Epoch: 097/100 | Batch 200/469 | Gen/Dis Loss: 0.8729/0.6375\n",
|
|
"Epoch: 097/100 | Batch 300/469 | Gen/Dis Loss: 0.8848/0.5950\n",
|
|
"Epoch: 097/100 | Batch 400/469 | Gen/Dis Loss: 0.8502/0.6296\n",
|
|
"Time elapsed: 20.21 min\n",
|
|
"Epoch: 098/100 | Batch 000/469 | Gen/Dis Loss: 0.9020/0.6453\n",
|
|
"Epoch: 098/100 | Batch 100/469 | Gen/Dis Loss: 1.1077/0.5882\n",
|
|
"Epoch: 098/100 | Batch 200/469 | Gen/Dis Loss: 0.9468/0.6364\n",
|
|
"Epoch: 098/100 | Batch 300/469 | Gen/Dis Loss: 0.8636/0.6313\n",
|
|
"Epoch: 098/100 | Batch 400/469 | Gen/Dis Loss: 0.9089/0.6911\n",
|
|
"Time elapsed: 20.45 min\n",
|
|
"Epoch: 099/100 | Batch 000/469 | Gen/Dis Loss: 0.9101/0.6386\n",
|
|
"Epoch: 099/100 | Batch 100/469 | Gen/Dis Loss: 0.8036/0.6396\n",
|
|
"Epoch: 099/100 | Batch 200/469 | Gen/Dis Loss: 0.9393/0.6060\n",
|
|
"Epoch: 099/100 | Batch 300/469 | Gen/Dis Loss: 0.8776/0.6242\n",
|
|
"Epoch: 099/100 | Batch 400/469 | Gen/Dis Loss: 0.8244/0.6278\n",
|
|
"Time elapsed: 20.68 min\n",
|
|
"Epoch: 100/100 | Batch 000/469 | Gen/Dis Loss: 0.8623/0.6496\n",
|
|
"Epoch: 100/100 | Batch 100/469 | Gen/Dis Loss: 0.9965/0.5964\n",
|
|
"Epoch: 100/100 | Batch 200/469 | Gen/Dis Loss: 0.8666/0.6306\n",
|
|
"Epoch: 100/100 | Batch 300/469 | Gen/Dis Loss: 1.1555/0.6634\n",
|
|
"Epoch: 100/100 | Batch 400/469 | Gen/Dis Loss: 0.9071/0.6545\n",
|
|
"Time elapsed: 20.94 min\n",
|
|
"Total Training Time: 20.94 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": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 2 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"ax1 = plt.subplot(1, 1, 1)\n",
|
|
"ax1.plot(range(len(gener_costs)), gener_costs, label='Generator loss')\n",
|
|
"ax1.plot(range(len(discr_costs)), discr_costs, label='Discriminator loss')\n",
|
|
"ax1.set_xlabel('Iterations')\n",
|
|
"ax1.set_ylabel('Loss')\n",
|
|
"ax1.legend()\n",
|
|
"\n",
|
|
"###################\n",
|
|
"# Set scond x-axis\n",
|
|
"ax2 = ax1.twiny()\n",
|
|
"newlabel = list(range(NUM_EPOCHS+1))\n",
|
|
"iter_per_epoch = len(train_loader)\n",
|
|
"newpos = [e*iter_per_epoch for e in newlabel]\n",
|
|
"\n",
|
|
"ax2.set_xticklabels(newlabel[::10])\n",
|
|
"ax2.set_xticks(newpos[::10])\n",
|
|
"\n",
|
|
"ax2.xaxis.set_ticks_position('bottom')\n",
|
|
"ax2.xaxis.set_label_position('bottom')\n",
|
|
"ax2.spines['bottom'].set_position(('outward', 45))\n",
|
|
"ax2.set_xlabel('Epochs')\n",
|
|
"ax2.set_xlim(ax1.get_xlim())\n",
|
|
"###################\n",
|
|
"\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.3"
|
|
},
|
|
"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": 4
|
|
}
|