본문 바로가기

Deep Learning

(20)
PyTorch 학습 모델 저장 및 불러오기 딥러닝 학습이 이루어진 모델의 파라미터를 저장하고, 다시 이를 불러와서 학습 모델에 입력하는 방법은 다음의 코드를 통해 이행할 수 있다. 다만 주의 해야할 점은, 학습 파라미터를 저장하고 불러올 때, 해당 변수가 GPU상에 존재하는지 아니면 CPU상에 존재하는지를 유념해두고 저장 및 불러오기 절차를 거쳐야한다. 딥러닝을 학습할때는 대부분 GPU가 있다는 전제하에서 진행되나, CPU로만 진행될 수도 있으므로 이부분을 꼭 기억하자!!! (P.S. pickle_protocol=4 는 Python 버전 3.4 이후에서부터 구현된 기능으로 큰 객체를 효율적으로 저장하게해줌.)
Embedding에 대해서 알아보자 워드 임베딩에 대해서 알아보자. 임베딩(Embedding)이란 무엇일까? 이 단어 또한 수많은 말들로 정의될 수 있지만, 결론적으로 입력이되어지는 String 형태의 문장을 Float 형태의 벡터로 변환하는 행위를 뜻한다고 생각한다. 아래의 코드를 보면 임베딩의 역할을 직관적으로 이해할 수 있을 것이다. 만약 "I love the nature and nature."라는 문장이 있다면, 우리는 이 문장을 불필요한 부분을 전처리하고 토큰화(Tokenize)하여 [ I, love, the, nature, and, nature ]의 단어리스트로 만든뒤, 고유한 단어들에대해 각각의 정수 index를 부여한다. 여기서는 [1, 7, 3, 11, 5, 11]로 인덱스가 부여되었다고 가정한다. 이 때, embeddin..
Recurrent Neural Network (RNN)란 무엇인가? ANN, DNN, CNN, RNN, LSTM, GRU 등 무수히 많은 인공지능 알고리즘들이 존재한다. 그중에서 오늘은 RNN에 개념에 대해 Posting 해보고자 한다. RNN이란 시계열 및 자연어처리 (Natural Language Processing) 문제해결을 주된 목적으로 개발도어진 알고리즘으로서 Feedforward Network와 달리 이전 시점의 내부상태를 다음 시점으로 전달해 주는 구조를 통해 시간의 흐름에 따른 데이터특성을 반영하여 학습을 진행할 수 있다는 것이 가장 큰 특징이다. 아래의 그림과 같은 기본구조를 기반하여, 현재 실전 문제해결에서 보편적으로 사용되고 있는 LSTM 및 GRU등의 알고리즘들이 탄생하게 된다. 이 RNN을 기반한 다양한 알고리즘들은 CNN기반의 영상예측 알고리즘..
영상 Resolution 복원을 위한 CNN 모델을 구현해보자! 흐린 영상의 해상도(Resolution)를 복원하는 것도 CNN을 통해 구현할 수 있다는 놀라운 사실을 아는가? 이번 포스팅에서도 코드를 따라가며 직접 그 결과를 확인해보자. 먼저 공개 데이터셋을 원하는경로에 다운로드한다. 다음으로 제각각인 영상의 크기들을 128x128과 32x32로 두 가지 경우로 나누어 입력값과 Ground Truth값으로 만든다. Upsampling하는 네트워크를 잘 구축하는데, 이 때 중요한 포인트는 바로 Conv2d와 ConvTranspose2d이다. 이 네트워크에서 Conv2d는 stride=2의 값으로 주어 영상의 크기를 반으로 줄이는 역할을 하고, ConvTranspose2d는 stride=2의 값일때, 영상의 크기를 2배로 크게하는 역할을 수행한다. 물론 그 크기가 계산..
Fashion MNIST를 이용한 CNN기반 Classification 따라해보기! GPU가 구축된 Python 개발환경에서 아래의 코드를 따라해보면, CNN네트워크를 통한 분류작업을 체험해볼수 있다. 백문이 불여일견이라하였다. 묻지도 따지지도 말고 한번 해보길 바란다.
나만의 신경망 모듈 만들어보기! PyTorch에서 나만의 신경망 계층을 모듈형태로 만들어 보고자 한다. 이 때, 중요한 것이 nn.Module을 상속한 클래스의 정의이다. (nn.Module은 nn.Linear을 포함한 모든 계층의 base class 임) 다음과 같이 nn.Module을 상속한 커스텀 Class를 정의한 후 정의된 선형레이어 Class를 호출하여 쌓아올린뒤 다층신경망을 구축할 수 있는 방법이 하나이고, 또다른 방법은 앞서 정의한 Class를 기반으로 다른 Class를 통해 다층신경망을 구축한 후 마지막에 Class하나만을 호출하여 신경망을 구축하는 방법이다. 딥러닝에 관한 이론적 지식과 PyTorch에 대한 기술적 이해도가 어느정도 갖추어진 상태라면, 자신만의 딥러닝 네트워크를 한번 구축해 보는것은 어떨까? (사실 초..
Overfitting 문제 해결해보기 딥러닝기반의 학습을 이행하다보면, Overfitting (과적합)의 문제를 흔히 마주할 수 있다. 이는 너무 훈련된 데이터에만 최적화되어, 새롭게 마주하는 데이터에 예측성능이 저하됨을 뜻하며, 여러가지 Regularization(정규화) 기법들을 통해 어느 정도 보완이 가능함을 알아두자. 본 포스팅에서는 대표적인 정규화 기법인 Drop-out과 Batch Normalization에 대해서 집중 조명해보고자 한다. 먼저 학습 네트워크의 깊이를 약간 깊게 만들어주고 활성화함수로 ReLU를 사용함. 미니배치 형식으로 학습하되, 여러 정규화 기법 적용 전후를 비교해서 그것이 과연 실효적인 기법인지를 보고자한다. 먼저 Drop-out기법을 적용하고 학습을 다시 진행해 보았다. 학습의 결과는 기법의 전보다 Over..