목록Machine Learning (57)
elevne's Study Note

LeNet-5 는 합성곱 신경망이라는 개념을 최초로 얀 르쿤이 개발한 구조이다. LeNet-5 는 Convolution 과 Sub-sampling (혹은 풀링) 을 반복적으로 거치면서 마지막에 완전연결층에서 분류를 수행한다. 아래 그림과 같은 구조로 네트워크가 구성된다. 이전에 사용한 개와 고양이 데이터셋을 다시 사용하여 LeNet 모델을 실습해보았다. 32 x 32 크기의 이미지에 Convolution 과 Max pooling 이 쌍으로 두 번 적용된 후 완전연결층을 거쳐 이미지가 분류되는 신경망인 것이다. 이번에도 우선 필요한 라이브러리들을 import 해주고 시작한다. import torch import torchvision from torch.utils.data import DataLoader, ..

설명가능한 CNN, Explainable CNN 은 딥러닝 처리 결과를 사람이 이해할 수 있는 방식으로 제시하는 기술이다. 이는 CNN 을 구성하는 각 중간계층부터 최종분류까지 입력된 이미지에서 특성이 어떻게 추출되고 학습하는지를 설명할 수 있다. CNN 의 시각화 방법에는 필터에 대한 시각화와 특성맵에 대한 시각화가 있는데 서적에서는 특성맵의 시각화만 다루고 있다. Feature Map 은 입력 이미지 또는 다른 특성 맵처럼 필터를 입력에 적용한 결과이다. 특정 입력 이미지에 대한 특성 맵을 시각화한다는 의미는 특성 맵에서 입력 특성을 감지하는 방법을 이해할 수 있도록 돕는 것이다. 우선 필요한 라이브러리들을 import 해준다. import matplotlib.pyplot as plt from PIL..

저번 시간에는 모델 학습까지 완료하였다. 이번에는 모델 학습을 진행하며 acc_history, loss_history 리스트에 추가해두었던 에폭별 Accuracy, Loss 값을 시각화해보았다. plt.plot(train_acc_hist) plt.show() plt.plot(train_loss_hist) plt.show() 단순히 정확도, 오차 정보를 확인하는 것뿐만 아니라 실제로 데이터를 잘 예측하는지도 살펴보아야 한다. 먼저 예측된 이미지를 출력하기 위한 전처리 함수를 생성한다. def im_convert(tensor): image = tensor.clone().detach().cpu().numpy() image = image.transpose(1, 2, 0) image = image * (np.ar..

이제 전이학습에 사용할 모델을 불러온다. 이는 아래와 같은 코드로 간단하게 불러올 수 있다. resnet = models.resnet18(pretrained=True) 위에서 사용된 resnet18 은 50 개의 계층으로 구성된 CNN으로, ImageNet 에서 100 만 개가 넘는 영상을 이용하여 훈련된 신경망이다. 이번 실습은 Feature Extractor 로 진행되는 것이기에 아래와 같은 코드를 통해서 파라미터에 대해서는 학습을 진행하지 않도록 해준다. def set_parameter_requires_grad(model, feature_extracting=True): if feature_extracting: for param in model.parameters(): param.requires_gr..

일반적으로 CNN 기반의 딥러닝 모델을 제대로 훈려시키기 위해서는 많은 양의 데이터가 필요하지만, 실제로 충분히 큰 데이터셋을 구하는 것은 쉽지 않다. 이러한 현실적인 어려움은 전이학습을 통해 해결할 수 있다. 전이학습이란 ImageNet 과 같은 아주 큰 데이터셋을 사용하여 훈련된 모델의 가중치를 가져와 우리가 해결하려는 과제에 맞게 보정해서 사용하는 것을 뜻한다. 전이학습에는 특성추출, 미세조정 기법이 사용된다. 특성추출(Feature Extractor)은 ImageNet 데이터셋으로 사전 훈련된 모델을 가져온 후 마지막에 완전연결층 부분만 새로 만드는 방법이다. 새로 학습할 때는 마지막 완전연결층만 학습하고 나머지 계층들을 학습되지 않도록 하는 것이다. 이와 다르게 미세조정(Fine-Tuning) ..

저번 시간에 Conv2d, MaxPool2d 를 사용하며 행렬의 크기를 계산할 필요가 있었는데, 이를 하는 방법에 대해서 알아보았다. 저번 실습에서 사용한 Fashion MNIST 데이터는 28 * 28 의 Gray Scale 이미지데이터였다. 데이터를 우선 Conv2d 에 넣게된다. Conv2d 에 대해서 다시 복습해보자면 이는 input data 의 채널 크기 (RGB 면 3, Gray Scale 이면 1) , output data 의 크기 (필터를 몇 장 만들 것인지) , Kernel size, Padding, Stride (default = 1) 값을 받게된다. 결과 사이즈는 위 값들을 사용하여 계산하게 된다. 수식은 아래와 같다. 저번 예제의 경우로 생각해보았을 때, 처음에 28 * 28 의 이..

이번에는 예제 코드, 데이터를 활용하여 CNN 을 직접 코드로 구현해보았다. 우선 필요한 라이브러리들을 import 하고, 가능하다면 device 를 GPU 로 설정해준다. import numpy as np import matplotlib.pyplot as plt import torch import torch.nn as nn from torch.autograd import Variable import torch.nn.functional as F import torchvision import torchvision.transforms as transforms from torch.utils.data import Dataset, DataLoader device = torch.device("cuda:0" if t..

역전파의 계산 과정은 매우 복잡하고 많은 자원이 소모되며, 게산 시간도 상당히 오래걸린다. 합성곱신경망은 역전파의 이러한 문제점을 해결한다. 합성곱신경망은 이미지 전체를 한 번에 계산하는 것이 아니라, 이미지의 국소적 부분을 계산함으로써 시간과 자원을 절약하여 이미지의 세밀한 부분까지 분석할 수 있는 신경망이다. 기존의 신경망에서 이미지를 처리할 때는, n x n 배열을 n ** 2 길이의 벡터로 flatten 하여 픽셀에 가중치를 곱하여 은닉층으로 전달한다. 하지만 이는 이미지 데이터의 공간적인 구조를 무시하게 된다. 합성곱신경망을 사용하면 이미지 데이터의 공간적인 구조를 반영해줄 수 있다. 합성곱신경망은 입력층, 합성곱층, 풀링층, 완전연결층, 출력층 총 5 개의 계층으로 구성된다. 합성곱신경망은 합..