TRENDY 머신러닝 [#E10] 딥러닝의 기초 XOR 문제란? 머신러닝 [#E20] Recurrent Neural Network (RNN - PART 2/3) 머신러닝 [#E15] MNIST 데이터란? 머신러닝 [#E14] 머신러닝 팁과 용어 해석 이전다음 UBUNTU 18.04 HTTP to HTTPS 더보기 머신러닝 [#E21] Recurrent Neural Network (RNN - PART 3/3) 더보기 머신러닝 [#E20] Recurrent Neural Network (RNN - PART 2/3) 더보기 머신러닝 [#E19] Recurrent Neural Network (RNN - PART 1/3) 더보기 DEVELOPE UBUNTU 18.04 HTTP to HTTPS 만약 여러분의 웹서버가 HTTP 연결을 사용한다면 보안에 매우 취약하며, 실제로 호스팅하는 브라우저에서 보안 취약 아이콘을 띄우거나 심할 경우 접속이 거부당할 수 있습니다. HTTPS 보안 연결을 사용하여 이러한 취약점을 보완해봅시다 ! 준비물 : 먼저 웹서버가 도메인과 연결되어있어야 하고, 정상적으로 A 레코드가 생성되어있어야 합니다. (참고 : TAKE ROUTE53 FOR DOMAIN !) STEP 1 : ACM(Amazon Certificate Manager)에서 인증서 발급 HTTPS 보안 연결을 하기위해 먼저 공인된 인증서를 발급받아야합니다. AWS 자체에서 발급 가능한 무료 인증서를 이용할 것이므로 Certificate Manager 콘솔에 접속한 후, 인증서 요청을 클릭합니다. 이용해본 적.. 머신러닝 [#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.. 머신러닝 [#E13] DROP OUT 이란? DROP OUT은 데이터 전처리 방법 [#E9 : 학습 데이터 전처리(PreProcessing)] 과 비슷하게 학습이 잘 작동하도록 도와주는 모델입니다. 이것은 다음 사진과 같이 작동합니다. 레이어를 깊게 쌓으면 그림 (a)와 같이 NN (Neural Network)는 복잡한 뉴런을 가지게 됩니다. DROP OUT은 고의로 랜덤한 뉴런을 누락시킨 후 학습을 시작합니다. 일단 학습이 끝나면 다시 (a) 그대로 학습하여 효율성 및 정확도를 높여줄 수 있습니다. DROP OUT은 다음과 같이 구현합니다. 12345678910111213141516171819202122dropout_rate = tf.placeholder("float") W1 = tf.get_variable("W1", shape=[784, 512.. 머신러닝 [#E12] W 변수 (Weights) 초기화 방법 지금까지 사용한 Weight 초기화 방법은 다음과 같습니다. 1234567//1W = tf.Variable(tf.random_normal([y_output]), name="weight") //2W = tf.Variable(tf.random_normal([x_input, y_output]), name='weight') ...Colored by Color Scriptercs 더욱 좋은 성능을 내기 위해 다음과 같은 초기화 방법을 사용할 수 있습니다. 1. Xavier Initializer 12345//import numpy as np//W = np.random.randn(x_input, y_output)/np.sqrt(x_input) W = tf.get_variable("W", shape=[x_input, .. 머신러닝 [#E11] Vanishing Gradient와 ReLU 학습에서 레이어를 아주 깊게 쌓은 경우, 다음과 같이 Vanishing Gradient 문제가 나타날 수 있습니다. 이것은 Sigmoid 함수의 특성으로 일어나는 문제입니다. Sigmoid는 항상 1 이하의 값을 가지고 있으므로, 다음과 같이 레이어들을 쌓으면서 값이 계속해서 작아지게 됩니다. 123456layer1 = tf.sigmoid(tf.matmul(X, W1) + b1)layer2 = tf.sigmoid(tf.matmul(layer1, W2) + b2)layer3 = tf.sigmoid(tf.matmul(layer2, W3) + b3)layer4 = tf.sigmoid(tf.matmul(layer3, W4) + b4)layer5 = tf.sigmoid(tf.matmul(layer4, W5) + .. 머신러닝 [#E10] 딥러닝의 기초 XOR 문제란? DEEP LEARNING은 기본적으로 NEURAL NETWORK(NN)를 기반으로 하며, 머신러닝을 더욱 완전하게 만드는 방법으로 볼 수 있습니다. 아래의 그림은 x1과 x2 값에 따른 y의 값을 유동적으로 나타내고 있습니다. 그림과 같이 OR, AND 그래프에서는 데이터를 분류할 수 있는 Linear 라인을 정의할 수 있습니다. 그러나 XOR 그래프에서는 불가능합니다. 이러한 XOR 문제를 해결하기 위한 방법이 바로 딥러닝이며, BackPropagation 알고리즘을 사용합니다. BackPropagation (역전파) 자세한 강의는 링크를 참고하세요. Deep Learning은 기본적으로 여러개의 Layer를 쌓은 후 학습하여, 실제 Y값과 예측 Y값의 차이 ( Cost )를 구하고 다시 처음 과정으로.. 머신러닝 [#E9] 학습 데이터 전처리 (PreProcessing) 학습 데이터를 다루다보면 원하는 결과가 아닌 NAN이 출력되는 경우가 있습니다. 이것의 원인은 다양한데, 일반적으로 세 가지가 있습니다. 1. Learning Rate가 너무 크거나 작게 설정된 경우 1optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)cs Solution : 특별한 방법 없이 다양한 Rate 값을 시도해야 합니다. 2. Over Fitting Solution : 데이터 Regularization, 더 많은 데이터, 특징이 되는 값 제거 Regularization의 경우 Cost 함수 + Term으로 구성됩니다. Term은 다음과 같습니다. 1234567891011//TERM = REGULARIZATION STRENGTH .. 코드 [#B7 DEPRECATED] TouchImageView.java TouchImageView.java는 표시된 이미지에 핀치줌 기능을 추가합니다. 이는 레이아웃에서 이미지뷰 대신 사용합니다. SOURCE CODE 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411..