예제에서 진행할 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’이 됩니다.
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.