rasbt--deeplearning-models
1232 行
95 KiB
Plaintext
1232 行
95 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.1.post2\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": [
|
|
"# Convolutional 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.0001\n",
|
|
"discriminator_learning_rate = 0.0001\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",
|
|
" num_workers=4,\n",
|
|
" shuffle=True)\n",
|
|
"\n",
|
|
"test_loader = DataLoader(dataset=test_dataset, \n",
|
|
" batch_size=BATCH_SIZE,\n",
|
|
" num_workers=4,\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",
|
|
"class Flatten(nn.Module):\n",
|
|
" def forward(self, input):\n",
|
|
" return input.view(input.size(0), -1)\n",
|
|
" \n",
|
|
"class Reshape1(nn.Module):\n",
|
|
" def forward(self, input):\n",
|
|
" return input.view(input.size(0), 64, 7, 7)\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",
|
|
" \n",
|
|
" nn.Linear(LATENT_DIM, 3136, bias=False),\n",
|
|
" nn.BatchNorm1d(num_features=3136),\n",
|
|
" nn.LeakyReLU(inplace=True, negative_slope=0.0001),\n",
|
|
" Reshape1(),\n",
|
|
" \n",
|
|
" nn.ConvTranspose2d(in_channels=64, out_channels=32, kernel_size=(3, 3), stride=(2, 2), padding=1, bias=False),\n",
|
|
" nn.BatchNorm2d(num_features=32),\n",
|
|
" nn.LeakyReLU(inplace=True, negative_slope=0.0001),\n",
|
|
" #nn.Dropout2d(p=0.2),\n",
|
|
" \n",
|
|
" nn.ConvTranspose2d(in_channels=32, out_channels=16, kernel_size=(3, 3), stride=(2, 2), padding=1, bias=False),\n",
|
|
" nn.BatchNorm2d(num_features=16),\n",
|
|
" nn.LeakyReLU(inplace=True, negative_slope=0.0001),\n",
|
|
" #nn.Dropout2d(p=0.2),\n",
|
|
" \n",
|
|
" nn.ConvTranspose2d(in_channels=16, out_channels=8, kernel_size=(3, 3), stride=(1, 1), padding=0, bias=False),\n",
|
|
" nn.BatchNorm2d(num_features=8),\n",
|
|
" nn.LeakyReLU(inplace=True, negative_slope=0.0001),\n",
|
|
" #nn.Dropout2d(p=0.2),\n",
|
|
" \n",
|
|
" nn.ConvTranspose2d(in_channels=8, out_channels=1, kernel_size=(2, 2), stride=(1, 1), padding=0, bias=False),\n",
|
|
" nn.Tanh()\n",
|
|
" )\n",
|
|
" \n",
|
|
" self.discriminator = nn.Sequential(\n",
|
|
" nn.Conv2d(in_channels=1, out_channels=8, padding=1, kernel_size=(3, 3), stride=(2, 2), bias=False),\n",
|
|
" nn.BatchNorm2d(num_features=8),\n",
|
|
" nn.LeakyReLU(inplace=True, negative_slope=0.0001), \n",
|
|
" #nn.Dropout2d(p=0.2),\n",
|
|
" \n",
|
|
" nn.Conv2d(in_channels=8, out_channels=32, padding=1, kernel_size=(3, 3), stride=(2, 2), bias=False),\n",
|
|
" nn.BatchNorm2d(num_features=32),\n",
|
|
" nn.LeakyReLU(inplace=True, negative_slope=0.0001), \n",
|
|
" #nn.Dropout2d(p=0.2),\n",
|
|
" \n",
|
|
" Flatten(),\n",
|
|
"\n",
|
|
" nn.Linear(7*7*32, 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)\n",
|
|
"\n",
|
|
"\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"GAN(\n",
|
|
" (generator): Sequential(\n",
|
|
" (0): Linear(in_features=100, out_features=3136, bias=False)\n",
|
|
" (1): BatchNorm1d(3136, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
|
|
" (2): LeakyReLU(negative_slope=0.0001, inplace)\n",
|
|
" (3): Reshape1()\n",
|
|
" (4): ConvTranspose2d(64, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
|
|
" (5): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
|
|
" (6): LeakyReLU(negative_slope=0.0001, inplace)\n",
|
|
" (7): ConvTranspose2d(32, 16, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
|
|
" (8): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
|
|
" (9): LeakyReLU(negative_slope=0.0001, inplace)\n",
|
|
" (10): ConvTranspose2d(16, 8, kernel_size=(3, 3), stride=(1, 1), bias=False)\n",
|
|
" (11): BatchNorm2d(8, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
|
|
" (12): LeakyReLU(negative_slope=0.0001, inplace)\n",
|
|
" (13): ConvTranspose2d(8, 1, kernel_size=(2, 2), stride=(1, 1), bias=False)\n",
|
|
" (14): Tanh()\n",
|
|
" )\n",
|
|
" (discriminator): Sequential(\n",
|
|
" (0): Conv2d(1, 8, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
|
|
" (1): BatchNorm2d(8, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
|
|
" (2): LeakyReLU(negative_slope=0.0001, inplace)\n",
|
|
" (3): Conv2d(8, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
|
|
" (4): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
|
|
" (5): LeakyReLU(negative_slope=0.0001, inplace)\n",
|
|
" (6): Flatten()\n",
|
|
" (7): Linear(in_features=1568, out_features=1, bias=True)\n",
|
|
" )\n",
|
|
")\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"torch.manual_seed(random_seed)\n",
|
|
"\n",
|
|
"#del model\n",
|
|
"model = GAN()\n",
|
|
"model = model.to(device)\n",
|
|
"\n",
|
|
"print(model)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"'\\noutputs = []\\ndef hook(module, input, output):\\n outputs.append(output)\\n\\n#for i, layer in enumerate(model.discriminator):\\n# if isinstance(layer, torch.nn.modules.conv.Conv2d):\\n# model.discriminator[i].register_forward_hook(hook)\\n\\nfor i, layer in enumerate(model.generator):\\n if isinstance(layer, torch.nn.modules.ConvTranspose2d):\\n model.generator[i].register_forward_hook(hook)\\n'"
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"### ## FOR DEBUGGING\n",
|
|
"\n",
|
|
"\"\"\"\n",
|
|
"outputs = []\n",
|
|
"def hook(module, input, output):\n",
|
|
" outputs.append(output)\n",
|
|
"\n",
|
|
"#for i, layer in enumerate(model.discriminator):\n",
|
|
"# if isinstance(layer, torch.nn.modules.conv.Conv2d):\n",
|
|
"# model.discriminator[i].register_forward_hook(hook)\n",
|
|
"\n",
|
|
"for i, layer in enumerate(model.generator):\n",
|
|
" if isinstance(layer, torch.nn.modules.ConvTranspose2d):\n",
|
|
" model.generator[i].register_forward_hook(hook)\n",
|
|
"\"\"\""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"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": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch: 001/100 | Batch 000/469 | Gen/Dis Loss: 0.7258/0.7058\n",
|
|
"Epoch: 001/100 | Batch 100/469 | Gen/Dis Loss: 0.7567/0.5799\n",
|
|
"Epoch: 001/100 | Batch 200/469 | Gen/Dis Loss: 0.8557/0.5516\n",
|
|
"Epoch: 001/100 | Batch 300/469 | Gen/Dis Loss: 0.8765/0.5584\n",
|
|
"Epoch: 001/100 | Batch 400/469 | Gen/Dis Loss: 0.9139/0.5442\n",
|
|
"Time elapsed: 0.11 min\n",
|
|
"Epoch: 002/100 | Batch 000/469 | Gen/Dis Loss: 0.9574/0.5057\n",
|
|
"Epoch: 002/100 | Batch 100/469 | Gen/Dis Loss: 0.8926/0.5280\n",
|
|
"Epoch: 002/100 | Batch 200/469 | Gen/Dis Loss: 0.8679/0.5756\n",
|
|
"Epoch: 002/100 | Batch 300/469 | Gen/Dis Loss: 0.8515/0.5659\n",
|
|
"Epoch: 002/100 | Batch 400/469 | Gen/Dis Loss: 0.8613/0.5464\n",
|
|
"Time elapsed: 0.21 min\n",
|
|
"Epoch: 003/100 | Batch 000/469 | Gen/Dis Loss: 0.8104/0.5903\n",
|
|
"Epoch: 003/100 | Batch 100/469 | Gen/Dis Loss: 0.8360/0.5638\n",
|
|
"Epoch: 003/100 | Batch 200/469 | Gen/Dis Loss: 0.8020/0.6238\n",
|
|
"Epoch: 003/100 | Batch 300/469 | Gen/Dis Loss: 0.8124/0.5977\n",
|
|
"Epoch: 003/100 | Batch 400/469 | Gen/Dis Loss: 0.8207/0.6125\n",
|
|
"Time elapsed: 0.32 min\n",
|
|
"Epoch: 004/100 | Batch 000/469 | Gen/Dis Loss: 0.8289/0.6016\n",
|
|
"Epoch: 004/100 | Batch 100/469 | Gen/Dis Loss: 0.8377/0.5820\n",
|
|
"Epoch: 004/100 | Batch 200/469 | Gen/Dis Loss: 0.7950/0.6195\n",
|
|
"Epoch: 004/100 | Batch 300/469 | Gen/Dis Loss: 0.8128/0.5942\n",
|
|
"Epoch: 004/100 | Batch 400/469 | Gen/Dis Loss: 0.8136/0.5993\n",
|
|
"Time elapsed: 0.43 min\n",
|
|
"Epoch: 005/100 | Batch 000/469 | Gen/Dis Loss: 0.8302/0.5856\n",
|
|
"Epoch: 005/100 | Batch 100/469 | Gen/Dis Loss: 0.8233/0.6077\n",
|
|
"Epoch: 005/100 | Batch 200/469 | Gen/Dis Loss: 0.8893/0.5796\n",
|
|
"Epoch: 005/100 | Batch 300/469 | Gen/Dis Loss: 0.8582/0.5901\n",
|
|
"Epoch: 005/100 | Batch 400/469 | Gen/Dis Loss: 0.8452/0.5712\n",
|
|
"Time elapsed: 0.54 min\n",
|
|
"Epoch: 006/100 | Batch 000/469 | Gen/Dis Loss: 0.8466/0.5833\n",
|
|
"Epoch: 006/100 | Batch 100/469 | Gen/Dis Loss: 0.8409/0.5632\n",
|
|
"Epoch: 006/100 | Batch 200/469 | Gen/Dis Loss: 0.8691/0.5583\n",
|
|
"Epoch: 006/100 | Batch 300/469 | Gen/Dis Loss: 0.8728/0.5750\n",
|
|
"Epoch: 006/100 | Batch 400/469 | Gen/Dis Loss: 0.8528/0.5493\n",
|
|
"Time elapsed: 0.65 min\n",
|
|
"Epoch: 007/100 | Batch 000/469 | Gen/Dis Loss: 0.9289/0.5365\n",
|
|
"Epoch: 007/100 | Batch 100/469 | Gen/Dis Loss: 0.9377/0.5138\n",
|
|
"Epoch: 007/100 | Batch 200/469 | Gen/Dis Loss: 0.9518/0.5212\n",
|
|
"Epoch: 007/100 | Batch 300/469 | Gen/Dis Loss: 0.9563/0.5138\n",
|
|
"Epoch: 007/100 | Batch 400/469 | Gen/Dis Loss: 0.9499/0.5089\n",
|
|
"Time elapsed: 0.76 min\n",
|
|
"Epoch: 008/100 | Batch 000/469 | Gen/Dis Loss: 0.9215/0.5256\n",
|
|
"Epoch: 008/100 | Batch 100/469 | Gen/Dis Loss: 0.9297/0.5364\n",
|
|
"Epoch: 008/100 | Batch 200/469 | Gen/Dis Loss: 0.9361/0.5601\n",
|
|
"Epoch: 008/100 | Batch 300/469 | Gen/Dis Loss: 0.8759/0.5494\n",
|
|
"Epoch: 008/100 | Batch 400/469 | Gen/Dis Loss: 0.8834/0.5512\n",
|
|
"Time elapsed: 0.87 min\n",
|
|
"Epoch: 009/100 | Batch 000/469 | Gen/Dis Loss: 0.9020/0.5370\n",
|
|
"Epoch: 009/100 | Batch 100/469 | Gen/Dis Loss: 0.9490/0.5464\n",
|
|
"Epoch: 009/100 | Batch 200/469 | Gen/Dis Loss: 0.9454/0.5416\n",
|
|
"Epoch: 009/100 | Batch 300/469 | Gen/Dis Loss: 0.9583/0.5306\n",
|
|
"Epoch: 009/100 | Batch 400/469 | Gen/Dis Loss: 0.8727/0.5780\n",
|
|
"Time elapsed: 0.99 min\n",
|
|
"Epoch: 010/100 | Batch 000/469 | Gen/Dis Loss: 0.8831/0.5621\n",
|
|
"Epoch: 010/100 | Batch 100/469 | Gen/Dis Loss: 0.7967/0.6041\n",
|
|
"Epoch: 010/100 | Batch 200/469 | Gen/Dis Loss: 0.9212/0.5492\n",
|
|
"Epoch: 010/100 | Batch 300/469 | Gen/Dis Loss: 0.8104/0.5859\n",
|
|
"Epoch: 010/100 | Batch 400/469 | Gen/Dis Loss: 0.8940/0.5626\n",
|
|
"Time elapsed: 1.10 min\n",
|
|
"Epoch: 011/100 | Batch 000/469 | Gen/Dis Loss: 0.8486/0.5441\n",
|
|
"Epoch: 011/100 | Batch 100/469 | Gen/Dis Loss: 0.8691/0.5584\n",
|
|
"Epoch: 011/100 | Batch 200/469 | Gen/Dis Loss: 0.9293/0.5677\n",
|
|
"Epoch: 011/100 | Batch 300/469 | Gen/Dis Loss: 0.9209/0.5508\n",
|
|
"Epoch: 011/100 | Batch 400/469 | Gen/Dis Loss: 0.9619/0.5608\n",
|
|
"Time elapsed: 1.21 min\n",
|
|
"Epoch: 012/100 | Batch 000/469 | Gen/Dis Loss: 0.8695/0.6126\n",
|
|
"Epoch: 012/100 | Batch 100/469 | Gen/Dis Loss: 0.8749/0.5669\n",
|
|
"Epoch: 012/100 | Batch 200/469 | Gen/Dis Loss: 0.8635/0.5544\n",
|
|
"Epoch: 012/100 | Batch 300/469 | Gen/Dis Loss: 0.8324/0.5899\n",
|
|
"Epoch: 012/100 | Batch 400/469 | Gen/Dis Loss: 0.9012/0.5869\n",
|
|
"Time elapsed: 1.32 min\n",
|
|
"Epoch: 013/100 | Batch 000/469 | Gen/Dis Loss: 0.9355/0.5585\n",
|
|
"Epoch: 013/100 | Batch 100/469 | Gen/Dis Loss: 0.8476/0.5716\n",
|
|
"Epoch: 013/100 | Batch 200/469 | Gen/Dis Loss: 0.8727/0.5741\n",
|
|
"Epoch: 013/100 | Batch 300/469 | Gen/Dis Loss: 0.8235/0.6209\n",
|
|
"Epoch: 013/100 | Batch 400/469 | Gen/Dis Loss: 0.8470/0.5796\n",
|
|
"Time elapsed: 1.43 min\n",
|
|
"Epoch: 014/100 | Batch 000/469 | Gen/Dis Loss: 0.8618/0.5966\n",
|
|
"Epoch: 014/100 | Batch 100/469 | Gen/Dis Loss: 0.9027/0.5763\n",
|
|
"Epoch: 014/100 | Batch 200/469 | Gen/Dis Loss: 0.8810/0.6095\n",
|
|
"Epoch: 014/100 | Batch 300/469 | Gen/Dis Loss: 0.8508/0.6071\n",
|
|
"Epoch: 014/100 | Batch 400/469 | Gen/Dis Loss: 0.8484/0.6244\n",
|
|
"Time elapsed: 1.54 min\n",
|
|
"Epoch: 015/100 | Batch 000/469 | Gen/Dis Loss: 0.9484/0.5475\n",
|
|
"Epoch: 015/100 | Batch 100/469 | Gen/Dis Loss: 0.8212/0.6268\n",
|
|
"Epoch: 015/100 | Batch 200/469 | Gen/Dis Loss: 0.8781/0.5900\n",
|
|
"Epoch: 015/100 | Batch 300/469 | Gen/Dis Loss: 0.8621/0.5965\n",
|
|
"Epoch: 015/100 | Batch 400/469 | Gen/Dis Loss: 0.9071/0.5907\n",
|
|
"Time elapsed: 1.66 min\n",
|
|
"Epoch: 016/100 | Batch 000/469 | Gen/Dis Loss: 0.8462/0.6186\n",
|
|
"Epoch: 016/100 | Batch 100/469 | Gen/Dis Loss: 0.9176/0.5835\n",
|
|
"Epoch: 016/100 | Batch 200/469 | Gen/Dis Loss: 0.8803/0.5979\n",
|
|
"Epoch: 016/100 | Batch 300/469 | Gen/Dis Loss: 0.8445/0.6224\n",
|
|
"Epoch: 016/100 | Batch 400/469 | Gen/Dis Loss: 0.8850/0.5681\n",
|
|
"Time elapsed: 1.77 min\n",
|
|
"Epoch: 017/100 | Batch 000/469 | Gen/Dis Loss: 0.9128/0.5657\n",
|
|
"Epoch: 017/100 | Batch 100/469 | Gen/Dis Loss: 0.8875/0.6418\n",
|
|
"Epoch: 017/100 | Batch 200/469 | Gen/Dis Loss: 0.8722/0.5973\n",
|
|
"Epoch: 017/100 | Batch 300/469 | Gen/Dis Loss: 0.7493/0.6580\n",
|
|
"Epoch: 017/100 | Batch 400/469 | Gen/Dis Loss: 0.8926/0.6142\n",
|
|
"Time elapsed: 1.88 min\n",
|
|
"Epoch: 018/100 | Batch 000/469 | Gen/Dis Loss: 0.7542/0.6373\n",
|
|
"Epoch: 018/100 | Batch 100/469 | Gen/Dis Loss: 0.8295/0.5998\n",
|
|
"Epoch: 018/100 | Batch 200/469 | Gen/Dis Loss: 0.8527/0.5995\n",
|
|
"Epoch: 018/100 | Batch 300/469 | Gen/Dis Loss: 0.8710/0.6157\n",
|
|
"Epoch: 018/100 | Batch 400/469 | Gen/Dis Loss: 0.8623/0.5908\n",
|
|
"Time elapsed: 1.99 min\n",
|
|
"Epoch: 019/100 | Batch 000/469 | Gen/Dis Loss: 0.8325/0.6488\n",
|
|
"Epoch: 019/100 | Batch 100/469 | Gen/Dis Loss: 0.8263/0.6105\n",
|
|
"Epoch: 019/100 | Batch 200/469 | Gen/Dis Loss: 0.8115/0.6201\n",
|
|
"Epoch: 019/100 | Batch 300/469 | Gen/Dis Loss: 0.8984/0.6106\n",
|
|
"Epoch: 019/100 | Batch 400/469 | Gen/Dis Loss: 0.7243/0.6525\n",
|
|
"Time elapsed: 2.10 min\n",
|
|
"Epoch: 020/100 | Batch 000/469 | Gen/Dis Loss: 0.8168/0.6151\n",
|
|
"Epoch: 020/100 | Batch 100/469 | Gen/Dis Loss: 0.8724/0.5855\n",
|
|
"Epoch: 020/100 | Batch 200/469 | Gen/Dis Loss: 0.8348/0.6396\n",
|
|
"Epoch: 020/100 | Batch 300/469 | Gen/Dis Loss: 0.8068/0.6394\n",
|
|
"Epoch: 020/100 | Batch 400/469 | Gen/Dis Loss: 0.7860/0.6438\n",
|
|
"Time elapsed: 2.22 min\n",
|
|
"Epoch: 021/100 | Batch 000/469 | Gen/Dis Loss: 0.8073/0.6350\n",
|
|
"Epoch: 021/100 | Batch 100/469 | Gen/Dis Loss: 0.8256/0.6216\n",
|
|
"Epoch: 021/100 | Batch 200/469 | Gen/Dis Loss: 0.8479/0.5804\n",
|
|
"Epoch: 021/100 | Batch 300/469 | Gen/Dis Loss: 0.7799/0.6330\n",
|
|
"Epoch: 021/100 | Batch 400/469 | Gen/Dis Loss: 0.7092/0.6785\n",
|
|
"Time elapsed: 2.33 min\n",
|
|
"Epoch: 022/100 | Batch 000/469 | Gen/Dis Loss: 0.7784/0.6390\n",
|
|
"Epoch: 022/100 | Batch 100/469 | Gen/Dis Loss: 0.7742/0.6419\n",
|
|
"Epoch: 022/100 | Batch 200/469 | Gen/Dis Loss: 0.7467/0.6831\n",
|
|
"Epoch: 022/100 | Batch 300/469 | Gen/Dis Loss: 0.8776/0.6048\n",
|
|
"Epoch: 022/100 | Batch 400/469 | Gen/Dis Loss: 0.7749/0.6724\n",
|
|
"Time elapsed: 2.44 min\n",
|
|
"Epoch: 023/100 | Batch 000/469 | Gen/Dis Loss: 0.8387/0.6316\n",
|
|
"Epoch: 023/100 | Batch 100/469 | Gen/Dis Loss: 0.7872/0.6180\n",
|
|
"Epoch: 023/100 | Batch 200/469 | Gen/Dis Loss: 0.7965/0.6351\n",
|
|
"Epoch: 023/100 | Batch 300/469 | Gen/Dis Loss: 0.8374/0.6462\n",
|
|
"Epoch: 023/100 | Batch 400/469 | Gen/Dis Loss: 0.7291/0.6859\n",
|
|
"Time elapsed: 2.55 min\n",
|
|
"Epoch: 024/100 | Batch 000/469 | Gen/Dis Loss: 0.7957/0.6495\n",
|
|
"Epoch: 024/100 | Batch 100/469 | Gen/Dis Loss: 0.7377/0.6517\n",
|
|
"Epoch: 024/100 | Batch 200/469 | Gen/Dis Loss: 0.9071/0.6035\n",
|
|
"Epoch: 024/100 | Batch 300/469 | Gen/Dis Loss: 0.7824/0.6577\n",
|
|
"Epoch: 024/100 | Batch 400/469 | Gen/Dis Loss: 0.7642/0.6780\n",
|
|
"Time elapsed: 2.67 min\n",
|
|
"Epoch: 025/100 | Batch 000/469 | Gen/Dis Loss: 0.8147/0.6543\n",
|
|
"Epoch: 025/100 | Batch 100/469 | Gen/Dis Loss: 0.7213/0.6899\n",
|
|
"Epoch: 025/100 | Batch 200/469 | Gen/Dis Loss: 0.7999/0.6510\n",
|
|
"Epoch: 025/100 | Batch 300/469 | Gen/Dis Loss: 0.7496/0.6523\n",
|
|
"Epoch: 025/100 | Batch 400/469 | Gen/Dis Loss: 0.7749/0.6136\n",
|
|
"Time elapsed: 2.78 min\n",
|
|
"Epoch: 026/100 | Batch 000/469 | Gen/Dis Loss: 0.7577/0.6663\n",
|
|
"Epoch: 026/100 | Batch 100/469 | Gen/Dis Loss: 0.7664/0.6674\n",
|
|
"Epoch: 026/100 | Batch 200/469 | Gen/Dis Loss: 0.7707/0.6712\n",
|
|
"Epoch: 026/100 | Batch 300/469 | Gen/Dis Loss: 0.8347/0.6354\n",
|
|
"Epoch: 026/100 | Batch 400/469 | Gen/Dis Loss: 0.7879/0.6534\n",
|
|
"Time elapsed: 2.89 min\n",
|
|
"Epoch: 027/100 | Batch 000/469 | Gen/Dis Loss: 0.8289/0.6536\n",
|
|
"Epoch: 027/100 | Batch 100/469 | Gen/Dis Loss: 0.7284/0.6865\n",
|
|
"Epoch: 027/100 | Batch 200/469 | Gen/Dis Loss: 0.7622/0.6486\n",
|
|
"Epoch: 027/100 | Batch 300/469 | Gen/Dis Loss: 0.7362/0.6817\n",
|
|
"Epoch: 027/100 | Batch 400/469 | Gen/Dis Loss: 0.8032/0.6797\n",
|
|
"Time elapsed: 3.00 min\n",
|
|
"Epoch: 028/100 | Batch 000/469 | Gen/Dis Loss: 0.7426/0.6480\n",
|
|
"Epoch: 028/100 | Batch 100/469 | Gen/Dis Loss: 0.8362/0.6409\n",
|
|
"Epoch: 028/100 | Batch 200/469 | Gen/Dis Loss: 0.8773/0.6394\n",
|
|
"Epoch: 028/100 | Batch 300/469 | Gen/Dis Loss: 0.7430/0.6850\n",
|
|
"Epoch: 028/100 | Batch 400/469 | Gen/Dis Loss: 0.7607/0.6673\n",
|
|
"Time elapsed: 3.11 min\n",
|
|
"Epoch: 029/100 | Batch 000/469 | Gen/Dis Loss: 0.8062/0.6492\n",
|
|
"Epoch: 029/100 | Batch 100/469 | Gen/Dis Loss: 0.7696/0.6918\n",
|
|
"Epoch: 029/100 | Batch 200/469 | Gen/Dis Loss: 0.7795/0.6734\n",
|
|
"Epoch: 029/100 | Batch 300/469 | Gen/Dis Loss: 0.8234/0.6511\n",
|
|
"Epoch: 029/100 | Batch 400/469 | Gen/Dis Loss: 0.8141/0.6537\n",
|
|
"Time elapsed: 3.23 min\n",
|
|
"Epoch: 030/100 | Batch 000/469 | Gen/Dis Loss: 0.7165/0.7027\n",
|
|
"Epoch: 030/100 | Batch 100/469 | Gen/Dis Loss: 0.7798/0.6663\n",
|
|
"Epoch: 030/100 | Batch 200/469 | Gen/Dis Loss: 0.7614/0.6543\n",
|
|
"Epoch: 030/100 | Batch 300/469 | Gen/Dis Loss: 0.7124/0.6648\n",
|
|
"Epoch: 030/100 | Batch 400/469 | Gen/Dis Loss: 0.8009/0.6549\n",
|
|
"Time elapsed: 3.34 min\n",
|
|
"Epoch: 031/100 | Batch 000/469 | Gen/Dis Loss: 0.7622/0.6629\n",
|
|
"Epoch: 031/100 | Batch 100/469 | Gen/Dis Loss: 0.7727/0.6778\n",
|
|
"Epoch: 031/100 | Batch 200/469 | Gen/Dis Loss: 0.7585/0.6426\n",
|
|
"Epoch: 031/100 | Batch 300/469 | Gen/Dis Loss: 0.7830/0.6830\n",
|
|
"Epoch: 031/100 | Batch 400/469 | Gen/Dis Loss: 0.7606/0.6691\n",
|
|
"Time elapsed: 3.45 min\n",
|
|
"Epoch: 032/100 | Batch 000/469 | Gen/Dis Loss: 0.7618/0.6737\n",
|
|
"Epoch: 032/100 | Batch 100/469 | Gen/Dis Loss: 0.7255/0.6922\n",
|
|
"Epoch: 032/100 | Batch 200/469 | Gen/Dis Loss: 0.7635/0.6686\n",
|
|
"Epoch: 032/100 | Batch 300/469 | Gen/Dis Loss: 0.7324/0.6678\n",
|
|
"Epoch: 032/100 | Batch 400/469 | Gen/Dis Loss: 0.7082/0.6948\n",
|
|
"Time elapsed: 3.56 min\n",
|
|
"Epoch: 033/100 | Batch 000/469 | Gen/Dis Loss: 0.7918/0.6407\n",
|
|
"Epoch: 033/100 | Batch 100/469 | Gen/Dis Loss: 0.7922/0.6447\n",
|
|
"Epoch: 033/100 | Batch 200/469 | Gen/Dis Loss: 0.7191/0.6740\n",
|
|
"Epoch: 033/100 | Batch 300/469 | Gen/Dis Loss: 0.7352/0.6663\n",
|
|
"Epoch: 033/100 | Batch 400/469 | Gen/Dis Loss: 0.7784/0.6721\n",
|
|
"Time elapsed: 3.67 min\n",
|
|
"Epoch: 034/100 | Batch 000/469 | Gen/Dis Loss: 0.7811/0.6490\n",
|
|
"Epoch: 034/100 | Batch 100/469 | Gen/Dis Loss: 0.8164/0.6904\n",
|
|
"Epoch: 034/100 | Batch 200/469 | Gen/Dis Loss: 0.7652/0.6803\n",
|
|
"Epoch: 034/100 | Batch 300/469 | Gen/Dis Loss: 0.7240/0.6910\n",
|
|
"Epoch: 034/100 | Batch 400/469 | Gen/Dis Loss: 0.8004/0.6485\n",
|
|
"Time elapsed: 3.79 min\n",
|
|
"Epoch: 035/100 | Batch 000/469 | Gen/Dis Loss: 0.7527/0.6897\n",
|
|
"Epoch: 035/100 | Batch 100/469 | Gen/Dis Loss: 0.7392/0.7012\n",
|
|
"Epoch: 035/100 | Batch 200/469 | Gen/Dis Loss: 0.7046/0.6876\n",
|
|
"Epoch: 035/100 | Batch 300/469 | Gen/Dis Loss: 0.7201/0.6918\n",
|
|
"Epoch: 035/100 | Batch 400/469 | Gen/Dis Loss: 0.7685/0.6511\n",
|
|
"Time elapsed: 3.90 min\n",
|
|
"Epoch: 036/100 | Batch 000/469 | Gen/Dis Loss: 0.7277/0.6685\n",
|
|
"Epoch: 036/100 | Batch 100/469 | Gen/Dis Loss: 0.7403/0.6693\n",
|
|
"Epoch: 036/100 | Batch 200/469 | Gen/Dis Loss: 0.7376/0.7071\n",
|
|
"Epoch: 036/100 | Batch 300/469 | Gen/Dis Loss: 0.7292/0.6908\n",
|
|
"Epoch: 036/100 | Batch 400/469 | Gen/Dis Loss: 0.7131/0.6788\n",
|
|
"Time elapsed: 4.01 min\n",
|
|
"Epoch: 037/100 | Batch 000/469 | Gen/Dis Loss: 0.7420/0.6684\n",
|
|
"Epoch: 037/100 | Batch 100/469 | Gen/Dis Loss: 0.7959/0.6421\n",
|
|
"Epoch: 037/100 | Batch 200/469 | Gen/Dis Loss: 0.7376/0.6750\n",
|
|
"Epoch: 037/100 | Batch 300/469 | Gen/Dis Loss: 0.7477/0.6832\n",
|
|
"Epoch: 037/100 | Batch 400/469 | Gen/Dis Loss: 0.7619/0.6830\n",
|
|
"Time elapsed: 4.12 min\n",
|
|
"Epoch: 038/100 | Batch 000/469 | Gen/Dis Loss: 0.7252/0.6732\n",
|
|
"Epoch: 038/100 | Batch 100/469 | Gen/Dis Loss: 0.7502/0.6642\n",
|
|
"Epoch: 038/100 | Batch 200/469 | Gen/Dis Loss: 0.7619/0.6498\n",
|
|
"Epoch: 038/100 | Batch 300/469 | Gen/Dis Loss: 0.7489/0.6596\n",
|
|
"Epoch: 038/100 | Batch 400/469 | Gen/Dis Loss: 0.7573/0.6793\n",
|
|
"Time elapsed: 4.24 min\n",
|
|
"Epoch: 039/100 | Batch 000/469 | Gen/Dis Loss: 0.7450/0.6824\n",
|
|
"Epoch: 039/100 | Batch 100/469 | Gen/Dis Loss: 0.7102/0.6962\n",
|
|
"Epoch: 039/100 | Batch 200/469 | Gen/Dis Loss: 0.7620/0.6698\n",
|
|
"Epoch: 039/100 | Batch 300/469 | Gen/Dis Loss: 0.7568/0.6645\n",
|
|
"Epoch: 039/100 | Batch 400/469 | Gen/Dis Loss: 0.7472/0.6800\n",
|
|
"Time elapsed: 4.35 min\n",
|
|
"Epoch: 040/100 | Batch 000/469 | Gen/Dis Loss: 0.7311/0.6580\n",
|
|
"Epoch: 040/100 | Batch 100/469 | Gen/Dis Loss: 0.7743/0.6728\n",
|
|
"Epoch: 040/100 | Batch 200/469 | Gen/Dis Loss: 0.7886/0.6702\n",
|
|
"Epoch: 040/100 | Batch 300/469 | Gen/Dis Loss: 0.7520/0.6706\n",
|
|
"Epoch: 040/100 | Batch 400/469 | Gen/Dis Loss: 0.6964/0.7169\n",
|
|
"Time elapsed: 4.46 min\n",
|
|
"Epoch: 041/100 | Batch 000/469 | Gen/Dis Loss: 0.6846/0.6880\n",
|
|
"Epoch: 041/100 | Batch 100/469 | Gen/Dis Loss: 0.7384/0.7129\n",
|
|
"Epoch: 041/100 | Batch 200/469 | Gen/Dis Loss: 0.7519/0.6655\n",
|
|
"Epoch: 041/100 | Batch 300/469 | Gen/Dis Loss: 0.7274/0.6990\n",
|
|
"Epoch: 041/100 | Batch 400/469 | Gen/Dis Loss: 0.7331/0.6951\n",
|
|
"Time elapsed: 4.57 min\n",
|
|
"Epoch: 042/100 | Batch 000/469 | Gen/Dis Loss: 0.7294/0.6838\n",
|
|
"Epoch: 042/100 | Batch 100/469 | Gen/Dis Loss: 0.7140/0.7100\n",
|
|
"Epoch: 042/100 | Batch 200/469 | Gen/Dis Loss: 0.7388/0.7204\n",
|
|
"Epoch: 042/100 | Batch 300/469 | Gen/Dis Loss: 0.7180/0.7000\n",
|
|
"Epoch: 042/100 | Batch 400/469 | Gen/Dis Loss: 0.7178/0.6689\n",
|
|
"Time elapsed: 4.69 min\n",
|
|
"Epoch: 043/100 | Batch 000/469 | Gen/Dis Loss: 0.7270/0.6947\n",
|
|
"Epoch: 043/100 | Batch 100/469 | Gen/Dis Loss: 0.7115/0.6976\n",
|
|
"Epoch: 043/100 | Batch 200/469 | Gen/Dis Loss: 0.7201/0.6894\n",
|
|
"Epoch: 043/100 | Batch 300/469 | Gen/Dis Loss: 0.7675/0.6436\n",
|
|
"Epoch: 043/100 | Batch 400/469 | Gen/Dis Loss: 0.7404/0.6750\n",
|
|
"Time elapsed: 4.80 min\n",
|
|
"Epoch: 044/100 | Batch 000/469 | Gen/Dis Loss: 0.7293/0.6487\n",
|
|
"Epoch: 044/100 | Batch 100/469 | Gen/Dis Loss: 0.7425/0.6837\n",
|
|
"Epoch: 044/100 | Batch 200/469 | Gen/Dis Loss: 0.7256/0.6883\n",
|
|
"Epoch: 044/100 | Batch 300/469 | Gen/Dis Loss: 0.7648/0.6885\n",
|
|
"Epoch: 044/100 | Batch 400/469 | Gen/Dis Loss: 0.7142/0.7148\n",
|
|
"Time elapsed: 4.91 min\n",
|
|
"Epoch: 045/100 | Batch 000/469 | Gen/Dis Loss: 0.7462/0.6956\n",
|
|
"Epoch: 045/100 | Batch 100/469 | Gen/Dis Loss: 0.7608/0.6839\n",
|
|
"Epoch: 045/100 | Batch 200/469 | Gen/Dis Loss: 0.7397/0.6834\n",
|
|
"Epoch: 045/100 | Batch 300/469 | Gen/Dis Loss: 0.7230/0.6833\n",
|
|
"Epoch: 045/100 | Batch 400/469 | Gen/Dis Loss: 0.7004/0.7001\n",
|
|
"Time elapsed: 5.02 min\n",
|
|
"Epoch: 046/100 | Batch 000/469 | Gen/Dis Loss: 0.7650/0.6575\n",
|
|
"Epoch: 046/100 | Batch 100/469 | Gen/Dis Loss: 0.7477/0.6786\n",
|
|
"Epoch: 046/100 | Batch 200/469 | Gen/Dis Loss: 0.7285/0.6782\n",
|
|
"Epoch: 046/100 | Batch 300/469 | Gen/Dis Loss: 0.7539/0.6911\n",
|
|
"Epoch: 046/100 | Batch 400/469 | Gen/Dis Loss: 0.7623/0.6656\n",
|
|
"Time elapsed: 5.14 min\n",
|
|
"Epoch: 047/100 | Batch 000/469 | Gen/Dis Loss: 0.7219/0.6923\n",
|
|
"Epoch: 047/100 | Batch 100/469 | Gen/Dis Loss: 0.7046/0.7039\n",
|
|
"Epoch: 047/100 | Batch 200/469 | Gen/Dis Loss: 0.7205/0.7026\n",
|
|
"Epoch: 047/100 | Batch 300/469 | Gen/Dis Loss: 0.7077/0.6762\n",
|
|
"Epoch: 047/100 | Batch 400/469 | Gen/Dis Loss: 0.7201/0.6899\n",
|
|
"Time elapsed: 5.25 min\n",
|
|
"Epoch: 048/100 | Batch 000/469 | Gen/Dis Loss: 0.7344/0.6843\n",
|
|
"Epoch: 048/100 | Batch 100/469 | Gen/Dis Loss: 0.7612/0.6683\n",
|
|
"Epoch: 048/100 | Batch 200/469 | Gen/Dis Loss: 0.7472/0.6694\n",
|
|
"Epoch: 048/100 | Batch 300/469 | Gen/Dis Loss: 0.6935/0.7073\n",
|
|
"Epoch: 048/100 | Batch 400/469 | Gen/Dis Loss: 0.7342/0.6662\n",
|
|
"Time elapsed: 5.36 min\n",
|
|
"Epoch: 049/100 | Batch 000/469 | Gen/Dis Loss: 0.7221/0.6847\n",
|
|
"Epoch: 049/100 | Batch 100/469 | Gen/Dis Loss: 0.7354/0.6696\n",
|
|
"Epoch: 049/100 | Batch 200/469 | Gen/Dis Loss: 0.7264/0.7108\n",
|
|
"Epoch: 049/100 | Batch 300/469 | Gen/Dis Loss: 0.6834/0.6652\n",
|
|
"Epoch: 049/100 | Batch 400/469 | Gen/Dis Loss: 0.7081/0.7051\n",
|
|
"Time elapsed: 5.47 min\n",
|
|
"Epoch: 050/100 | Batch 000/469 | Gen/Dis Loss: 0.7139/0.6842\n",
|
|
"Epoch: 050/100 | Batch 100/469 | Gen/Dis Loss: 0.7742/0.6910\n",
|
|
"Epoch: 050/100 | Batch 200/469 | Gen/Dis Loss: 0.7476/0.6880\n",
|
|
"Epoch: 050/100 | Batch 300/469 | Gen/Dis Loss: 0.7074/0.6915\n",
|
|
"Epoch: 050/100 | Batch 400/469 | Gen/Dis Loss: 0.7245/0.7140\n",
|
|
"Time elapsed: 5.59 min\n",
|
|
"Epoch: 051/100 | Batch 000/469 | Gen/Dis Loss: 0.6999/0.6924\n",
|
|
"Epoch: 051/100 | Batch 100/469 | Gen/Dis Loss: 0.7025/0.6692\n",
|
|
"Epoch: 051/100 | Batch 200/469 | Gen/Dis Loss: 0.7119/0.6837\n",
|
|
"Epoch: 051/100 | Batch 300/469 | Gen/Dis Loss: 0.7111/0.6890\n",
|
|
"Epoch: 051/100 | Batch 400/469 | Gen/Dis Loss: 0.7205/0.6954\n",
|
|
"Time elapsed: 5.70 min\n",
|
|
"Epoch: 052/100 | Batch 000/469 | Gen/Dis Loss: 0.7297/0.6751\n",
|
|
"Epoch: 052/100 | Batch 100/469 | Gen/Dis Loss: 0.7217/0.6760\n",
|
|
"Epoch: 052/100 | Batch 200/469 | Gen/Dis Loss: 0.7306/0.6846\n",
|
|
"Epoch: 052/100 | Batch 300/469 | Gen/Dis Loss: 0.7445/0.6858\n",
|
|
"Epoch: 052/100 | Batch 400/469 | Gen/Dis Loss: 0.7077/0.7021\n",
|
|
"Time elapsed: 5.81 min\n",
|
|
"Epoch: 053/100 | Batch 000/469 | Gen/Dis Loss: 0.7324/0.6837\n",
|
|
"Epoch: 053/100 | Batch 100/469 | Gen/Dis Loss: 0.7112/0.6916\n",
|
|
"Epoch: 053/100 | Batch 200/469 | Gen/Dis Loss: 0.7360/0.6808\n",
|
|
"Epoch: 053/100 | Batch 300/469 | Gen/Dis Loss: 0.7265/0.6882\n",
|
|
"Epoch: 053/100 | Batch 400/469 | Gen/Dis Loss: 0.7481/0.6589\n",
|
|
"Time elapsed: 5.92 min\n",
|
|
"Epoch: 054/100 | Batch 000/469 | Gen/Dis Loss: 0.7060/0.6839\n",
|
|
"Epoch: 054/100 | Batch 100/469 | Gen/Dis Loss: 0.7126/0.7005\n",
|
|
"Epoch: 054/100 | Batch 200/469 | Gen/Dis Loss: 0.6884/0.6986\n",
|
|
"Epoch: 054/100 | Batch 300/469 | Gen/Dis Loss: 0.7367/0.6747\n",
|
|
"Epoch: 054/100 | Batch 400/469 | Gen/Dis Loss: 0.7275/0.6843\n",
|
|
"Time elapsed: 6.04 min\n",
|
|
"Epoch: 055/100 | Batch 000/469 | Gen/Dis Loss: 0.7524/0.6896\n",
|
|
"Epoch: 055/100 | Batch 100/469 | Gen/Dis Loss: 0.7015/0.7009\n",
|
|
"Epoch: 055/100 | Batch 200/469 | Gen/Dis Loss: 0.7214/0.6864\n",
|
|
"Epoch: 055/100 | Batch 300/469 | Gen/Dis Loss: 0.7363/0.6745\n",
|
|
"Epoch: 055/100 | Batch 400/469 | Gen/Dis Loss: 0.6750/0.7052\n",
|
|
"Time elapsed: 6.15 min\n",
|
|
"Epoch: 056/100 | Batch 000/469 | Gen/Dis Loss: 0.7154/0.6726\n",
|
|
"Epoch: 056/100 | Batch 100/469 | Gen/Dis Loss: 0.7504/0.6915\n",
|
|
"Epoch: 056/100 | Batch 200/469 | Gen/Dis Loss: 0.7247/0.6801\n",
|
|
"Epoch: 056/100 | Batch 300/469 | Gen/Dis Loss: 0.7104/0.7094\n",
|
|
"Epoch: 056/100 | Batch 400/469 | Gen/Dis Loss: 0.7478/0.6648\n",
|
|
"Time elapsed: 6.26 min\n",
|
|
"Epoch: 057/100 | Batch 000/469 | Gen/Dis Loss: 0.6971/0.7020\n",
|
|
"Epoch: 057/100 | Batch 100/469 | Gen/Dis Loss: 0.6913/0.6889\n",
|
|
"Epoch: 057/100 | Batch 200/469 | Gen/Dis Loss: 0.7104/0.7075\n",
|
|
"Epoch: 057/100 | Batch 300/469 | Gen/Dis Loss: 0.7412/0.6714\n",
|
|
"Epoch: 057/100 | Batch 400/469 | Gen/Dis Loss: 0.7036/0.6781\n",
|
|
"Time elapsed: 6.37 min\n",
|
|
"Epoch: 058/100 | Batch 000/469 | Gen/Dis Loss: 0.6931/0.6905\n",
|
|
"Epoch: 058/100 | Batch 100/469 | Gen/Dis Loss: 0.6890/0.7168\n",
|
|
"Epoch: 058/100 | Batch 200/469 | Gen/Dis Loss: 0.6954/0.6778\n",
|
|
"Epoch: 058/100 | Batch 300/469 | Gen/Dis Loss: 0.7247/0.6895\n",
|
|
"Epoch: 058/100 | Batch 400/469 | Gen/Dis Loss: 0.7134/0.6972\n",
|
|
"Time elapsed: 6.48 min\n",
|
|
"Epoch: 059/100 | Batch 000/469 | Gen/Dis Loss: 0.6965/0.7357\n",
|
|
"Epoch: 059/100 | Batch 100/469 | Gen/Dis Loss: 0.6956/0.7342\n",
|
|
"Epoch: 059/100 | Batch 200/469 | Gen/Dis Loss: 0.7206/0.6850\n",
|
|
"Epoch: 059/100 | Batch 300/469 | Gen/Dis Loss: 0.7191/0.6857\n",
|
|
"Epoch: 059/100 | Batch 400/469 | Gen/Dis Loss: 0.7171/0.6985\n",
|
|
"Time elapsed: 6.59 min\n",
|
|
"Epoch: 060/100 | Batch 000/469 | Gen/Dis Loss: 0.7303/0.6821\n",
|
|
"Epoch: 060/100 | Batch 100/469 | Gen/Dis Loss: 0.7202/0.6773\n",
|
|
"Epoch: 060/100 | Batch 200/469 | Gen/Dis Loss: 0.6943/0.6867\n",
|
|
"Epoch: 060/100 | Batch 300/469 | Gen/Dis Loss: 0.7005/0.7014\n",
|
|
"Epoch: 060/100 | Batch 400/469 | Gen/Dis Loss: 0.7191/0.6868\n",
|
|
"Time elapsed: 6.71 min\n",
|
|
"Epoch: 061/100 | Batch 000/469 | Gen/Dis Loss: 0.7571/0.6741\n",
|
|
"Epoch: 061/100 | Batch 100/469 | Gen/Dis Loss: 0.7170/0.6848\n",
|
|
"Epoch: 061/100 | Batch 200/469 | Gen/Dis Loss: 0.6860/0.7175\n",
|
|
"Epoch: 061/100 | Batch 300/469 | Gen/Dis Loss: 0.7386/0.6894\n",
|
|
"Epoch: 061/100 | Batch 400/469 | Gen/Dis Loss: 0.6806/0.7394\n",
|
|
"Time elapsed: 6.82 min\n",
|
|
"Epoch: 062/100 | Batch 000/469 | Gen/Dis Loss: 0.7045/0.6885\n",
|
|
"Epoch: 062/100 | Batch 100/469 | Gen/Dis Loss: 0.7079/0.6893\n",
|
|
"Epoch: 062/100 | Batch 200/469 | Gen/Dis Loss: 0.7169/0.6902\n",
|
|
"Epoch: 062/100 | Batch 300/469 | Gen/Dis Loss: 0.7155/0.7040\n",
|
|
"Epoch: 062/100 | Batch 400/469 | Gen/Dis Loss: 0.7118/0.6924\n",
|
|
"Time elapsed: 6.93 min\n",
|
|
"Epoch: 063/100 | Batch 000/469 | Gen/Dis Loss: 0.7376/0.6885\n",
|
|
"Epoch: 063/100 | Batch 100/469 | Gen/Dis Loss: 0.7123/0.6907\n",
|
|
"Epoch: 063/100 | Batch 200/469 | Gen/Dis Loss: 0.6990/0.7137\n",
|
|
"Epoch: 063/100 | Batch 300/469 | Gen/Dis Loss: 0.7400/0.6873\n",
|
|
"Epoch: 063/100 | Batch 400/469 | Gen/Dis Loss: 0.7067/0.6900\n",
|
|
"Time elapsed: 7.04 min\n",
|
|
"Epoch: 064/100 | Batch 000/469 | Gen/Dis Loss: 0.7243/0.6886\n",
|
|
"Epoch: 064/100 | Batch 100/469 | Gen/Dis Loss: 0.7371/0.6765\n",
|
|
"Epoch: 064/100 | Batch 200/469 | Gen/Dis Loss: 0.7082/0.7039\n",
|
|
"Epoch: 064/100 | Batch 300/469 | Gen/Dis Loss: 0.7217/0.6830\n",
|
|
"Epoch: 064/100 | Batch 400/469 | Gen/Dis Loss: 0.6962/0.7046\n",
|
|
"Time elapsed: 7.15 min\n",
|
|
"Epoch: 065/100 | Batch 000/469 | Gen/Dis Loss: 0.6920/0.7042\n",
|
|
"Epoch: 065/100 | Batch 100/469 | Gen/Dis Loss: 0.7391/0.6880\n",
|
|
"Epoch: 065/100 | Batch 200/469 | Gen/Dis Loss: 0.7179/0.6903\n",
|
|
"Epoch: 065/100 | Batch 300/469 | Gen/Dis Loss: 0.7057/0.7100\n",
|
|
"Epoch: 065/100 | Batch 400/469 | Gen/Dis Loss: 0.6986/0.7246\n",
|
|
"Time elapsed: 7.27 min\n",
|
|
"Epoch: 066/100 | Batch 000/469 | Gen/Dis Loss: 0.6816/0.7142\n",
|
|
"Epoch: 066/100 | Batch 100/469 | Gen/Dis Loss: 0.7280/0.7187\n",
|
|
"Epoch: 066/100 | Batch 200/469 | Gen/Dis Loss: 0.6893/0.6917\n",
|
|
"Epoch: 066/100 | Batch 300/469 | Gen/Dis Loss: 0.6783/0.7212\n",
|
|
"Epoch: 066/100 | Batch 400/469 | Gen/Dis Loss: 0.7077/0.7035\n",
|
|
"Time elapsed: 7.38 min\n",
|
|
"Epoch: 067/100 | Batch 000/469 | Gen/Dis Loss: 0.6741/0.7281\n",
|
|
"Epoch: 067/100 | Batch 100/469 | Gen/Dis Loss: 0.7054/0.6934\n",
|
|
"Epoch: 067/100 | Batch 200/469 | Gen/Dis Loss: 0.6950/0.7007\n",
|
|
"Epoch: 067/100 | Batch 300/469 | Gen/Dis Loss: 0.7220/0.6823\n",
|
|
"Epoch: 067/100 | Batch 400/469 | Gen/Dis Loss: 0.7056/0.6786\n",
|
|
"Time elapsed: 7.49 min\n",
|
|
"Epoch: 068/100 | Batch 000/469 | Gen/Dis Loss: 0.7149/0.6899\n",
|
|
"Epoch: 068/100 | Batch 100/469 | Gen/Dis Loss: 0.6831/0.7080\n",
|
|
"Epoch: 068/100 | Batch 200/469 | Gen/Dis Loss: 0.7129/0.6912\n",
|
|
"Epoch: 068/100 | Batch 300/469 | Gen/Dis Loss: 0.6805/0.7043\n",
|
|
"Epoch: 068/100 | Batch 400/469 | Gen/Dis Loss: 0.7198/0.6862\n",
|
|
"Time elapsed: 7.60 min\n",
|
|
"Epoch: 069/100 | Batch 000/469 | Gen/Dis Loss: 0.7155/0.6956\n",
|
|
"Epoch: 069/100 | Batch 100/469 | Gen/Dis Loss: 0.6647/0.7004\n",
|
|
"Epoch: 069/100 | Batch 200/469 | Gen/Dis Loss: 0.7101/0.7041\n",
|
|
"Epoch: 069/100 | Batch 300/469 | Gen/Dis Loss: 0.6902/0.7165\n",
|
|
"Epoch: 069/100 | Batch 400/469 | Gen/Dis Loss: 0.6958/0.6964\n",
|
|
"Time elapsed: 7.71 min\n",
|
|
"Epoch: 070/100 | Batch 000/469 | Gen/Dis Loss: 0.7307/0.6867\n",
|
|
"Epoch: 070/100 | Batch 100/469 | Gen/Dis Loss: 0.7059/0.7004\n",
|
|
"Epoch: 070/100 | Batch 200/469 | Gen/Dis Loss: 0.7439/0.6578\n",
|
|
"Epoch: 070/100 | Batch 300/469 | Gen/Dis Loss: 0.7060/0.6918\n",
|
|
"Epoch: 070/100 | Batch 400/469 | Gen/Dis Loss: 0.7133/0.7115\n",
|
|
"Time elapsed: 7.82 min\n",
|
|
"Epoch: 071/100 | Batch 000/469 | Gen/Dis Loss: 0.6912/0.7067\n",
|
|
"Epoch: 071/100 | Batch 100/469 | Gen/Dis Loss: 0.7607/0.6689\n",
|
|
"Epoch: 071/100 | Batch 200/469 | Gen/Dis Loss: 0.7093/0.7079\n",
|
|
"Epoch: 071/100 | Batch 300/469 | Gen/Dis Loss: 0.6586/0.7082\n",
|
|
"Epoch: 071/100 | Batch 400/469 | Gen/Dis Loss: 0.7373/0.6887\n",
|
|
"Time elapsed: 7.93 min\n",
|
|
"Epoch: 072/100 | Batch 000/469 | Gen/Dis Loss: 0.6848/0.7035\n",
|
|
"Epoch: 072/100 | Batch 100/469 | Gen/Dis Loss: 0.7595/0.6834\n",
|
|
"Epoch: 072/100 | Batch 200/469 | Gen/Dis Loss: 0.7200/0.6894\n",
|
|
"Epoch: 072/100 | Batch 300/469 | Gen/Dis Loss: 0.7027/0.6875\n",
|
|
"Epoch: 072/100 | Batch 400/469 | Gen/Dis Loss: 0.6932/0.6923\n",
|
|
"Time elapsed: 8.05 min\n",
|
|
"Epoch: 073/100 | Batch 000/469 | Gen/Dis Loss: 0.7331/0.6827\n",
|
|
"Epoch: 073/100 | Batch 100/469 | Gen/Dis Loss: 0.7196/0.6982\n",
|
|
"Epoch: 073/100 | Batch 200/469 | Gen/Dis Loss: 0.7102/0.6970\n",
|
|
"Epoch: 073/100 | Batch 300/469 | Gen/Dis Loss: 0.7046/0.6993\n",
|
|
"Epoch: 073/100 | Batch 400/469 | Gen/Dis Loss: 0.7000/0.7084\n",
|
|
"Time elapsed: 8.16 min\n",
|
|
"Epoch: 074/100 | Batch 000/469 | Gen/Dis Loss: 0.7173/0.6942\n",
|
|
"Epoch: 074/100 | Batch 100/469 | Gen/Dis Loss: 0.6864/0.7120\n",
|
|
"Epoch: 074/100 | Batch 200/469 | Gen/Dis Loss: 0.7195/0.7070\n",
|
|
"Epoch: 074/100 | Batch 300/469 | Gen/Dis Loss: 0.7188/0.6861\n",
|
|
"Epoch: 074/100 | Batch 400/469 | Gen/Dis Loss: 0.7031/0.7074\n",
|
|
"Time elapsed: 8.27 min\n",
|
|
"Epoch: 075/100 | Batch 000/469 | Gen/Dis Loss: 0.7215/0.6806\n",
|
|
"Epoch: 075/100 | Batch 100/469 | Gen/Dis Loss: 0.7210/0.6833\n",
|
|
"Epoch: 075/100 | Batch 200/469 | Gen/Dis Loss: 0.6988/0.7080\n",
|
|
"Epoch: 075/100 | Batch 300/469 | Gen/Dis Loss: 0.6966/0.6966\n",
|
|
"Epoch: 075/100 | Batch 400/469 | Gen/Dis Loss: 0.7061/0.6977\n",
|
|
"Time elapsed: 8.38 min\n",
|
|
"Epoch: 076/100 | Batch 000/469 | Gen/Dis Loss: 0.6956/0.6920\n",
|
|
"Epoch: 076/100 | Batch 100/469 | Gen/Dis Loss: 0.7220/0.6964\n",
|
|
"Epoch: 076/100 | Batch 200/469 | Gen/Dis Loss: 0.7163/0.6708\n",
|
|
"Epoch: 076/100 | Batch 300/469 | Gen/Dis Loss: 0.7021/0.6787\n",
|
|
"Epoch: 076/100 | Batch 400/469 | Gen/Dis Loss: 0.7039/0.6956\n",
|
|
"Time elapsed: 8.50 min\n",
|
|
"Epoch: 077/100 | Batch 000/469 | Gen/Dis Loss: 0.7370/0.6646\n",
|
|
"Epoch: 077/100 | Batch 100/469 | Gen/Dis Loss: 0.7025/0.6821\n",
|
|
"Epoch: 077/100 | Batch 200/469 | Gen/Dis Loss: 0.6841/0.7062\n",
|
|
"Epoch: 077/100 | Batch 300/469 | Gen/Dis Loss: 0.7053/0.7047\n",
|
|
"Epoch: 077/100 | Batch 400/469 | Gen/Dis Loss: 0.7183/0.6782\n",
|
|
"Time elapsed: 8.61 min\n",
|
|
"Epoch: 078/100 | Batch 000/469 | Gen/Dis Loss: 0.7611/0.6732\n",
|
|
"Epoch: 078/100 | Batch 100/469 | Gen/Dis Loss: 0.7201/0.6677\n",
|
|
"Epoch: 078/100 | Batch 200/469 | Gen/Dis Loss: 0.7439/0.6816\n",
|
|
"Epoch: 078/100 | Batch 300/469 | Gen/Dis Loss: 0.7000/0.7021\n",
|
|
"Epoch: 078/100 | Batch 400/469 | Gen/Dis Loss: 0.7169/0.6828\n",
|
|
"Time elapsed: 8.72 min\n",
|
|
"Epoch: 079/100 | Batch 000/469 | Gen/Dis Loss: 0.7054/0.6965\n",
|
|
"Epoch: 079/100 | Batch 100/469 | Gen/Dis Loss: 0.6971/0.6895\n",
|
|
"Epoch: 079/100 | Batch 200/469 | Gen/Dis Loss: 0.7160/0.6846\n",
|
|
"Epoch: 079/100 | Batch 300/469 | Gen/Dis Loss: 0.6826/0.6978\n",
|
|
"Epoch: 079/100 | Batch 400/469 | Gen/Dis Loss: 0.7057/0.6950\n",
|
|
"Time elapsed: 8.83 min\n",
|
|
"Epoch: 080/100 | Batch 000/469 | Gen/Dis Loss: 0.6850/0.7016\n",
|
|
"Epoch: 080/100 | Batch 100/469 | Gen/Dis Loss: 0.6841/0.6875\n",
|
|
"Epoch: 080/100 | Batch 200/469 | Gen/Dis Loss: 0.7536/0.6677\n",
|
|
"Epoch: 080/100 | Batch 300/469 | Gen/Dis Loss: 0.6795/0.6986\n",
|
|
"Epoch: 080/100 | Batch 400/469 | Gen/Dis Loss: 0.7447/0.6731\n",
|
|
"Time elapsed: 8.94 min\n",
|
|
"Epoch: 081/100 | Batch 000/469 | Gen/Dis Loss: 0.7040/0.6826\n",
|
|
"Epoch: 081/100 | Batch 100/469 | Gen/Dis Loss: 0.7045/0.6913\n",
|
|
"Epoch: 081/100 | Batch 200/469 | Gen/Dis Loss: 0.7123/0.6989\n",
|
|
"Epoch: 081/100 | Batch 300/469 | Gen/Dis Loss: 0.7318/0.6747\n",
|
|
"Epoch: 081/100 | Batch 400/469 | Gen/Dis Loss: 0.7733/0.6524\n",
|
|
"Time elapsed: 9.05 min\n",
|
|
"Epoch: 082/100 | Batch 000/469 | Gen/Dis Loss: 0.7068/0.6799\n",
|
|
"Epoch: 082/100 | Batch 100/469 | Gen/Dis Loss: 0.7125/0.6855\n",
|
|
"Epoch: 082/100 | Batch 200/469 | Gen/Dis Loss: 0.6916/0.7135\n",
|
|
"Epoch: 082/100 | Batch 300/469 | Gen/Dis Loss: 0.7113/0.6951\n",
|
|
"Epoch: 082/100 | Batch 400/469 | Gen/Dis Loss: 0.7277/0.6706\n",
|
|
"Time elapsed: 9.16 min\n",
|
|
"Epoch: 083/100 | Batch 000/469 | Gen/Dis Loss: 0.7007/0.6930\n",
|
|
"Epoch: 083/100 | Batch 100/469 | Gen/Dis Loss: 0.7295/0.6822\n",
|
|
"Epoch: 083/100 | Batch 200/469 | Gen/Dis Loss: 0.6925/0.7041\n",
|
|
"Epoch: 083/100 | Batch 300/469 | Gen/Dis Loss: 0.6961/0.6973\n",
|
|
"Epoch: 083/100 | Batch 400/469 | Gen/Dis Loss: 0.7217/0.6856\n",
|
|
"Time elapsed: 9.27 min\n",
|
|
"Epoch: 084/100 | Batch 000/469 | Gen/Dis Loss: 0.7234/0.6867\n",
|
|
"Epoch: 084/100 | Batch 100/469 | Gen/Dis Loss: 0.7126/0.6865\n",
|
|
"Epoch: 084/100 | Batch 200/469 | Gen/Dis Loss: 0.6872/0.7103\n",
|
|
"Epoch: 084/100 | Batch 300/469 | Gen/Dis Loss: 0.7059/0.7026\n",
|
|
"Epoch: 084/100 | Batch 400/469 | Gen/Dis Loss: 0.6938/0.7042\n",
|
|
"Time elapsed: 9.39 min\n",
|
|
"Epoch: 085/100 | Batch 000/469 | Gen/Dis Loss: 0.7063/0.6872\n",
|
|
"Epoch: 085/100 | Batch 100/469 | Gen/Dis Loss: 0.6863/0.6962\n",
|
|
"Epoch: 085/100 | Batch 200/469 | Gen/Dis Loss: 0.6890/0.7008\n",
|
|
"Epoch: 085/100 | Batch 300/469 | Gen/Dis Loss: 0.7016/0.6896\n",
|
|
"Epoch: 085/100 | Batch 400/469 | Gen/Dis Loss: 0.6955/0.6955\n",
|
|
"Time elapsed: 9.50 min\n",
|
|
"Epoch: 086/100 | Batch 000/469 | Gen/Dis Loss: 0.7243/0.6873\n",
|
|
"Epoch: 086/100 | Batch 100/469 | Gen/Dis Loss: 0.6724/0.7171\n",
|
|
"Epoch: 086/100 | Batch 200/469 | Gen/Dis Loss: 0.7003/0.7063\n",
|
|
"Epoch: 086/100 | Batch 300/469 | Gen/Dis Loss: 0.7089/0.6931\n",
|
|
"Epoch: 086/100 | Batch 400/469 | Gen/Dis Loss: 0.7517/0.6918\n",
|
|
"Time elapsed: 9.61 min\n",
|
|
"Epoch: 087/100 | Batch 000/469 | Gen/Dis Loss: 0.7063/0.6841\n",
|
|
"Epoch: 087/100 | Batch 100/469 | Gen/Dis Loss: 0.7123/0.6929\n",
|
|
"Epoch: 087/100 | Batch 200/469 | Gen/Dis Loss: 0.6703/0.7148\n",
|
|
"Epoch: 087/100 | Batch 300/469 | Gen/Dis Loss: 0.7069/0.7158\n",
|
|
"Epoch: 087/100 | Batch 400/469 | Gen/Dis Loss: 0.7490/0.6743\n",
|
|
"Time elapsed: 9.73 min\n",
|
|
"Epoch: 088/100 | Batch 000/469 | Gen/Dis Loss: 0.7264/0.6813\n",
|
|
"Epoch: 088/100 | Batch 100/469 | Gen/Dis Loss: 0.7190/0.6846\n",
|
|
"Epoch: 088/100 | Batch 200/469 | Gen/Dis Loss: 0.6913/0.7160\n",
|
|
"Epoch: 088/100 | Batch 300/469 | Gen/Dis Loss: 0.6650/0.6961\n",
|
|
"Epoch: 088/100 | Batch 400/469 | Gen/Dis Loss: 0.7104/0.6991\n",
|
|
"Time elapsed: 9.84 min\n",
|
|
"Epoch: 089/100 | Batch 000/469 | Gen/Dis Loss: 0.7135/0.6879\n",
|
|
"Epoch: 089/100 | Batch 100/469 | Gen/Dis Loss: 0.7040/0.7015\n",
|
|
"Epoch: 089/100 | Batch 200/469 | Gen/Dis Loss: 0.7341/0.6976\n",
|
|
"Epoch: 089/100 | Batch 300/469 | Gen/Dis Loss: 0.6865/0.6966\n",
|
|
"Epoch: 089/100 | Batch 400/469 | Gen/Dis Loss: 0.7150/0.6960\n",
|
|
"Time elapsed: 9.95 min\n",
|
|
"Epoch: 090/100 | Batch 000/469 | Gen/Dis Loss: 0.6853/0.6989\n",
|
|
"Epoch: 090/100 | Batch 100/469 | Gen/Dis Loss: 0.6962/0.6915\n",
|
|
"Epoch: 090/100 | Batch 200/469 | Gen/Dis Loss: 0.6979/0.6917\n",
|
|
"Epoch: 090/100 | Batch 300/469 | Gen/Dis Loss: 0.7116/0.6933\n",
|
|
"Epoch: 090/100 | Batch 400/469 | Gen/Dis Loss: 0.6530/0.6941\n",
|
|
"Time elapsed: 10.06 min\n",
|
|
"Epoch: 091/100 | Batch 000/469 | Gen/Dis Loss: 0.7075/0.6953\n",
|
|
"Epoch: 091/100 | Batch 100/469 | Gen/Dis Loss: 0.7377/0.6750\n",
|
|
"Epoch: 091/100 | Batch 200/469 | Gen/Dis Loss: 0.7118/0.6915\n",
|
|
"Epoch: 091/100 | Batch 300/469 | Gen/Dis Loss: 0.7187/0.6842\n",
|
|
"Epoch: 091/100 | Batch 400/469 | Gen/Dis Loss: 0.7158/0.6845\n",
|
|
"Time elapsed: 10.17 min\n",
|
|
"Epoch: 092/100 | Batch 000/469 | Gen/Dis Loss: 0.7106/0.6776\n",
|
|
"Epoch: 092/100 | Batch 100/469 | Gen/Dis Loss: 0.6952/0.7033\n",
|
|
"Epoch: 092/100 | Batch 200/469 | Gen/Dis Loss: 0.6871/0.7304\n",
|
|
"Epoch: 092/100 | Batch 300/469 | Gen/Dis Loss: 0.7164/0.6925\n",
|
|
"Epoch: 092/100 | Batch 400/469 | Gen/Dis Loss: 0.7089/0.6981\n",
|
|
"Time elapsed: 10.28 min\n",
|
|
"Epoch: 093/100 | Batch 000/469 | Gen/Dis Loss: 0.7067/0.6999\n",
|
|
"Epoch: 093/100 | Batch 100/469 | Gen/Dis Loss: 0.7307/0.6621\n",
|
|
"Epoch: 093/100 | Batch 200/469 | Gen/Dis Loss: 0.7297/0.6933\n",
|
|
"Epoch: 093/100 | Batch 300/469 | Gen/Dis Loss: 0.6832/0.7059\n",
|
|
"Epoch: 093/100 | Batch 400/469 | Gen/Dis Loss: 0.6968/0.6953\n",
|
|
"Time elapsed: 10.40 min\n",
|
|
"Epoch: 094/100 | Batch 000/469 | Gen/Dis Loss: 0.6928/0.7056\n",
|
|
"Epoch: 094/100 | Batch 100/469 | Gen/Dis Loss: 0.7187/0.6848\n",
|
|
"Epoch: 094/100 | Batch 200/469 | Gen/Dis Loss: 0.7341/0.6744\n",
|
|
"Epoch: 094/100 | Batch 300/469 | Gen/Dis Loss: 0.7313/0.6805\n",
|
|
"Epoch: 094/100 | Batch 400/469 | Gen/Dis Loss: 0.7286/0.6766\n",
|
|
"Time elapsed: 10.51 min\n",
|
|
"Epoch: 095/100 | Batch 000/469 | Gen/Dis Loss: 0.6949/0.6977\n",
|
|
"Epoch: 095/100 | Batch 100/469 | Gen/Dis Loss: 0.7209/0.6785\n",
|
|
"Epoch: 095/100 | Batch 200/469 | Gen/Dis Loss: 0.6830/0.6961\n",
|
|
"Epoch: 095/100 | Batch 300/469 | Gen/Dis Loss: 0.6924/0.7129\n",
|
|
"Epoch: 095/100 | Batch 400/469 | Gen/Dis Loss: 0.6994/0.6977\n",
|
|
"Time elapsed: 10.62 min\n",
|
|
"Epoch: 096/100 | Batch 000/469 | Gen/Dis Loss: 0.7030/0.6872\n",
|
|
"Epoch: 096/100 | Batch 100/469 | Gen/Dis Loss: 0.7184/0.6817\n",
|
|
"Epoch: 096/100 | Batch 200/469 | Gen/Dis Loss: 0.6800/0.7069\n",
|
|
"Epoch: 096/100 | Batch 300/469 | Gen/Dis Loss: 0.6787/0.7176\n",
|
|
"Epoch: 096/100 | Batch 400/469 | Gen/Dis Loss: 0.7195/0.6742\n",
|
|
"Time elapsed: 10.73 min\n",
|
|
"Epoch: 097/100 | Batch 000/469 | Gen/Dis Loss: 0.7010/0.7022\n",
|
|
"Epoch: 097/100 | Batch 100/469 | Gen/Dis Loss: 0.7229/0.6837\n",
|
|
"Epoch: 097/100 | Batch 200/469 | Gen/Dis Loss: 0.7249/0.6841\n",
|
|
"Epoch: 097/100 | Batch 300/469 | Gen/Dis Loss: 0.6825/0.7077\n",
|
|
"Epoch: 097/100 | Batch 400/469 | Gen/Dis Loss: 0.7154/0.6792\n",
|
|
"Time elapsed: 10.84 min\n",
|
|
"Epoch: 098/100 | Batch 000/469 | Gen/Dis Loss: 0.7026/0.6956\n",
|
|
"Epoch: 098/100 | Batch 100/469 | Gen/Dis Loss: 0.7014/0.6958\n",
|
|
"Epoch: 098/100 | Batch 200/469 | Gen/Dis Loss: 0.6935/0.6819\n",
|
|
"Epoch: 098/100 | Batch 300/469 | Gen/Dis Loss: 0.6863/0.6962\n",
|
|
"Epoch: 098/100 | Batch 400/469 | Gen/Dis Loss: 0.7081/0.7027\n",
|
|
"Time elapsed: 10.95 min\n",
|
|
"Epoch: 099/100 | Batch 000/469 | Gen/Dis Loss: 0.6756/0.7142\n",
|
|
"Epoch: 099/100 | Batch 100/469 | Gen/Dis Loss: 0.7176/0.6848\n",
|
|
"Epoch: 099/100 | Batch 200/469 | Gen/Dis Loss: 0.7229/0.6893\n",
|
|
"Epoch: 099/100 | Batch 300/469 | Gen/Dis Loss: 0.7109/0.6857\n",
|
|
"Epoch: 099/100 | Batch 400/469 | Gen/Dis Loss: 0.7048/0.6964\n",
|
|
"Time elapsed: 11.07 min\n",
|
|
"Epoch: 100/100 | Batch 000/469 | Gen/Dis Loss: 0.6977/0.6980\n",
|
|
"Epoch: 100/100 | Batch 100/469 | Gen/Dis Loss: 0.7075/0.6928\n",
|
|
"Epoch: 100/100 | Batch 200/469 | Gen/Dis Loss: 0.7012/0.6905\n",
|
|
"Epoch: 100/100 | Batch 300/469 | Gen/Dis Loss: 0.7103/0.6850\n",
|
|
"Epoch: 100/100 | Batch 400/469 | Gen/Dis Loss: 0.6911/0.7090\n",
|
|
"Time elapsed: 11.18 min\n",
|
|
"Total Training Time: 11.18 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",
|
|
" # Normalize images to [-1, 1] range\n",
|
|
" features = (features - 0.5)*2.\n",
|
|
" features = features.view(-1, IMG_SIZE).to(device) \n",
|
|
"\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.view(targets.size(0), 1, 28, 28))\n",
|
|
" \n",
|
|
" gener_loss = F.binary_cross_entropy_with_logits(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(targets.size(0), 1, 28, 28))\n",
|
|
" real_loss = F.binary_cross_entropy_with_logits(discr_pred_real, valid)\n",
|
|
" \n",
|
|
" discr_pred_fake = model.discriminator_forward(generated_features.view(targets.size(0), 1, 28, 28).detach())\n",
|
|
" fake_loss = F.binary_cross_entropy_with_logits(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.item())\n",
|
|
" gener_costs.append(gener_loss.item())\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": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"'\\nfor i in outputs:\\n print(i.size())\\n'"
|
|
]
|
|
},
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"### For Debugging\n",
|
|
"\n",
|
|
"\"\"\"\n",
|
|
"for i in outputs:\n",
|
|
" print(i.size())\n",
|
|
"\"\"\""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Evaluation"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"%matplotlib inline\n",
|
|
"import matplotlib.pyplot as plt"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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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": 12,
|
|
"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')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"----------------------------------------------------------------\n",
|
|
" Layer (type) Output Shape Param #\n",
|
|
"================================================================\n",
|
|
" Linear-1 [-1, 3136] 313,600\n",
|
|
" BatchNorm1d-2 [-1, 3136] 6,272\n",
|
|
" LeakyReLU-3 [-1, 3136] 0\n",
|
|
" Reshape1-4 [-1, 64, 7, 7] 0\n",
|
|
" ConvTranspose2d-5 [-1, 32, 13, 13] 18,432\n",
|
|
" BatchNorm2d-6 [-1, 32, 13, 13] 64\n",
|
|
" LeakyReLU-7 [-1, 32, 13, 13] 0\n",
|
|
" ConvTranspose2d-8 [-1, 16, 25, 25] 4,608\n",
|
|
" BatchNorm2d-9 [-1, 16, 25, 25] 32\n",
|
|
" LeakyReLU-10 [-1, 16, 25, 25] 0\n",
|
|
" ConvTranspose2d-11 [-1, 8, 27, 27] 1,152\n",
|
|
" BatchNorm2d-12 [-1, 8, 27, 27] 16\n",
|
|
" LeakyReLU-13 [-1, 8, 27, 27] 0\n",
|
|
" ConvTranspose2d-14 [-1, 1, 28, 28] 32\n",
|
|
" Tanh-15 [-1, 1, 28, 28] 0\n",
|
|
"================================================================\n",
|
|
"Total params: 344,208\n",
|
|
"Trainable params: 344,208\n",
|
|
"Non-trainable params: 0\n",
|
|
"----------------------------------------------------------------\n",
|
|
"Input size (MB): 0.00\n",
|
|
"Forward/backward pass size (MB): 0.59\n",
|
|
"Params size (MB): 1.31\n",
|
|
"Estimated Total Size (MB): 1.91\n",
|
|
"----------------------------------------------------------------\n",
|
|
"----------------------------------------------------------------\n",
|
|
" Layer (type) Output Shape Param #\n",
|
|
"================================================================\n",
|
|
" Conv2d-1 [-1, 8, 14, 14] 72\n",
|
|
" BatchNorm2d-2 [-1, 8, 14, 14] 16\n",
|
|
" LeakyReLU-3 [-1, 8, 14, 14] 0\n",
|
|
" Conv2d-4 [-1, 32, 7, 7] 2,304\n",
|
|
" BatchNorm2d-5 [-1, 32, 7, 7] 64\n",
|
|
" LeakyReLU-6 [-1, 32, 7, 7] 0\n",
|
|
" Flatten-7 [-1, 1568] 0\n",
|
|
" Linear-8 [-1, 1] 1,569\n",
|
|
"================================================================\n",
|
|
"Total params: 4,025\n",
|
|
"Trainable params: 4,025\n",
|
|
"Non-trainable params: 0\n",
|
|
"----------------------------------------------------------------\n",
|
|
"Input size (MB): 0.00\n",
|
|
"Forward/backward pass size (MB): 0.08\n",
|
|
"Params size (MB): 0.02\n",
|
|
"Estimated Total Size (MB): 0.10\n",
|
|
"----------------------------------------------------------------\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"from torchsummary import summary\n",
|
|
"model = model.to('cuda:0')\n",
|
|
"summary(model.generator, input_size=(100,))\n",
|
|
"summary(model.discriminator, input_size=(1, 28, 28))"
|
|
]
|
|
}
|
|
],
|
|
"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
|
|
}
|