방명록
- 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%
- [reference]
https://tutorials.pytorch.kr/beginner/basics/buildmodel_tutorial.html
https://tutorials.pytorch.kr/beginner/basics/data_tutorial.html
https://medium.com/@djin31/how-to-plot-wholesome-confusion-matrix-40134fd402a8
반응형'인공지능 > 프레임워크 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 다음글이 없습니다.이전글이 없습니다.댓글