본문 바로가기

파이썬/머신러닝

[#E21] Recurrent Neural Network (RNN - PART 3/3) 이전의 "hi hello" 문자열이나 LONG SEQUENCE RNN에서 사용했던 긴 문자열과는 달리, 사용자로부터 직접 데이터(문자열)을 입력받는 것을 DYNAMIC RNN이라고 합니다. 이것은 데이터에 이미 정해진 문자열 길이가 아닌 가변적인 문자열 길이를 사용한다는 의미입니다. 예로 3개의 문자열 'hello', 'eolll', 'lleel'이 있다고 가정합니다. 12345678910111213import tensorflow as tfimport numpy as npimport pprintpp = pprint.PrettyPrinter(indent=4)sess = tf.InteractiveSession() h = [1, 0, 0, 0]e = [0, 1, 0, 0]l = [0, 0, 1, 0]o = [..
[#E20] Recurrent Neural Network (RNN - PART 2/3) 저번 [#E20 : Recurrent Neural Network (RNN - PART 1/3)] 포스트에서는 Long Sequence RNN를 직접 구현했습니다. 그러나 우리가 구현한 RNN은 테스트 시 좋은 성능을 내지 못하는데, 그 이유는 다음과 같습니다. 1. 셀의 크기가 너무 작다. solution : 셀을 wide & deep 하게 구성한다. (use Deep Learning - Stacked RNN) 이것은 텐서플로우에서 제공하는 MultiRNNCell 메소드를 이용하여 쉽게 해결할 수 있습니다. 123456# 기존 1개의 Cellcell = tf.contrib.rnn.BasicLSTMCell(hidden_size, state_is_tuple=True) # 2개의 Cellcell = tf.co..
[#E19] Recurrent Neural Network (RNN - PART 1/3) RECURRENT NEURAL NETWORK (RNN) 은 도출된 이전의 시퀸스 weight 값이 다음 시퀸스 weight값에 영향을 미치면서 학습하는 모델입니다. 이것은 다음 그림과 같이 각 시퀸스들의 연결로 동작합니다. 위의 그림을 간단한 함수 식으로 나타내면 아래와 같습니다. (h = hidden layer) 따라서 새로운 state는 이전의 state의 영향을 받는 구조가 됩니다. 이에 따른 weight는 총 3개가 존재하며, 각각 이전 state(Ht-1) 에 대한 weight, 새로운 state의 x값(Xt) 에 대한 weight, y 값에 대한 새로운 state(Ht) 의 weight 값입니다. 이 3개의 weight값을 이용해서 RNN 공식을 구현하면 다음과 같이 표현됩니다. (이것은 크게..
[#E18] CNN을 이용한 MNIST 데이터 분류 Convolution Neural Network (CNN) 은 이미지 분석에 사용되는 인공신경망의 한 종류이므로 이를 MNIST 데이터 분류에도 사용할 수 있습니다. 먼저 다음과 같이 데이터를 불러오고, 파라미터를 설정합니다. 12345678910import tensorflow as tfimport random mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) # hyper parameterslearning_rate = 0.001training_epochs = 15batch_size = 100total_batch = int(mnist.train.num_examples / batch_size)cs 학습은 총 15 epoch 동안 진행되며, 효율..
[#E17] Convolution Neural Network (CNN - 실전편) 이번에는 실제로 텐서플로우에서 Convolution 데이터와 Pooling이 어떻게 진행되는지에 대해 알아보겠습니다. 먼저 다음과 같이 예시 이미지를 생성합니다. 123456789101112import numpy as npimport tensorflow as tfimport matplotlib.pyplot as plt sess = tf.InteractiveSession()image = np.array([[[[1],[2],[3]], [[4],[5],[6]], [[7],[8],[9]]]], dtype=np.float32)print(image.shape) #-> (1, 3, 3, 1) #show imageplt.imshow(image.reshape(3,3), cmap='Greys')cs 해당 이미지는 왼쪽 상..
[#E16] Convolution Neural Network (CNN - 준비편) CONVOLUTION NEURAL NETWORK는 합성곱 신경망으로 시각적 이미지를 분석하는데 사용되는 인공 신경망입니다. 이것은 여러 개의 CONV 레이어, RELU 레이어, POOL 레이어, 그리고 마지막으로 모든 레이어가 하나로 연결된 FULLY CONNECTED Layer로 구성됩니다. 예시로 아래의 그림은 자동차 이미지를 CNN으로 인식하는 과정의 구성을 나타낸 것입니다. 그림과 같이, 이미지를 작은 부분으로 잘라내어 (Filter) 입력에 넘기는 레이어가 바로 CONV 레이어입니다. 이 필터는 이미지의 모든 부분을 훑어오게 됩니다. 위의 그림에서 32X32는 각 픽셀 수를, 마지막 3은 색을 나타냅니다. 이 임의의 이미지에서 5 X 5 필터를 이용할 때, 각 필터에 담긴 이미지는 Wx+b(we..
[#E15] MNIST 데이터란? MNIST 데이터란 필기 숫자의 분류를 위한 학습 데이터 집합입니다. 즉, 이 데이터는 어지럽게 필기된 숫자가 어떤 숫자에 해당하는지 정확하게 맞추기 위한 학습을 위한 것입니다. 해당 데이터는 다음과 같이 이미지와 해당하는 라벨로 구성되어 있습니다. 또한 이것은 다음과 같이 파이썬 폴더의 MNIST_data 폴더에서도 확인할 수 있습니다. train- 파일은 학습데이터입니다. 이것은 전체 데이터의 70퍼센트로, t10k- 파일은 테스트용 데이터로 30퍼센트를 사용합니다. ( 기본적으로 학습은 70퍼센트, 테스트는 30퍼센트를 사용합니다 ) 이 포스트에서는 세 가지의 다른 방법으로 학습을 진행합니다. 1. FANCY SOFTMAX REGRESSION [#E8 : FANCY SOFTMAX REGRESSION..
[#E14] 머신러닝 팁과 용어 해석 해당 포스트에 나온 모든 상세한 내용은 여기를 참고하세요. 1.reduce_mean reduce_mean 함수는 주어진 데이터의 함수를 도출합니다. 자료형에 영향을 받으므로 주의해야합니다. 1234567891011tf.reduce_mean([1, 2], axis=0).eval() //output1 tf.reduce_mean([1., 2.], axis=0).eval() //output1.5 //t.eval() -> tf.get_default_session().run(t)cs 위의 코드에서 int 형의 평균은 소수점이 누락되는데 비해 float 형의 평균은 소수점이 포함됩니다. eval()은 작업(세션)을 실행시키는 함수입니다. 1.Axis axis는 축을 의미합니다. 이는 아래의 이미지를 참고하세요.red..