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 ..
Amazone Web Services - deep neural network를 학습하고 평가하는것은 막대한 계산을 필요로 한다. - 적절한 규모의 데이터셋의 경우 로컬상의 CPU에서 네트워크를 학습시킬 수 있지만 - epoch의 수, 신경망의 크기 및 기타 요소들에 따라 수십분에서 수시간이 걸릴수도 있다. - 따라서 적절한 대안으로 병렬처리를 지원하는 GPU(Graphics Processing Unit)를 통한 환경에서 학습하는것이다. - 내장 NVIDIA GPU가 있는 컴퓨터가 없다면 대안으로 Amazon EC2를 사용하는것을 추천한다. - 현재 동일한 기능을 하는 클라우드 서비스 공급업체들이 많이 있지만, EC2는 배우는 입장에서 사용하기 가장 무난하다. - 아마존 서버를 이용하여 밑바닥에서 부터 신..
TensorFlow Dropout - Dropout은 over-fitting을 줄이기 위한 regularization 기술이다. - 네트워크에서 일시적으로 유닛(인공 뉴런, artificial neurons)을 배제하고, 그 배제된 유닛의 연결을 모두 끊는다. - 위의 그림은 dropout의 작동 원리를 설명하고 있다. - 텐서플로우에선 드롭아웃을 구현할 때 tf.nn.dropout() 함수를 사용한다. - tf.nn.dropout()을 사용한 예를 확인해보자. 1234567keep_prob = tf.placeholder(tf.float32) # probability to keep units hidden_layer = tf.add(tf.matmul(features, weights[0]), biases[0..
Loading the Weights and Biases into a New Model - 이미 학습하여 저장한 모델에 대해 미세한 조정(finetuning)이 가능하다. - 하지만 저장된 변수를 직접적으로 수정된 모델에 대입하는것은 에러를 유발할 수 있다. - 이런 문제점을 피하며 finetuning 하는법에대해 알아보자. Naming Error - 텐서플로우는 텐서와 연산(Tensors and Operations)에 있어 스트링 식별자로 name이라는 키워드를 사용한다. - 만약 name이 주어지지 않으면 자동적으로 이를 생성한다. - 텐서플로우는 첫번째 노드 이름을 으로 지정하고 - 바로 뒤따르는 두번째 노드로 이름을 _로 지정한다. - 이렇게 name을 할당하는것이 각기 다른순서의 가중치와 바이어스..
Save and Restore TensorFlow Models - 모델을 학습하는데는 몇시간이 걸릴 수 있다. 그 도중에 텐서플로우 세션을 닫아버리면 - 학습 된 모든 weights와 bias들을 잃게된다. - 이렇게 잃어버리면 모델을 다시 학습시켜야한다. - 다행히 이런 문제를 방지하기위해 텐서플로우는 tf.train.Saver라는 클래스를 제공한다. - 이 클래스를 사용하면 진행상황을 저장할 수 있다. - 다시말해 모든 tf.Variable을 file system에 저장하는 기능을 한다. Saving Variables - 먼저 weights와 bias 텐서를 저장하는 예시부터 진행해보자. - 먼저 두 변수를 저장해보고, 나중엔 실제 모델에서 모든 가중치들을 저장해보도록 하자.12345678910111..
Deep Neural Network in TensorFlow - 텐서플로우를 사용하여 logistic classifier를 구현해봤었는데, 이번엔 Deep neural network를 구현해보도록 하자. - MNIST 데이터베이스의 문자들을 분류하기위해 작성된 텐서플로우 코드를 가지고 구현을 진행한다. - 여기에서 텐서플로우의 다른 예제들을 확인 TensorFlow MNIST12from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets(".", one_hot=True, reshape=False)cs - 텐서플로우에서 제공하는 MNIST 데이터셋을 사용하여 진행한다. - 이 데이터셋은 batch들과 O..