본문 바로가기

분류 전체보기

(39)
Shallow Copy v.s. Deep Copy 넘파이 배열을 사용하다보면 변수를 지정하는 방법에 따라, 변수에 저장된 값이 변동이 되는 경우와 되지 않는 경우로 나뉜다. 기본 적으로 특정 ndarray를 가리키는 변수를 다른 변수에 대입하게 되면, 2개의 다른 변수가 하나의 ndarray를 가리키게 되는데, 이 대입을 하는 방식에서 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)의 2가지 형태로 나뉠 수 있다. 배열의 shape을 바꾸거나 슬라이싱을 할경우 원본 ndarray의 데이터를 공유하는 새로운 ndarray 객체를 생성하는데, 우리는 이를 보고 얕은 복사라고한다. 만약 원본 ndarray와 값을 공유하지 않고 별도의 객체 메모리를 가지고 싶다면, .copy() 메소드를 사용하도록 한다.
넘파이 배열(ndarray)이란? 넘파이 배열은 N차원의 배열 객체의 형태이며, 하나의 넘파이 배열 내에서는 모든 원소에대해 동일한 데이터 형태를 지니며, 차원(Dimension)을 뜻하는 축(Axis)의 개념이 빈번하게 사용된다. 넘파이 배열은 기본적으로 실수 형태의 데이터 저장할때는 'Float 64'로 정수형태의 데이터를 저장할때는 'Int 32'로 저장이된다. 실수 형태의 원소를 정수 형태로 변환할 경우에는 소수점 이하가 버림되고 변환된다. Tip!> 'ndarray.dim': N차원 배열의 차원의 수를 반환함. 'ndarray.shape': N차원 배열의 각 축 방향에 대한 차원 크기를 튜플형식으로 반환함. 'ndarray.dtype': N차원 배열의 원소에 대한 데이터 형태를 반환함. 'ndarray.size': N차원 배열에..
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네트워크를 통한 분류작업을 체험해볼수 있다. 백문이 불여일견이라하였다. 묻지도 따지지도 말고 한번 해보길 바란다.