더북(TheBook)

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