더북(TheBook)

여기서 128은 임의로 정한 노드의 수입니다. 128이 아니어도 충분한 노드를 마련해 주면 됩니다. input_dim=100은 100차원 크기의 랜덤 벡터를 준비해 집어넣으라는 의미입니다. 꼭 100이 아니어도 좋습니다. 적절한 숫자를 임의로 넣어 주면 됩니다.

여기서 주의할 부분은 7*7입니다. 이는 이미지의 최초 크기를 의미합니다. MNIST 손글씨 이미지의 크기는 28×28인데, 왜 7×7 크기의 이미지를 넣어 줄까요?

을 보면 답이 있습니다. UpSampling2D() 함수를 사용했습니다. UpSampling2D() 함수는 이미지의 가로세로 크기를 두 배씩 늘려 줍니다. 7×7이 레이어를 지나며 그 크기가 14×14가 되고, 레이어를 지나며 28×28이 되는 것입니다.

이렇게 작은 크기의 이미지를 점점 늘려 가면서 컨볼루션 층(, )을 지나치게 하는 것이 DCGAN의 특징입니다.

 

TIP

케라스는 Upsampling과 Conv2D를 합쳐 놓은 Conv2DTranspose() 함수도 제공합니다. , , 를 각각 없애고 이 함수 하나만 써도 되는데, 여기서는 이해를 돕기 위해 두 개로 나누어 쓰고 설명합니다.

은 컨볼루션 레이어가 받아들일 수 있는 형태로 바꾸어 주는 코드입니다. Conv2D() 함수의 input_shape 부분에 들어갈 형태로 정해 줍니다(16장 참조).

generator.add(Reshape((7, 7, 128))) ----- ➌
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.