재형이의 성장통 일지
  • ResNet 이미지 분류
    2024년 03월 23일 10시 13분 16초에 업로드 된 글입니다.
    작성자: 재형이
    반응형
     

     

    • 지치지 않기 위해서 매일 조금씩이라도 성취감? 소확행?을 느껴보자
    • 사실 매일 반복되는 일상에 그런 것들을 찾는게 쉽지는 않다
    • 그렇지만 긴 여정이 될 지금 나의 도전에 있어서 지치지 않고 끝까지 가기 위해서는 그런 것들이 필요해보인다
    • 시간이 없어? 못할 것 같아? 실패하면 어떡하지? 다 핑계일 뿐이다. 일단 해보고 생각하자. 그리고 머리도 좋은 편이라고 생각하기 때문에 충분히 할 수 있을 것이라고 생각한다.

     

     

     

     

     

     


     

     

     

     

     

     

    실습내용

    • ResNet 사용하여 이미지를 학습하고 10개의 카테고리를 갖는 이미지를 분류하는 이미지 분류기를 생성합니다.
      데이터셋: CIFAR

    ResNet

    • 깊은 신경망(152 layers… ) 학습이 가능하게 하는 skip connections 구조
    • Batch Normalization을 적용
    • 분류기 학습을 위한 FC를 구현하지 않고, GAP(Global Average Pooling)을 수행

    모듈 구조

    • template/

      ├── train.py 
      ├── test.py 
      ├── main.py 

      ├── data_loader/
      │   └── data_loaders.py

      ├── data/

      ├── model/ 
      │   └── model.py

      ├── saved/
      │   ├── models/ 
      │   └── log/ 
      │  
      └── utils/
          ├── util.py
          └── ...

    !python main.py
    • Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ./data/cifar-10-python.tar.gz
      100% 170498071/170498071 [00:03<00:00, 43149548.17it/s]
      Extracting ./data/cifar-10-python.tar.gz to ./data
      Files already downloaded and verified
      epoch:0
      Loss:  9.005124378204346
      Loss:  2.9733569741249086
      Loss:  2.260711975097656
      Train Loss: 4.229379961557705, Test accuracy: 10.77%
      epoch:1
      Loss:  2.425069873332977
      Loss:  2.1626573324203493
      Loss:  2.0613731014728547
      Train Loss: 2.163993245500433, Test accuracy: 22.61%
      epoch:2
      Loss:  2.008566437959671
      Loss:  1.9731265795230866
      Loss:  1.947773255109787
      Train Loss: 1.9543577874712932, Test accuracy: 24.349999999999998%
      epoch:3
      Loss:  1.8821851539611816
      Loss:  1.8388063561916352
      Loss:  1.8178199577331542
      Train Loss: 1.8321846232694738, Test accuracy: 30.06%
      epoch:4
      Loss:  1.8080479669570924
      Loss:  1.7540086829662322
      Loss:  1.750598475933075
      Train Loss: 1.759869134334652, Test accuracy: 32.56%

    argparse 사용하기

    • 하이퍼파라미터를 변수로 선언하여 사용할 경우
      n_epochs = 200
      batch_size = 64
      lr = 0.0002
      b1 = 0.5
      b2 = 0.999
      n_cpu = 8
      latent_dim = 100
      img_size = 32
      channels = 1
      sample_interval = 400
    • 필요한 변수를 한꺼번에 사용하고, 코드에서 아래와 같이 사용
      # Optimizers
      optimizer_G = torch.optim.Adam(generator.parameters(), lr=lr, betas=(b1, b2))
      optimizer_D = torch.optim.Adam(discriminator.parameters(), lr=lr, betas=(b1, b2))
    • 모델을 학습시킬 때 마다 코드를 수정하지 않고, 파이썬 코드를 run할 때 특정 매개변수의 조건을 변경하여 수행하고자 할때, argparse를 사용하면 효과적임
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('-gpu', '--gpu', dest='gpu', type=int, default=0)
    parser.add_argument('-m', '--momentum', dest='momentum', type=float, default=0.9)
    parser.add_argument('-w', '--weight_decay', dest='weight_decay', type=float, default=0.0001)
    parser.add_argument('-f', '--factor', dest='factor', type=float, default=0.1)
    parser.add_argument('-lr', '--lr', dest='lr', type=float, default=0.1)
    parser.add_argument('-b', '--batch_size', dest='batch_size', type=int, default=128)
    parser.add_argument('-p', '--patience', dest='patience', type=int, default=5)
    parser.add_argument('-e', '--max_epoch', dest='max_epoch', type=int, default=100)
    
    args = parser.parse_args()
    print(args)
    • 하이퍼파라미터를 사용하는 곳에서 다음과 같이 args의 속성값을 호출하여 설정
    EPOCHS = args.max_epoch
    !python main_args.py -e 5
    • Namespace(gpu=0, momentum=0.9, weight_decay=0.0001, factor=0.1, lr=0.1, batch_size=128, patience=5, max_epoch=5)
      Files already downloaded and verified
      Files already downloaded and verified
      epoch:0
      Loss:  7.860379967689514
      Loss:  4.113790934085846
      Loss:  2.7221954345703123
      Train Loss: 4.283555899739571, Test accuracy: 20.3%
      epoch:1
      Loss:  2.2016755783557893
      Loss:  2.135593971014023
      Loss:  2.123730591535568
      Train Loss: 2.1267415818655886, Test accuracy: 24.099999999999998%
      epoch:2
      Loss:  2.002441394329071
      Loss:  1.939110096693039
      Loss:  1.8888099443912507
      Train Loss: 1.9179317478633597, Test accuracy: 29.95%
      epoch:3
      Loss:  1.86790078997612
      Loss:  1.8161746096611022
      Loss:  1.7911198079586028
      Train Loss: 1.8083095638953206, Test accuracy: 33.46%
      epoch:4
      Loss:  1.7735263431072235
      Loss:  1.73421142578125
      Loss:  1.7277535462379456
      Train Loss: 1.7305983795839197, Test accuracy: 37.74%

     

     

     

     

     

     

     

     


     

     

     

     

     

     

    반응형

    '인공지능 > 프레임워크 or 라이브러리' 카테고리의 다른 글

    GAN  (2) 2024.03.22
    LSTM Classifier  (0) 2024.03.21
    Variational Autoencoder  (0) 2024.03.20
    VGGNet을 사용한 이미지 분류기 실습  (2) 2024.03.19
    AlexNet을 사용한 이미지 분류기 실습  (0) 2024.03.18
    댓글