2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2025년 5월 22일 01:59 #139471
오형선참가자GAN 모델링 하고 epochs 돌려보는데 에포크 넘어가더라도 계쏙 자글자글 이미지만 나와서 지피티랑 싸우다보니 새벽2시가 되버렸습니다 대체 어찌된영문인지 한번 봐주시면 대단히 감사하겠습니다
#실제 사람사진 데이터셋 만들기 (이미지 숫자 변환 쉽게) from PIL import Image import numpy as np #행렬화 된 이미지 생성 X데이터 = [이미지1행렬, 이미지2행렬..]
import os file_list = os.listdir('/content/img_align_celeba/img_align_celeba') print(file_list)
images = []
for i in file_list[0:50000]: 숫자화 = ( Image.open('/content/img_align_celeba/img_align_celeba/' + i) .crop( (20,30,160,180) ) # (20,30)~(160,180) 으로 자르기, .convert('L') # 흑백 사진으로 변경 // 학습속도 .resize( (64, 64) ) #이미지 사이즈 줄이기 ) images.append( np.array(숫자화) ) #전처리 행렬 255로 나누자
import matplotlib.pyplot as plt plt.imshow(images[1]) plt.show() #이미지 행렬 255로 나누기 & reshape images = np.divide( images, 255 ) images = images.reshape( 50000, 64, 64, 1) print(images.shape) #(50000, 64, 64, 1)
#Model1 - Discrimator 만들기 (정답) import tensorflow as tf
discriminator = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(64, (3,3), strides=(2, 2), padding='same', input_shape=[64,64,1]), tf.keras.layers.LeakyReLU(alpha=0.2), tf.keras.layers.Dropout(0.4), tf.keras.layers.Conv2D(64, (3,3), strides=(2, 2), padding='same'), tf.keras.layers.LeakyReLU(alpha=0.2), tf.keras.layers.Dropout(0.4), tf.keras.layers.Flatten(), tf.keras.layers.Dense(1, activation='sigmoid') ])
#Model2 - Generator 만들기
generator = tf.keras.models.Sequential([ tf.keras.layers.Dense(4 * 4 * 256, input_shape=(100,) ), tf.keras.layers.Reshape((4, 4, 256)), tf.keras.layers.Conv2DTranspose(256, 3, strides=2, padding='same'), tf.keras.layers.LeakyReLU(alpha=0.2), tf.keras.layers.BatchNormalization(), tf.keras.layers.Conv2DTranspose(128, 3, strides=2, padding='same'), tf.keras.layers.LeakyReLU(alpha=0.2), tf.keras.layers.BatchNormalization(), tf.keras.layers.Conv2DTranspose(64, 3, strides=2, padding='same'), tf.keras.layers.LeakyReLU(alpha=0.2), tf.keras.layers.BatchNormalization(), tf.keras.layers.Conv2DTranspose(1, 3, strides=2, padding='same', activation='sigmoid') ])
#Model3 - GAN 전체 모델 만들기 GAN = tf.keras.models.Sequential([generator, discriminator])
discriminator.compile( optimizer='adam', loss='binary_crossentropy' ) discriminator.trainable = False
GAN.compile(optimizer='adam', loss='binary_crossentropy')
def predict_pic(): #Generator 에 랜덤숫자 넣으면 이미지를 뱉을까? 랜덤숫자 = np.random.uniform(-1,1,size=(128,100)) 예측 = generator.predict(랜덤숫자)
for i in range(10): plt.subplot(2, 5, i+1) plt.imshow(예측[i].reshape(64,64), cmap='gray') #칼라면 64,64,3 plt.axis('off') plt.tight_layout() plt.show()
X데이터 = images
for j in range(300): print(f'현재 epoch = {j}회') predict_pic()
for i in range(50000//128): if i % 100 == 0: print(f'현재 배치 = {i}번째')
#Discriminator 트레이닝 (가짜이미지128장 + 실제이미지128장) 진짜사진들 = X데이터[i * 128 : (i+1) * 128] 마킹한정답들1 = np.ones(shape=(128, 1))#[1 1 1 1 1... 128개] loss1 = discriminator.train_on_batch(진짜사진들, 마킹한정답들1)
#Discriminator 가짜사진학습 랜덤숫자 = np.random.uniform(-1, 1, size = (128, 100) ) 가짜사진들 = generator.predict(랜덤숫자, verbose=0) 마킹한정답들0 = np.zeros(shape = (128, 1)) #[0 0 0 0]리스트나 행렬 loss2 = discriminator.train_on_batch(가짜사진들, 마킹한정답들0)
#Generator 트레이닝 (GAN에 랜덤숫자, 정답1을 128개 집어넣기) 랜덤숫자 = np.random.uniform(-1, 1, size = (128, 100) ) 마킹한정답들1 = np.ones(shape=(128, 1))#[1 1 1 1 1... 128개] loss3 = GAN.train_on_batch(랜덤숫자, 마킹한정답들1) #로 마킹한 숫자
print(f'이번 epoch의 최종 loss는 Discriminator {loss1+loss2}, GAN {loss3}') 이렇게 학습했을 때, GAN모델이 애가 정신을못차립니다.
현재 epoch = 4회
이번 epoch의 최종 loss는 Discriminator 3.4744060039520264, GAN 0.064357690513134
-
이 게시글은
오형선에 의해 4 주 전에 수정됐습니다.
-
이 게시글은
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.