본문 바로가기
Dev

GAN

by 호랑2 2023. 3. 3.

GAN은 Generative Adversarial Networks의 약자로, 실제 데이터와 비슷한 새로운 데이터를 생성하기 위한 딥러닝 아키텍처이다. 이 모델은 생성자와 판별자라는 두 개의 네트워크를 사용한다.

GAN 모델의 핵심 개념은 생성자와 판별자가 서로 경쟁하는 것이다. 생성자는 실제 데이터와 유사한 데이터를 생성하기 위해 학습하며, 판별자는 이러한 데이터가 실제인지 생성된 것인지를 판단하도록 학습한다.

생성자는 판별자를 속일 수 있도록 더 좋은 결과를 만들려고 하며, 판별자는 생성자가 생성한 이미지를 더 이상 구분하지 못하도록 더 강력한 분류 모델이 되려고 노력한다. 이 두 네트워크가 서로 경쟁하면서 점차 발전하고, 결국 생성자는 실제 데이터와 거의 구분할 수 없는 가짜 데이터를 생성할 수 있다.

GAN 모델의 장점은 다음과 같다.

GAN은 실제 데이터와 유사한 새로운 데이터를 생성할 수 있고 데이터에 대한 사전 지식이 없어도 GAN 모델은 데이터를 생성할 수 있으며 생성된 데이터는 다양한 분야에서 활용될 수 있다.

하지만 GAN 모델에는 몇 가지 문제점도 있는데 일반적으로 훈련이 매우 불안정하며, 훈련을 위한 매개변수를 세밀하게 조정해야 할 수도 있다. 또한 생성된 데이터가 실제 데이터와 거의 구분할 수 없기 때문에, 생성된 데이터가 진짜인지 아닌지를 판별하는 것이 어려울 수 있다.

샘플 코드는 아래와 같다.

from tensorflow.keras.models import load_model
import numpy as np
import matplotlib.pyplot as plt

# 생성자 모델 불러오기
generator = load_model('generator_model.h5')

# 랜덤 노이즈 생성
noise = np.random.normal(0, 1, (25, 100))

# 이미지 생성
gen_imgs = generator.predict(noise)

# 이미지 0-1 사이 값으로 변환
gen_imgs = 0.5 * gen_imgs + 0.5

# 이미지 출력
fig, axs = plt.subplots(5, 5)
cnt = 0
for i in range(5):
    for j in range(5):
        axs[i,j].imshow(gen_imgs[cnt, :,:,0], cmap='gray')
        axs[i,j].axis('off')
        cnt += 1
plt.show()

'Dev' 카테고리의 다른 글

VAE 모델  (0) 2023.03.05
BERT 언어모델  (0) 2023.03.04
P-Tuning  (0) 2023.02.22
LSTM  (0) 2023.02.21
[colab] UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte  (0) 2023.02.18

댓글