HanyangTechAI / 2023-Deep-Learning-Study

2023 HAI 딥러닝 스터디 진행과정을 기록하기 위한 레포지토리입니다.
MIT License
7 stars 2 forks source link

4주차 과제 #5

Open GirinMan opened 1 year ago

GirinMan commented 1 year ago

네 번째 과제: 최신 모델과 Transfer Learning의 효과 분석

회합 자료 링크: https://github.com/HanyangTechAI/2023-Deep-Learning-Study/issues/1#issuecomment-1497256534 image

Colab Python 노트북을 사용한 모델 학습 코드 구성하기

fashion_mnist_cnn.ipynb

Step 1. 예시 노트북을 실행해보며 CNN 모델로 Fashion MNIST 튜닝하기

Step 2. MobileNet의 Fashion MNIST 분류 문제 transfer learning 효과 분석

from torchvision.models.mobilenet import mobilenet_v2

# weights 옵션을 통해 빈 모델만 불러오거나
# 사전학습된 파라미터를 불러오는 것 중 선택 가능
model = mobilenet_v2(weights=True) # weights=False일 경우 빈 모델을 불러옴

# Fashion MNIST의 class 개수만큼 출력하도록 output layer 변형
model.classifier[1] = torch.nn.Linear(in_features=model.classifier[1].in_features, out_features=10)
model.to(device)
GirinMan commented 1 year ago

과제 제출 예시 내용은 꼭 아래처럼 할 필요 없이 조별로 자유롭게 쓰시면 됩니다!

0조

Fashion MNIST 학습 결과

1. Feed forward network(3주차 과제 결과)

2. CNN + MaxPool

4. MobileNet(with pretrained weights)

5. MobileNet(without pretrained weights)

결과 분석

YUNHYUNWOO commented 1 year ago

3조

  1. CNN + MAXPOOL HAI 4-1 모델

좋은 결과를 위해 out-chanel과 inchanel의 개수를 조정했습니다.

HAI 4-1 HAI 4-1 결과 90%라는 좋은 test accuracy를 얻을 수 있었습니다.

  1. MobileNet (with pretrained weights) HAI 4-2-1 그래프 HAI 4-2-1 ng) 미리 학습된 가중치를 사용하니 CNN의 결과보다 더욱 좋은 결과를 얻을 수 있었습니다.

  2. MobileNet (without pretrained weights) HAI 4-2-2 그래프 HAI 4-2-2 가중치를 없이 학습을 한 모델은 과적합되어 낮은 test accuracy를 보였습니다.

Ahngab commented 1 year ago

1조 딥러닝 스터디 과제

  1. CNN + Max pooling MaxPooling Train Accuracy: 92.33% Test Accuracy: 85.52%
  2. MobileNet Mobilnet Train Accuracy: 92.79% Test Accuracy: 85.56%
t2easure commented 1 year ago

Fashion MNIST 학습 결과

  1. Feed forward network (3주차 과제 결과) Train accuracy : 87.58% Test accuracy : 85.84%

  2. CNN + MaxPool Train accuracy: 89.45% Test accuracy: 88.11%

    image
  3. MobileNet(with pretrained weights) Train accuracy: 97.62% Test accuracy: 92.30%

    image
  4. MobileNet(with pretrained weights) Train accuracy: 94.14% Test accuracy: 85.72%

    image
  5. 결과 분석

    • MobileNet 구조에 사전 학습된 파라미터를 불러오는 것이 정확도를 더 높이는 결과를 불러일으켰다.
image

Train accuracy: 98.88% Test accuracy: 92.82%

- image image image

JOHAJUN commented 1 year ago

딥러닝스터디 5조

1. Feed forward network(3주차 과제 결과)

layer 3개

2. CNN + MaxPool

0511 cnn

3. MobileNet(with pretrained weights)

0511MobileNet(with pretrained weights)

4. MobileNet(without pretrained weights)

5 11가중치 x

결과 분석

train accuray 하고 test accuracy 둘 다 사전 학습된 파라미터를 가져온 mobile net이 제일 높습니다. train accuray, test accuracy 사이의 차이가 가장 큰 모델은 가중치가 없는 mobilenet입니다.

ymnseol commented 1 year ago

4조

Fashion MNIST 학습 결과

  1. Feed forward network(3주차 과제 결과)

    • Train accuarcy: 89.19%
    • Test accuracy: 86.83%
  2. CNN + MaxPool

    • 김율희
    • Train accuarcy: 91.34%
    • Test accuracy: 90.02%
    • 설유민
    • Train accuracy: 89.31%
    • Test accuracy: 88.10%

KakaoTalk_Photo_2023-05-11-18-57-27 001

  1. MobileNet(with pretrained weights)
    • 김율희
    • Train accuarcy: 97.58%
    • Test accuracy: 92.43%
    • 설유민
    • Train accuarcy: 97.59%
    • Test accuracy: 92.44%

KakaoTalk_Photo_2023-05-11-18-57-28 002

  1. MobileNet(without pretrained weights)
    • 김율희
    • Train accuarcy: 94.56%
    • Test accuracy: 88.11%
    • 설유민
    • Train accuarcy: 93.47%
    • Test accuracy: 85.40%

KakaoTalk_Photo_2023-05-11-18-57-28 003

결과 분석

twkang43 commented 1 year ago

강태욱

Fashion MNIST 학습결과

1. Feed foward network(3주차 과제 결과)

Train accuracy: 88.35% Test accuracy: 86.41%

2. CNN + MaxPool

3주차 과제에 사용한 neural network(Dropout, PReLU)를 사용하였다. Train accuracy: 92.12% Test accuracy: 89.96%

image

3. MobileNet(with pretrained weights)

Train accuracy: 97.72% Test accuracy: 91.97% image

4. MobileNet(without pretrained weights)

Train accuracy: 93.51% Test accuracy: 85.35% image

5. 결과분석

mnxcv commented 1 year ago

임세훈

Fashion MNIST 학습 결과

1. Feed Forward Network

결과
Train accuracy: 90.69%
Test accuracy: 87.87%

2. CNN + MaxPool

코드
model = nn.Sequential(
    nn.Conv2d(in_channels=1, out_channels=64, kernel_size=5, stride=1, padding="valid"),
    nn.ReLU(),
    nn.MaxPool2d(kernel_size=2),
    nn.Conv2d(in_channels=64, out_channels=256, kernel_size=5, stride=1, padding="valid"),
    nn.ReLU(),
    nn.MaxPool2d(kernel_size=2),
    nn.Flatten(),
    nn.Linear(in_features=4*4*256, out_features=512),
    nn.ReLU(),
    nn.Linear(in_features=512, out_features=10)
)
변경점

$\rightarrow$ Feed Forward Network 보다 약 4% 향상

3. MobileNet(with pretrained weights)

코드
from torchvision.models.mobilenet import mobilenet_v2

# weights 옵션을 통해 빈 모델만 불러오거나
# 사전학습된 파라미터를 불러오는 것 중 선택 가능
model = mobilenet_v2(weights=True)

# Fashion MNIST의 class 개수만큼 출력하도록 output layer 변형
model.classifier[1] = torch.nn.Linear(in_features=model.classifier[1].in_features, out_features=10)
_ = model.to(device)
결과
Train accuracy: 98.62%
Test accuracy: 92.27%

$\rightarrow$ CNN + MaxPool 보다 약 0.6% 향상

4. MobileNet(without pretrained weights)

코드
from torchvision.models.mobilenet import mobilenet_v2

# weights 옵션을 통해 빈 모델만 불러오거나
# 사전학습된 파라미터를 불러오는 것 중 선택 가능
model = mobilenet_v2(weights=False)

# Fashion MNIST의 class 개수만큼 출력하도록 output layer 변형
model.classifier[1] = torch.nn.Linear(in_features=model.classifier[1].in_features, out_features=10)
_ = model.to(device)
결과
Train accuracy: 95.53%
Test accuracy: 86.43%

$\rightarrow$ Pretrained Weights를 사용한 경우보다 약 6% 저하

결과 분석

Accuracy : 
MobileNet without pretrained weights < Feed Forward < 
CNN + MaxPool < MobileNet with pretrained weights

사용한 Colab Notebook 주소는 여기에서 확인할 수 있습니다.

KangMeanWoo commented 1 year ago

강민우

Fashion MNIST 학습 결과

  1. Feed forward network(3주차 과제 결과)

Train accuracy: 94.21% Test accuracy: 89.20%

  1. CNN + MaxPool
    
    from torch import nn

model = nn.Sequential( nn.Conv2d(in_channels=1, out_channels=64, kernel_size=5, stride=1, padding="valid"), nn.ReLU(), nn.MaxPool2d(kernel_size=2), nn.Conv2d(in_channels=64, out_channels=64, kernel_size=5, stride=1, padding="valid"), nn.ReLU(), nn.MaxPool2d(kernel_size=2), nn.Flatten(), nn.Linear(in_features=4464, out_features=128), nn.ReLU(), nn.Linear(in_features=128, out_features=10) )


out_channels와 in_channels를 살짝 바꾸었고 epoch도 30으로 늘렸습니다.

Train accuracy: 94.44%
Test accuracy: 91.07%

1번과 비교했을 때 Train accuracy는 비슷하지만 Test accuracy가 더 높아졌으므로 overfitting이 줄었다고 볼 수 있을 것 같습니다.

3. MobileNet(with pretrained weights)

Train accuracy: 99.34%
Test accuracy: 92.31%

4. MobileNet(without pretrained weights)

Train accuracy: 98.12%
Test accuracy: 87.17%

**결과 분석**

학습 결과 분류 성능이 가장 뛰어난 모델은 4번 모델이였습니다. 파라미터를 불러오는 것이 훨씬 더 높은 Test accuracy가 나타났습니다.
DHki commented 1 year ago

김동하

1. CNN + Max Pooling

사용한 모델은 아래와 같은 모델입니다!

model = nn.Sequential(
    nn.Conv2d(in_channels=1, out_channels=64, kernel_size=3, padding='same'),
    nn.ReLU(),
    nn.MaxPool2d(kernel_size=2, stride=2),

    nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, padding='same'),
    nn.ReLU(),
    nn.MaxPool2d(kernel_size=2, stride=2),

    nn.Flatten(),

    nn.Linear(7 * 7 * 128, 64),
    nn.ReLU(),
    nn.Linear(64, 10)
)

model = model.to(dev)
loss_function = nn.CrossEntropyLoss().to(dev)
optimizer = optim.Adam(model.parameters(), lr=.01)

optimizer를 Adam으로 설정했고, 필터의 개수를 128개까지 만들어봤습니다.
결과는 아래와 같습니다.
image

이전 과제의 모델의 정확도는 86%인 걸 감안했을 때, 약 5% 가량 정확도가 상승했습니다.

2. MobileNet(with pretrained parameters)

사용한 모델은 아래와 같습니다.

mobileNet = torchvision.models.mobilenet_v2(pretrained=True)
mobileNet.features[0][0] = nn.Conv2d(1, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
mobileNet.classifier[-1] = nn.Linear(1280, 10)
#mobileNet.classifier.append(nn.Linear(1000,10))

mobileNet = mobileNet.to(dev)

loss_function = nn.CrossEntropyLoss().to(dev)
optimizer = optim.Adam(mobileNet.parameters(), lr=.001)

모델을 15회 학습시킨 뒤의 정확도는 아래와 같습니다.
image

3. MobileNet(without pretrained parameters)

사용한 모델은 아래와 같습니다.

mobileNet = torchvision.models.mobilenet_v2(pretrained=False)
mobileNet.features[0][0] = nn.Conv2d(1, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
mobileNet.classifier[-1] = nn.Linear(1280, 10)
#mobileNet.classifier.append(nn.Linear(1000,10))

mobileNet = mobileNet.to(dev)

loss_function = nn.CrossEntropyLoss().to(dev)
optimizer = optim.Adam(mobileNet.parameters(), lr=.001)

모델을 10회 학습시킨 뒤의 정확도는 아래와 같습니다.
image