Aai 3
Aai 3
import math
import matplotlib.pyplot as plt
import torchvision
import torchvision.transforms as transforms
import os
torch.manual_seed(111)
<torch._C.Generator at 0x7cb5041e1590>
device = ''
if torch.cuda.is_available():
device = torch.device('cuda')
else:
device = torch.device('cpu')
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))])
train_set = torchvision.datasets.MNIST(root='.',
train=True,
download=True,
transform=transform)
batch_size = 32
train_loader = torch.utils.data.DataLoader(train_set,
batch_size=batch_size,
shuffle=True)
plt.figure(dpi=150)
real_samples, mnist_labels = next(iter(train_loader))
for i in range(16):
ax = plt.subplot(4, 4, i+1)
plt.imshow(real_samples[i].reshape(28, 28), cmap='gray_r')
plt.xticks([])
plt.yticks([])
plt.tight_layout()
class Discriminator(nn.Module):
def __init__(self):
super().__init__()
self.model = nn.Sequential(
nn.Linear(784, 1024),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(1024, 512),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(512, 256),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(256, 1),
nn.Sigmoid()
)
discriminator = Discriminator().to(device=device)
class Generator(nn.Module):
def __init__(self):
super().__init__()
self.model = nn.Sequential(
nn.Linear(100, 256),
nn.ReLU(),
nn.Linear(256, 512),
nn.ReLU(),
nn.Linear(512, 1024),
nn.ReLU(),
nn.Linear(1024, 784),
nn.Tanh(),
)
generator = Generator().to(device=device)
lr = 0.0001
num_epochs = 20
loss_function = nn.BCELoss()
# Show loss
if n == batch_size - 1:
print(f"Epoch: {epoch} Loss D.: {loss_discriminator}")
print(f"Epoch: {epoch} Loss G.: {loss_generator}")
generated_samples = generator(latent_space_samples)
generated_samples = generated_samples.cpu().detach()
plt.figure(dpi=150)
for i in range(16):
ax = plt.subplot(4, 4, i+1)
plt.imshow(generated_samples[i].reshape(28, 28), cmap='gray_r')
plt.xticks([])
plt.yticks([])
plt.tight_layout()