Open danbi5228 opened 7 months ago
tf.random.set_seed(42)
np.random.seed(42)
codings_size = 100
generator = keras.models.Sequential([ keras.layers.Dense(7 7 128, input_shape=[codings_size]), keras.layers.Reshape([7, 7, 128]), keras.layers.BatchNormalization(), keras.layers.Conv2DTranspose(64, kernel_size=5, strides=2, padding="SAME", activation="selu"), keras.layers.BatchNormalization(), keras.layers.Conv2DTranspose(1, kernel_size=5, strides=2, padding="SAME", activation="tanh"), ]) discriminator = keras.models.Sequential([ keras.layers.Conv2D(64, kernel_size=5, strides=2, padding="SAME", activation=keras.layers.LeakyReLU(0.2), input_shape=[28, 28, 1]), keras.layers.Dropout(0.4), keras.layers.Conv2D(128, kernel_size=5, strides=2, padding="SAME", activation=keras.layers.LeakyReLU(0.2)), keras.layers.Dropout(0.4), keras.layers.Flatten(), keras.layers.Dense(1, activation="sigmoid") ]) gan = keras.models.Sequential([generator, discriminator])
<image width=450 src=https://github.com/njs03332/ml_study/assets/50584633/149d5e97-955f-430e-a161-dc03ac3363a4>
- 이 코드는 훈련 epoch 50 이후에 다음과 같은 이미지를 생성
- 이 구조를 늘려 훈련하면 더욱 실제와 같은 이미지를 얻을 수 있음
- 다음은 대규모 얼골 데이터셋에서 훈련한 결과
<image width=450 src=https://github.com/njs03332/ml_study/assets/50584633/eb9bee79-9fa2-4a6c-8e10-8bbdc44a0a69>
- 세 카테고리의 이미지를 생성하기 위한 코딩을 평균하고, 이 평균 코딩으로 이미지를 생성
- 즉, 왼쪽 아래 3개는, 각각 위의 3개 이미지의 평균을 나타냄
- 이따 평균은, 픽셀 수준의 단순한 평균 계산이 아닌, 잠재 공간에서 계산된 평균
- 따라서 이미지가 자연스러운 얼굴처럼 보일 수 있음