• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Python, SQL 게시판 GAN 3번 강의들었는데도 모델링이 안됩니다 ㅜ_ㅜ

GAN 3번 강의들었는데도 모델링이 안됩니다 ㅜ_ㅜ

  • 이 주제에는 1개 답변, 2명 참여가 있으며 codingapple4 주 전에 전에 마지막으로 업데이트했습니다.
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #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 주 전에 수정됐습니다.
    #139479

    codingapple
    키 마스터
    초반이라 그럴수도요 epoch 한 20회 넘게 돌려봅시다
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠