Open GirinMan opened 1 year ago
과제 제출 예시 내용은 꼭 아래처럼 할 필요 없이 조별로 자유롭게 쓰시면 됩니다!
3조
좋은 결과를 위해 out-chanel과 inchanel의 개수를 조정했습니다.
90%라는 좋은 test accuracy를 얻을 수 있었습니다.
MobileNet (with pretrained weights) ng) 미리 학습된 가중치를 사용하니 CNN의 결과보다 더욱 좋은 결과를 얻을 수 있었습니다.
MobileNet (without pretrained weights) 가중치를 없이 학습을 한 모델은 과적합되어 낮은 test accuracy를 보였습니다.
1조 딥러닝 스터디 과제
Fashion MNIST 학습 결과
Feed forward network (3주차 과제 결과) Train accuracy : 87.58% Test accuracy : 85.84%
CNN + MaxPool Train accuracy: 89.45% Test accuracy: 88.11%
MobileNet(with pretrained weights) Train accuracy: 97.62% Test accuracy: 92.30%
MobileNet(with pretrained weights) Train accuracy: 94.14% Test accuracy: 85.72%
결과 분석
Train accuracy: 98.88% Test accuracy: 92.82%
-
딥러닝스터디 5조
1. Feed forward network(3주차 과제 결과)
2. CNN + MaxPool
3. MobileNet(with pretrained weights)
4. MobileNet(without pretrained weights)
결과 분석
train accuray 하고 test accuracy 둘 다 사전 학습된 파라미터를 가져온 mobile net이 제일 높습니다. train accuray, test accuracy 사이의 차이가 가장 큰 모델은 가중치가 없는 mobilenet입니다.
Fashion MNIST 학습 결과
Feed forward network(3주차 과제 결과)
CNN + MaxPool
결과 분석
Train accuracy: 88.35% Test accuracy: 86.41%
3주차 과제에 사용한 neural network(Dropout, PReLU)를 사용하였다. Train accuracy: 92.12% Test accuracy: 89.96%
Train accuracy: 97.72% Test accuracy: 91.97%
Train accuracy: 93.51% Test accuracy: 85.35%
Train accuracy: 90.69%
Test accuracy: 87.87%
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)
)
Train accuracy: 96.06%
Test accuracy: 91.67%
$\rightarrow$ Feed Forward Network 보다 약 4% 향상
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% 향상
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 주소는 여기에서 확인할 수 있습니다.
Fashion MNIST 학습 결과
Train accuracy: 94.21% Test accuracy: 89.20%
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가 나타났습니다.
사용한 모델은 아래와 같은 모델입니다!
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개까지 만들어봤습니다.
결과는 아래와 같습니다.
이전 과제의 모델의 정확도는 86%인 걸 감안했을 때, 약 5% 가량 정확도가 상승했습니다.
사용한 모델은 아래와 같습니다.
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회 학습시킨 뒤의 정확도는 아래와 같습니다.
사용한 모델은 아래와 같습니다.
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회 학습시킨 뒤의 정확도는 아래와 같습니다.
네 번째 과제: 최신 모델과 Transfer Learning의 효과 분석
회합 자료 링크: https://github.com/HanyangTechAI/2023-Deep-Learning-Study/issues/1#issuecomment-1497256534
Colab Python 노트북을 사용한 모델 학습 코드 구성하기
fashion_mnist_cnn.ipynb
Step 1. 예시 노트북을 실행해보며 CNN 모델로 Fashion MNIST 튜닝하기
Step 2. MobileNet의 Fashion MNIST 분류 문제 transfer learning 효과 분석