예제에서 진행할 MNIST를 내려받아 정규화를 적용합니다. 이후에는 데이터로더에 데이터를 전달하여 모델의 학습에 사용할 수 있도록 합니다.
코드 13-24 MNIST를 내려받은 후 정규화
transform = transforms.Compose([
transforms.ToTensor(), ------ 이미지를 텐서로 변환
transforms.Normalize((0.5,),(0.5,)), ------ 이미지를 평균이 0.5, 표준편차가 0.5가 되도록 정규화
])
train_dataset = datasets.MNIST(
root="../chap13/data", train=True, transform=transform, download=True)
train_loader = DataLoader(
train_dataset, batch_size=batch_size, shuffle=True, num_workers=4)
데이터셋이 준비되었기 때문에 네트워크를 생성할 텐데, 먼저 생성자 네트워크를 만들어 보겠습니다. 간단한 예제를 위해 네 개의 선형 계층과 세 개의 리키렐루(LeakyReLU) 활성화 함수를 사용합니다.
코드 13-25 생성자 네트워크 생성
class Generator(nn.Module):
def __init__(self, nz):
super(Generator, self).__init__()
self.nz = nz
self.main = nn.Sequential(
nn.Linear(self.nz, 256),
nn.LeakyReLU(0.2),
nn.Linear(256, 512),
nn.LeakyReLU(0.2),
nn.Linear(512, 1024),
nn.LeakyReLU(0.2),
nn.Linear(1024, 784),
nn.Tanh(),
)
def forward(self, x):
return self.main(x).view(-1, 1, 28, 28) ------ 생성자 네트워크의 반환값은 ‘배치 크기×1×28×28’이 됩니다.