Pooling Layers- CNN을 구성하는데 필요한 중간, 최종 레이어에 대해 알아보자. - Pooling layer 라 부르는 이 레이어는 주로 콘볼루션 레이어를 input으로 받아들인다.- 콘볼루션 레이어는 각 필터당 하나의 feature map이 형성되고, 그 feature map을 스택처럼 쌓아둔 것이다.- 많은 object 카테고리가 존재하는 복잡한 데이터셋을 가지고 CNN을 구현해 내는경우 - 매우 많은 수의 필터를 필요로 하는데, 각각은 이미지의 패턴을 찾아내는데에 사용된다. - 필터가 많다는 얘기는 그만큼 feature map들이 쌓이게 된다는것이고 이것은- 우리가 구현할 CNN의 차원이 매우 크다는 얘기이기도 하다.- 고차원(Higher dimensionality)을 구현하려면 그에 ..
Convolutional Layers in Keras- Convolution with 3x3 window and stride 1 - Keras에서 convolutional layer를 생성하기위해 위와 같은 모듈을 임포트해야한다. - 임포트 이후 아래의 포맷으로 convolutional layer를 생성할 수 있다.- 인자로 지정해줄 수 있는 값으로는 아래와 같은 것들이 있다.- filters : 필터의 개수를 지정- kernel_size : convolution window의 너비와 높이(height and width)를 지정- strides : convolution의 stride를 지정(디폴트 = 1)- padding : 'valid' 또는 'same' 을 지정(디폴트 = 'valid')- activ..
Stride and Padding- 필터의 크기와 개수를 지정해줌으로써 convolutional layer를 제어할 수 있다는것을 앞서 다뤘다.- 예를들어, convolutional layer의 노드의 수를 증가시키기 위해선 필터의 수를 증가시켜야 한다.- 필터가 잡아낼 패턴의 크기(size)를 증가시키기 위해선 필터의 크기(size)를 증가시켜야 한다.- 하지만 컨트롤 할 수 있는 하이퍼 파라미터들이 더 다양하게 존재한다.- 이 하이퍼 파라미터들중 stride 라 불리는것이 있는데, - stride는 필터가 이미지 상에서 이동하는 크기 를 의미한다. - 이전에 설계했던 모델에서 stride는 1이었다.- convolution window를 수평으로 그리고 수직으로 이미지를 따라 1의 크기로 움직였다. ..
Convolutional Layers(Pt. 1) - locally connected 된 레이어는 공간을 따라 가중치를 공유하기 때문에, 전체 픽셀이 연결된 모델보다 - 훨씬 더 적은수의 가중치를 가지고 학습을 진행한다. - 이 개념을 공식화하여 convolutional layer를 정의해보자. - convolutional layer는 hidden layer의 한 종류이며 CNN에서 주요하게 사용된다. - convolutional layer를 만들기 위해 이미지를 분리하려면, - convolution window를 결정하는 너비와 높이를 정해야한다. - 그리고 이 window를 수평으로 그리고 수직으로 옆으로 밀며 local을 지정해준다. - window가 이동을 하며 이미지를 조각내 단일 hidden ..
Local Connectivity - MLP를 이용해서 손으로 쓴 숫자 이미지를 decode하였는데 - MLP에 그레이스케일 이미지를 돌리기 전, 먼저 행렬을 벡터로 변환해주어야 했다. - 그럼 이렇게 변환된 벡터는 hidden layer가 2개인 MLP의 input으로 들어갔고 - 이 모델은 MNIST 데이터셋을 가지고 이미지를 분류하는데에 매우 적절한 모델이었음을 확인하였다. - 앞의 모델은 Test image에 대해 2% 보다 낮은 수치의 에러를 산출해냈는데, - MNIST 데이터셋과 같이 딥러닝 학습을 위해 완벽히 준비된 데이터가 아니라 - 실제 현실세계의 데이터 즉, 더 난잡한 이미지와 더 복잡한 패턴들을 처리할 경우 다른 기술을 사용하여야 한다. - 이번엔 CNN에 한 발 더 가까워 지고자 -..
Mini Project : Training an MLP on MNIST - 딥러닝은 이해하려 한다면 쉽지않을뿐더러, 실무에서 관습상 자연스레 사용하는 것들이 이론보다 앞서있는 경우가 많다. - 딥러닝이 처음인 경우 모델의 작동방식에 대한 직관을 키우기위해 여러 모델을 가지고 이런저런 시도를 해보는 것이 좋다. - 이번 미니 프로젝트에선 제공된 mnist_mlp.ipynb 파일을 바탕으로 - 신경망을 수정하고 모델의 구성을 변경해보며 그 결과를 비교해볼 것임. ** 참고 - over-fitting 이 감지되고있다는 판단의 근거는 validation loss와 training loss를 비교함으로써 알아낼 수 있다. - training loss가 validation loss보다 훨씬 낮은경우 그 모델은 ov..
Model Validation in Keras - 컴파일이 끝나면 모델을 학습시킬 준비가 다 됐다. - 모델을 학습시키는 과정에서 모델이 수정되는 과정을 이해하기위해 - 모델 유효화의 개념에 대해 먼저 알고있어야한다. - 우리는 지금껏 모델이 잘 학습되고있는지를 epoch가 증가함에 따라 loss의 정확도의 변화 추이를 보며 판단하였다. - 모델을 구현할 때, 얼마만큼의 레이어가 필요한지 또, 각 레이어마다 얼마만큼의 노드가 필요한지 명확하지 않았다. - 이런 결정을 내리기 수월하도록 일반적으로 데이터셋을 분류한다. - 보통 3가지로 나누는데, Train Set / Validation Set / Test Set 이 이에 해당된다. - 모델은 각각의 데이터셋을 각기 다른식으로 접근하게 된다. - 모델은 T..
MLPs for Image Classification - 이미지분류를 위해 신경망을 만들어 데이터의 패턴을 분석해보자. - 신경망을 만든 뒤 학습 된 모델이 새로운 이미지의 숫자를 분류해 낼 것임. - input으로 받을 벡터의 크기가 784이므로 784개의 노드를 가진 input layer가 필요하다. - hidden layer는 임의로 512개의 노드를 가진 hidden layer를 2개 연결해주고 - output layer로는 0~9까지의 숫자에 대한 분류가 필요하므로 총 10개의 노드를 생성하여 연결해주자. - 이제 이렇게 잡은 초안 설계를 Keras에 구현해주어야한다. - 위의 코드는 이전에 다뤘던 것과 크게 다르진 않지만 추가된 부분이 Flatten layer 이다. - Flatten laye..
Applications of CNNs - CNN(Convolutional Neural Networks) 은 한국어로 합성곱 신경망 또는 콘볼루션 신경망 으로 불린다. - 콘볼루션 신경망은 VUI(Voice User Interface), 자연어처리, 컴퓨터 비전 등 응용분야가 무긍무진하다. - VUI의 사례로, 구글은 CNN을 사용하여 WaveNet 모델을 발매하였는데 - WaveNet은 텍스트를 input으로 받아 컴퓨터가 창출해낸 목소리로 그것을 읽어낸다. - 진짜 개쩌는건 샘플을 제공해주면 가령, 내 목소리의 샘플을 제공해주면 - input으로 텍스트를 넣을때마다 output으로 내 목소리로 그 텍스트를 읽어낸다. - 자연어처리에서는 RNN(Recurrent Neural Networks)가 CNN보다..
Launch an Instance - AWS에서 GPU 제한을 상향조정했다면 인스턴스를 시작할 수 있다. - EC2 Management Console 에서 인스턴스를 시작할 수 있다. - 다음으로 AMI(Amazon Machine Image)를 선택하여야 한다. - AMI는 인스턴스의 OS를 의미하는데, 디폴트 소프트웨어 및 작동에 필요한 셋팅이 미리 설정되어있다. - 위와같이 AWS Marketplace에서 Deep Learning AMI with Source Code (CUDA 8, Ubuntu)를 입력하여 설치. - 이 AMI에는 GPU에서 학습시킬 수 있는 모든 환경과 드라이버가 포함되어 있다. - AMI엔 cuDNN와 같은 여러 다른 패키지가 포함되어 있다. Select the Instance ..