Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

4주차 과제 #5

Open
GirinMan opened this issue Apr 5, 2023 · 10 comments
Open

4주차 과제 #5

GirinMan opened this issue Apr 5, 2023 · 10 comments
Assignees
Labels
assignment 각 주차별 조별 과제 기록

Comments

@GirinMan
Copy link
Member

GirinMan commented Apr 5, 2023

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

회합 자료 링크: #1 (comment)
image

  • 이번에는 다른 사람들이 먼저 학습시켜놓은 최신 모델 구조를 사용하여 Fashion MNIST 분류를 수행하는 모델을 만들어 봅시다!
  • 노트북 실행 방법은 지난 회합 자료 마지막 부분을 참고하세요.

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

fashion_mnist_cnn.ipynb

  • Google 계정 로그인 후 colab에 접속해서 현재 레포지토리의 /Week4/fashion_mnist_cnn.ipynb노트북을 실행해보면서 아래와 같은 단계로 과제를 진행해 주세요.
  • 기존 모델 학습 코드를 동일하게 활용해도 좋고, 모델을 더 잘 학습시키기 위한 아이디어가 있다면 반영해도 좋아요!

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

  • Fashion MNIST 데이터를 분류하기 위한 CNN 모델을 정의하고, 학습 및 평가 과정을 살펴봅시다.

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

  • 다양한 이미지의 특성을 추출하고 카테고리를 분류할 수 있는 MobileNet의 능력을 이용하여, Fashion MNIST를 분류하는 모델을 학습시켜 봅시다.
  • MobileNet에 사전 학습된 파라미터를 불러오지 않고, 이전처럼 빈 모델로 같은 task를 튜닝했을 때 어떻게 평가 결과가 달라지는지(test acc, loss 등)를 비교해 주세요.
  • 힌트: MobileNet 모델을 torchvision으로 불러올 때, weights에 어떤 값을 지정하느냐에 따라 사전 학습된 파라미터를 불러올지 말지 선택할 수 있어요.
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 GirinMan self-assigned this Apr 5, 2023
@GirinMan GirinMan added the assignment 각 주차별 조별 과제 기록 label Apr 5, 2023
@GirinMan
Copy link
Member Author

GirinMan commented Apr 5, 2023

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

0조

Fashion MNIST 학습 결과

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

  • Train accuarcy: 00%
  • Test accuracy: 00%

2. CNN + MaxPool

  • Train accuarcy: 00%
  • Test accuracy: 00%

4. MobileNet(with pretrained weights)

  • Train accuarcy: 00%
  • Test accuracy: 00%

5. MobileNet(without pretrained weights)

  • Train accuarcy: 00%
  • Test accuracy: 00%

결과 분석

  • 학습 결과 분류 성능이 가장 뛰어난 모델 아키텍쳐는 어떤 것이었나요?
  • MobileNet 구조에 사전 학습된 파라미터를 불러오는 것은 어떤 결과를 가져왔나요?
  • 기타 분류 성능을 높이기 위한 여러 도전들(하이퍼파라미터 튜닝 등)이 있다면 공유해주세요~!!

@YUNHYUNWOO
Copy link

YUNHYUNWOO commented May 4, 2023

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
Copy link

Ahngab commented May 11, 2023

1조 딥러닝 스터디 과제
2. CNN + Max pooling
MaxPooling
Train Accuracy: 92.33%
Test Accuracy: 85.52%
3. MobileNet
Mobilnet
Train Accuracy: 92.79%
Test Accuracy: 85.56%

@t2easure
Copy link

t2easure commented May 11, 2023

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
  1. MobileNet(with pretrained weights)
    Train accuracy: 97.62%
    Test accuracy: 92.30%
image
  1. MobileNet(with pretrained weights)
    Train accuracy: 94.14%
    Test accuracy: 85.72%
image
  1. 결과 분석
  • MobileNet 구조에 사전 학습된 파라미터를 불러오는 것이 정확도를 더 높이는 결과를 불러일으켰다.

  • MobileNet 구조에 사전 학습된 파라미터를 불러오는 코드에 기존 epoch의 수를 20으로 늘렸다.

image image

Train accuracy: 98.88%
Test accuracy: 92.82%

image
image
image

@JOHAJUN
Copy link

JOHAJUN commented May 11, 2023

딥러닝스터디 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
Copy link

ymnseol commented May 11, 2023

4조

Fashion MNIST 학습 결과

  1. Feed forward network(3주차 과제 결과)
  • Train accuarcy: 89.19%
  • Test accuracy: 86.83%
  1. 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

결과 분석

  • 학습 결과 분류 성능이 가장 뛰어난 모델 아키텍쳐는 어떤 것이었나요?
    • MobileNet(with pretrained weights)
  • MobileNet 구조에 사전 학습된 파라미터를 불러오는 것은 어떤 결과를 가져왔나요?
    • 사전 학습된 파라미터를 불러오는 것이 분류 성능을 더 높여주었다.
  • 기타 분류 성능을 높이기 위한 여러 도전들(하이퍼파라미터 튜닝 등)이 있다면 공유해주세요~!!
    • Pre-trained weights를 불러오고 dimension에 변경이 있는 classifier만 제외하고 freeze를 해서 모델 학습을 시도했는데, 학습에 걸리는 시간은 아주 조금 줄어들었지만 accuracy는 너무 많이 깎였습니다 :(

@twkang43
Copy link

twkang43 commented Jul 19, 2023

강태욱

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. 결과분석

  • 학습 결과 분류 성능이 가장 뛰어난 모델 아키텍쳐는 어떤 것이었나요?
    • MobileNet with pretrained weights
  • MobileNet 구조에 사전 학습된 파라미터를 불러오는 것은 어떤 결과를 가져왔나요?
    • 사전 학습된 파라미터를 통해 분류의 정확도를 더 향상시킬 수 있었다. 또한, 같은 정확도를 기준으로 사전 데이터가 있는 경우 더 빨리 모델을 학습시킬 수 있었다.
  • 기타 분류 성능을 높이기 위한 여러 도전들(하이퍼파라미터 튜닝 등)이 있다면 공유해주세요~!!
  • MobileNet with pretrained weights에서 train의 epoch를 20으로 늘리니 더 높은 정확도를 보였습니다.
  • Train accuracy: 99.08%
  • Test accuracy: 92.43%
  • image

@mnxcv
Copy link

mnxcv commented Jul 22, 2023

임세훈

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)
)
변경점
  • In/Out Channels 값 변경
  • Epoch값 $15$로 변경
결과
Train accuracy: 96.06%
Test accuracy: 91.67%

$\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
  • 사전학습 가중치를 불러온 MobileNet의 성능이 가장 좋았다.
  • 가중치를 불러오지 않은 경우 정확도가 크게 저하됨을 알 수 있었다.

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

@KangMeanWoo
Copy link

강민우

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=4*4*64, 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이 줄었다고 볼 수 있을 것 같습니다.

  1. MobileNet(with pretrained weights)

Train accuracy: 99.34%
Test accuracy: 92.31%

  1. MobileNet(without pretrained weights)

Train accuracy: 98.12%
Test accuracy: 87.17%

결과 분석

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

@DHki
Copy link

DHki commented Jul 22, 2023

김동하

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
assignment 각 주차별 조별 과제 기록
Projects
None yet
Development

No branches or pull requests

10 participants