Ai 그까이거

102
AI 그그그그 그그그

Transcript of Ai 그까이거

Page 1: Ai 그까이거

AI 그까이거임도형

Page 2: Ai 그까이거

임도형10 년 전 AI 전공자 .

지금은 백엔드 개발자 .

삽질 싫어하는 .

Page 3: Ai 그까이거

대상 , 목적 , 주의수학 좀 거시기한 개발자 .

수식 좀 몰라도 떠들썩한 AI 를 들여다 보고 싶다 .

기계가 학습한다고 어떻게 ?

얄팍한 지식 전달에 불과합니다 .

AI 겉표면만 핥아봅니다 .

아 그렇구나 정도의 개념이 있는 것 같기도 하면 성공입니다 .

Page 4: Ai 그까이거

과일 구별하기

Page 5: Ai 그까이거

귤 익은 것 구별하기개발자인 제가 시골에 갔습니다 .

과수원 하시는 어머니가 일을 시킵니다 . 귤 익은 것만 골라내라고 .

창고로 갔습니다 . 큰 바구니에 귤 들이 담겨 있습니다 .

골라내야 하긴 하는데 , 어떻게 .

“ 엄마 , 어떻게 골라 ?”

“ 거기 골라진 것 보고 알아서 해 "

Page 6: Ai 그까이거

귤 익은 것 구별하기상자가 2 개 있습니다 .

짐작해 보건데 한 상자에는 익은 것들이 , 다른 상자에는 안 익은 것들이 .

고것들을 보고 대애충 감잡아서 구별해 놓았습니다 .

“ 다 했어 ?”

“ 다 했어 "

“ 잘했다 . 온 김에 1 달 하고 가 "

Page 7: Ai 그까이거

귤 익은 것 구별하기 - 깡통 로봇으로 .옆에 로봇이 있습니다 .

저는 개발자입니다 . SW 엔지니어입니다 . 대신 하게 코딩해봅시다 .

로직을 입력해야 합니다 .

‘Xxx 하면 우측 상자에 , 그렇지 않으면 좌측 상자에 넣도록 .’

어떻게 했더라 ?

Page 8: Ai 그까이거

귤 익은 것 구별하기 - 구별 로직 ?왔을 때 있었던 상자 2 개를 비교해 보니 크기가 많이 달랐습니다 .

익은 쪽은 큰 것 , 아닌족은 작은 것 .

대에에에충 그 중간 정도를 눈으로 가늠해서 그 걸 기준으로 구분했습니다 .

크다작다

기준익은거안익은거

Page 9: Ai 그까이거

귤 익은 것 구별하기 - 구별 로직 !귤의 크기를 로봇이 측정하게 했고 ,

눈으로 가늠 했던 그 기준을 입력했습니다 .

아자 ! 깡통 로봇이 잘 구분합니다 . 뿌듯합니다 .

“ 엄마 놀다 올게요 .”

“ 그려 "

Page 10: Ai 그까이거

사과 익은 거 구별하기새벽일찍 들어와 속쓰린데 , 일어나 밥 먹으랍니다 .

“ 어제 욕봤어 , 퍼뜩 먹고 , 귤 옆에 보면 사과도 있어 그 것도 혀 .”

Page 11: Ai 그까이거

사과 익은 거 구별하기 - 다시 로봇으로사과도 역시 상자 2 개가 있네요 .

익은 거 , 안익은 거 . 그리고 구별할 거 바구니에 잔뜩 .

역시 로봇이 하게 해야지 .

로직이야 비슷할 테고 , 그렇다면 기준을 찾아내기만 하면 되겠네 .

상자 2 개의 사과를 보고 기준을 찾아내는 로직을 구현하고 실행시킵니다 .

자러갑니다 .

Page 12: Ai 그까이거

기준 찾기

크다작다

기준

익은거

Page 13: Ai 그까이거

기준 찾기

크다작다

기준

안익은거

Page 14: Ai 그까이거

기준 찾기

크다작다

기준

안익은거

Page 15: Ai 그까이거

기준 찾기

크다작다

기준

안익은거

Page 16: Ai 그까이거

기준 찾기

크다작다

기준

익은거

Page 17: Ai 그까이거

기준 찾기

크다작다

기준

익은거

Page 18: Ai 그까이거

기준 찾기

크다작다

기준

안익은거

Page 19: Ai 그까이거

기준 찾기

크다작다

기준

Page 20: Ai 그까이거

기준 찾기 - 찾았다 !

크다작다

기준안익은거 익은거

Page 21: Ai 그까이거

귤은 내가 학습했는데 ( 직접 코딩한 알고리즘 ),

사과는 기계가 학습했네요 ( 기계 학습한 알고리즘 ).

그 둘의 목적이나 사용새는 똑 같아요 .

분류기크기 익었다 구분

Page 22: Ai 그까이거

구분을 위해 ‘크기를 재서 기준 크기를 가지고 구별’을 고안해요 . ←model

학습 시키려면 사과 2 상자가 필요해요 . 익은거 상자 , 안익은거 상자 . ←training set

여러번 반복해서 , ← iteration, step

원하는 기준 크기를 찾아내요 . ← learning

기준 크기는 숫자로 표현되네요 .

그리고 구분 안된 바구니에 적용해요 . ← test set

Page 23: Ai 그까이거

사과 익은 것 구별하기 - 로봇으로자고 나왔더니 기준을 찾았네요 .

찾은 기준을 입력했습니다 .

다시 실행시키니 , 아자 ! 깡통 로봇이 잘 구분합니다 . 흐흐흐

“ 엄마 또 놀다 올게요 .”

“ 일찍 들어와 !”

Page 24: Ai 그까이거

사과 익은 것 구별하기 - 다시오늘도 얼마 못잤는데 , 깨웁니다 .

“ 사과 구별해 놓은 거 다시 허야혀 .”

“ 왜 ! 크기 보고 잘했는데 "

“ 크기만 하면 뭘해 . 퍼런게 익지도 않았는디 . 다시 혀 !"

Page 25: Ai 그까이거

“ 다시 혀야혀 " ← 성능이 안좋다 .

training set 으로 학습된 결과를 test set 에 적용했더니 그 결과가 좋지 않다 .

training set 에서의 성능이 100% 이더라도 그것이 test set 과 직결되지 않는다 .

Page 26: Ai 그까이거

사과 익은 것 구별하기 - 왜 ?구별해 놓은 걸 봤습니다 .

정말 큰것중에 퍼런게 익었다고 구별되어 있네요 .

아 . 색깔도 신경쓰자 .

크더라도 퍼러면 안익은거 , 작더라도 뻘거면 익은거 .

크다작다

안익은거 익은거

Page 27: Ai 그까이거

기준 다시 찾기 - 색깔도 고려

크다작다

안익은거

익은거

뻘겋다

퍼렇다

Page 28: Ai 그까이거

기준 다시 찾기 - 가르자

크다작다

기준

안익은거

뻘겋다

퍼렇다익은거

Page 29: Ai 그까이거

기준이 선이네기준 귤일때는 값만 찾으면 됐는데 ,

이젠 기준이 선이네 .

아 까다롭다 .

Page 30: Ai 그까이거

새 기준의 의미크기하고 색깔하고 같이 고려해서 어느정도 이상이면 익은거

익은거

안익은거

크기

색깔

Page 31: Ai 그까이거

처음이자 마지막 수식선은 다음 으로 표현됩니다 .

w1x1 + w2x2 = bw1x1 + w2x2 = bx

2

x1

Page 32: Ai 그까이거

1x1 + 1x2 = 3.5

크기 정도 (x1) 하고색깔 정도 (x2) 를 합쳐서3.5 정도인 거

1 2 3 4

1

2

x1

1x1 + 1x2 = 3.5x2

Page 33: Ai 그까이거

1x1 + 1x2 = 3.5

크기 정도 (x1) 하고색깔 정도 (x2) 를 합쳐서3.5 정도인 거

선과 점

(1, 1)

1 2 3 4x1

1x1 + 1x2 = 3.5

(3, 1.4)

(2, 2)

(2, 0.7)

x2

1

2

Page 34: Ai 그까이거

1x1 + 1x2 = 3.5

크기 정도 (x1) 하고색깔 정도 (x2) 를 합쳐서3.5 정도인 거

점의 값

2 = (1*1 + 1*1)

1 2 3 4x1

1x1 + 1x2 = 3.5

4.4 = (1*3 + 1*1.4)

4 = (1*2 + 1*2)

2.7 = (1*2 + 1*0.7)

x2

1

2

Page 35: Ai 그까이거

1x1 + 1x2 = 3.5

크기 정도 (x1) 하고색깔 정도 (x2) 를 합쳐서3.5 정도인 거

선으로 구분된 영역

2 = (1*1 + 1*1)

1 2 3 4x1

1x1 + 1x2 = 3.5

4.4 = (1*3 + 1*1.4)

4 = (1*2 + 1*2)

2.7 = (1*2 + 1*0.7)

x2

1

2

익은거

안익은거

Page 36: Ai 그까이거

기준을 찾는다는 건기준은 선으로 표현되고 , 선을 나타내는 3 개의 값 . : w1, w2, b 을 찾는 거 .

w1x1 + w2x2 = bw1x1 + w2x2 = bx

2

x1

Page 37: Ai 그까이거

선을 학습하는 방법기본 아이디어 : ‘ 최종 오차는 해당 입력 값 크기에 기인한다 .’

(3, 1) 의 안 익은 배의 경우 크기 (3) 가 색깔 (1) 보다 그 결과에 크게 작용했다 .

색깔의 비중보다크기의 비중을 더 조정하자 .

(3, 1)4 = 1x3 + 1x1

1x1 + 1x2 = 3.5

크기 3, 색깔 1 크기에 대한 비중을 더 조정

Page 38: Ai 그까이거

값이 큰 항목의 가중치를 더 크게 조정하자 .

입력값에 비례하여 비중을 조정

크기

색깔

크기

색깔

색깔 값이 큰 경우 크기 값이 큰 경우

Page 39: Ai 그까이거

선을 학습하는 방법각 비중치를 오차와 각 입력값의 곱에 비례해서 비중치를 수정한다 .

가중치의 변경 크기 = 입력값 * 오차 * 학습율

Page 40: Ai 그까이거

계산 식의 다른 표현x1

x2

1

w1

w2

b

+ w1x1 + w2x2+ b

Page 41: Ai 그까이거

선의 학습 실 예

https://www.youtube.com/watch?v=tYxkIOTdeu8

Page 42: Ai 그까이거

선의 학습 실 예

https://www.youtube.com/embed/V2MMyk7bdWY

Page 43: Ai 그까이거

해당 선을 찾을 수 있다실제 저 간단한 로직으로 선을 찾을 수 있다 .

학습할 수 있다 .

Page 44: Ai 그까이거

크기에다가 색깔을 추가하니 더 잘된다 . ← 크기 , 색깔을 특질 (feature) 라 한다 .

각 사과 마다 2 개 값의 특질이 있다 . 크기 3, 색깔 2 ← 특질 벡터 혹은 입력 벡터라 한다 .

사과 예의 경우 2 개 특질 ( 크기 , 색깔 ) 을 사용했다 . ← 입력 벡터가 2 차원 .

학습을 한다는 건 선을 구성하는 3 개의 값을 찾는 것이다 .

선으로 양분한다 . ← 선형 분리 (linear separating)

각 입력에 곱해지는 w1, w2 들을 가중치 (weight) 라 칭한다 . 각 입력 별 중한 정도 ?

Page 45: Ai 그까이거

오차 함수 (Cost Function)귤의 예에서 , 그 기준의 값에 따라 오차의 크기가 결정된다 .

결국 학습의 목표는 오차를 최소로 , 혹은 오차함수의 값이 최소가되는 w 를 찾는것 .

오차 함수는 모델을 구성하는 가중치(w) 의 함수이다 .

예에서의 기준값에 의해 발생하는 오차의 정도 .

Page 46: Ai 그까이거

경사 하강법 (Gradient Descent)현재 계수 w 에서 오차가 줄어드는 방향과 그 때의 경사로 w 를 조정한다 .

오차 평면위에 공을 놓았을 때 공은 최소가 되는 지점으로 흘러간다 .

더 이상 공이 움직이지 않으면 혹은 오차가 충분히 작으면 학습을 종료한다 .

http://rasbt.github.io/mlxtend/user_guide/general_concepts/gradient-optimization/

Page 47: Ai 그까이거

사과 예에서의 학습 방법경사하강법은 오차함수를 구하고 , 이를 각 weigth 별로 편미분하면 각 weigth 별로 수정할 다음 값을 구할 수 있다 . 그렇다고 한다 .

선형 모델 (w1x1 + w2x2 = b) 에서는 경사하강법의 결과가 직관적으로 설명했던 방법과 동일하다 .

사실 그 직관적인 설명의 방법은 증명된 것이다 .

결국 사과예에서 학습한 방법은 경사하강법을 사용한 것이다 .

Page 48: Ai 그까이거

신경 세포여러개의 수상돌기에서 자극이 합해져서그 값이 어느 값 이상일 경우축색돌기로 자극을 발생시킨다 .

http://m.blog.daum.net/lpds417/17453443

Page 49: Ai 그까이거

신경세포와 유사

http://m.blog.daum.net/lpds417/17453443

Page 50: Ai 그까이거

선형 분리의 문제를 학습할 수 있다 .

Perceptron

x1

x2

1

w1

w2

b

+w1x1 + w2x2+ b 0 or 1

Page 51: Ai 그까이거

Perceptron 의 한계간단한 XOR 도 못한다 .

선형분리가 불가능한 것은 풀지 못한다 .

XOR 는 선형분리로 풀지 못하는 문제이다 .

http://programmermagazine.github.io/201404/book/pmag.html

Page 52: Ai 그까이거

선형 분리 여부

http://sebastianraschka.com/Articles/2014_kernel_pca.html

Page 53: Ai 그까이거

선형 분리 불가 문제의 해결 방법입력 차원을 늘린다 .( 사과 예 )

입력 차원의 비선형 변환하여 선형분리 가능하도록 한다 .

혹은 MLP.

http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/

Page 54: Ai 그까이거

MLP(Multi Layer Perceptron)입력과 출력 사이에 층이 더 있다 .

개별 perceptron 의 결과를 다음 층의 입력으로 사용하고 결과적으로 선형 분리의 제약을 극복한다 .

http://docs.opencv.org/2.4/modules/ml/doc/neural_networks.html

Page 55: Ai 그까이거

Perceptron 의 능력1 개의 Perceptron 은 1 개의 선형 분리를 할 수 있다 .

perceptron 의 결과를 다른 perceptron 의 입력으로 하면 여러개의 선으로 분리를 할 수 있다 .

https://www.wikipendium.no/TDT4137_Cognitive_Architectures

Page 56: Ai 그까이거

개념들

Page 57: Ai 그까이거

기계학습 (Machine Learning) 이란특정 문제의 경우 사람이 알고리즘을 고안하기가 아주 어렵다 .( 얼굴 인식 같은 )

그런 문제의 경우 기계가 학습하게 하자 .

기반 데이타 (train set) 를 가지고 학습한다 .

사람이 코딩한 알고리즘 기계가 학습한

알고리즘 하드 코딩된 룰 찾아낸 수치

Page 58: Ai 그까이거

기계학습과 신경망아주 많은 기계학습 방법이 있다 . 아주 많다 .

그 중의 하나가 신경망이다 .

신경망에도 MLP 를 비롯한 아주 많은 모델이 있다 .

Page 59: Ai 그까이거

신경망과 심층신경망 (Deep Neural Network)에전에는 은닉층이 2,3 개에 불과했으나 요즈음은 몇십개를 사용하기도 한다 .

그 은닉층이 깊다고 해서 심층신경망 (Deep Neural Network) 이라 불린다 .

Page 60: Ai 그까이거

기계학습과 심층학습 (Deep Learning)사실 다른게 없다 .

AI, 기계학습에 대한 엄청난 기대가 20 년 전 쯤에 있었지만 엄청난 계산량의 필요로 인해 기대만큼의 실망이었다 .

최근 Big( 저장공간 , 컴퓨팅 파워 )덕분에 압도적인 성능을 보임 .

실망했던 용어 대신 붐을 일으키기 위한 용어이다 .

Page 61: Ai 그까이거

기계학습과 AI?인간이 고안한 알고리즘이건 , 기계가 학습한 알고리즘이건 어떤 기계가 판단해서 처리하면 AI 라 한다 .

AI 밥통 , AI 세탁기 , 자동주행 자동차 .

단지 기계가 학습한 경우를 기계학습이라 한다 .

그리고 요즘 신경망의 압도적인 성능으로 기계학습의 대부분은 신경망을 사용한다 .

그래서 , 그냥 NN = ML = AI 라고 부른다 . 맞는 말은 아니지만 .

Page 62: Ai 그까이거

ML 의 쓰임새분류 (classification) : 귤분류 , 사과 분류 , 숫자 인식군집화 (clustering) : 뉴스나 데이터의 군집화회기 (regerssion) : 집값 예측

http://www.aishack.in/tutorials/kmeans-clustering/http://www.holehouse.org/mlclass/01_02_Introduction_regression_analysis_and_gr.html

Page 63: Ai 그까이거

숫자 인식의 예이미지를 구성하는 pixel 의 각 값으로 구성된 입력벡터를 NN 의 입력으로 한다 .

그리고 학습시 해당 출력 노드만 1 로 하고 , 나머지는 0 으로 학습 .

test 시에는 출력 노드중 최대 값을 가진 것으로 인식 .

https://medium.com/@ageitgey/machine-learning-is-fun-part-3-deep-learning-and-convolutional-neural-networks-f40359318721#.ylp7hd52a http://neuralnetworksanddeeplearning.com/chap1.html

Page 64: Ai 그까이거

CNN, RNN최근 CNN 과 RNN 의 월등한 성능을 보이고 있다 .

그래서 ML 의 다른 방법을 제끼고 AI 하면 NN 라고 할만큼 대세이다 .

Page 65: Ai 그까이거

CNN(Convolutional NN)사람눈에는 특정 모양에 반응하는 신경세포들이 있다 .

이를 구현한 가장 간단한 방법이 convolution filter 이다 .

https://developer.apple.com/library/content/documentation/Performance/Conceptual/vImage/ConvolutionOperations/ConvolutionOperations.html

Page 66: Ai 그까이거

Convolutional Filter필터 모양의 자극이 있으면 그 결과가 최대가 된다 .

http://www.kdnuggets.com/2016/08/brohrer-convolutional-neural-networks-explanation.html

Page 67: Ai 그까이거

CNN(Convolutional NN)(convolution 필터 적용과 이를 샘플링 ) 을 다수 적용한 결과를 NN 입력으로 한 것 .

특히 이미지 입력값을 사람처럼 RGB 로 분리하여 하였다 .

http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf

Page 68: Ai 그까이거

RNN(Recurrent NN)과거의 입력 혹은 과거에 계산된 값을 다음 입력에 적용한 구조의 NN.

http://peterroelants.github.io/posts/rnn_implementation_part01/

Page 69: Ai 그까이거

NN 대충해도 .숫자 인식 대충 돌려봐도 인식율 95% 이상 .

Page 70: Ai 그까이거

기타

Page 71: Ai 그까이거

AWS 의 AI 관련 서비스API

Rekognition : 이미지 인식 분석 . 객체 및 장면 인지 . 얼굴 감정 인식 /유사성 비교/ 인식

Polly : 음성 합성Lex : 음석인식 , 자연어 처리AWS Machine Learning : AI 개발을 위한 서비스 .

Page 72: Ai 그까이거

살짝 알아야 할 것Backpropagation Algorithm.

Activation Function.

Overfitting, Regularization.

Local Minima, Gradient Decay.

Page 73: Ai 그까이거

용어들Machine Learning, Deep Learning, Artificial Intelligence

Neural Network, Deep Neural Network, Perceptron, Multi Layer Perceptron

Cost Function, Gradient Descent, Backpropagation, Overfitting, Local Minima, Regularization, Drop Out

Supervised Learning, Unsupervised Learning, Reinforcement Learning

Train Set, Validation Set, Test Set

Classification, Clustering, Regression

Activation Function, Sigmoid, ReLU

CNN, RNN

Page 74: Ai 그까이거

TensorFlow 예필기체 숫자 인식

Page 75: Ai 그까이거

TensorFlow 로 MLP 학습학습 대상 : 필기체 숫자 인식ML 방법 : 신경망 MLP

사용 데이타 : MNIST data

Page 76: Ai 그까이거

필기체 숫자

http://makeyourownneuralnetwork.blogspot.kr/2015/03/the-mnist-dataset-of-handwitten-digits.html

Page 77: Ai 그까이거

MNIST dataset

https://www.researchgate.net/figure/264273647_fig1_Fig-18-0-9-Sample-digits-of-MNIST-handwritten-digit-database

Page 78: Ai 그까이거

MLP 모델입력 노드 수 : 784 개 ( 이미지 사이즈 28*28)

히든 레이어 1 개히든 레이어의 노드 수 : 15 개출력 노드 수 : 10 개 (0 에서 9 까지 )

http://neuralnetworksanddeeplearning.com/chap1.html

Page 79: Ai 그까이거

입력 벡터길이 784(28 * 28 이미지 사이즈 )

https://ml4a.github.io/ml4a/neural_networks/

Page 80: Ai 그까이거

출력노드 값0 이미지의 경우 : { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }

1 이미지의 경우 : { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }

5 이미지의 경우 : { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 }

Page 81: Ai 그까이거

전체 코드

copy from https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/multilayer_perceptron.py

Page 82: Ai 그까이거

파라매터 정의learning_rate = 0.001 # 학습률training_epochs = 100 # 학습 회수batch_size = 100 # 배치 학습 갯수n_hidden_1 = 15 # 히든레이어의 노드 수n_input = 784 # 입력층의 노드수 (img shape: 28*28)n_classes = 10 # 출력층의 노드수 = 클래스 수 (0-9 digits)

x = tf.placeholder("float", [None, n_input]) # 입력y = tf.placeholder("float", [None, n_classes]) # 출력

Page 83: Ai 그까이거

학습할 weigth 와 bias# 학습할 weigth와 biasweights = { 'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])), 'out': tf.Variable(tf.random_normal([n_hidden_1, n_classes]))}biases = { 'b1': tf.Variable(tf.random_normal([n_hidden_1])), 'out': tf.Variable(tf.random_normal([n_classes]))}

Page 84: Ai 그까이거

MLP 정의# MLP 모델def multilayer_perceptron(x, weights, biases): # h = x * w + b layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1']) # h = relu(h) layer_1 = tf.nn.relu(layer_1) # o = h * w + b out_layer = tf.matmul(layer_1, weights['out']) + biases['out'] return out_layer

Page 85: Ai 그까이거

학습 방법 정의

# 출력값 : 학습된 (weights, biases) 모델에 값 (x)을 입력 .out = multilayer_perceptron(x, weights, biases)

# 오차 : out과 y의 차이cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(out, y))

# 학습 . 오차를 최소로 하게 한다 .optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

# 요 코드는 단지 실행에 대한 정의이다 .# session.ru()으로 호출될 때 실행된다 .

Page 86: Ai 그까이거

학습

with tf.Session() as sess: # tf.Session.run(op)로 실행시킨다 sess.run(init) # 변수들을 초기화 하고 total_batch = int(mnist.train.num_examples / batch_size) for epoch in range(training_epochs): # 정해진 학습 횟수 만큼 for i in range(total_batch): # 전체 데이터를 한번에 batch_size 개수만큼 batch_x, batch_y = mnist.train.next_batch(batch_size) # 학습시킬 데이터를 꺼내서 sess.run([optimizer, cost], feed_dict={x: batch_x, y: batch_y}) # 학습시킨다 .

Page 87: Ai 그까이거

성능 확인# out의 최대 노드와 y의 최대 노드가 같은면correct_prediction = tf.equal(tf.argmax(out, 1), tf.argmax(y, 1))# correct_prediection의 평균accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))# 테스트 집합으로 값을 구한다 .print("Accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels}))

Page 88: Ai 그까이거

실행 결과

$ python mlp.py

Optimization Finished!Accuracy: 0.9399

Page 89: Ai 그까이거

TensorFlow 예아이리스 인식

Page 90: Ai 그까이거

아이리스3 가지 종류가 있다 .

꽃받침과 꽃잎의 폭과 길이로 구분입력벡터는 4 차원 .

http://sebastianraschka.com/Articles/2015_pca_in_3_steps.html

Page 91: Ai 그까이거

TensorFlow 로 MLP 학습학습 대상 : 아이리스 인식ML 방법 : 신경망 MLP

사용 데이타 : 학습 데이터 120 개 , 테스트 데이터 30 개

https://www.tensorflow.org/tutorials/tflearn/

Page 92: Ai 그까이거

MLP 모델입력 노드 수 : 4 개히든 레이어 3 개히든 레이어의 노드 수 : 10 개 , 20 개 , 20 개출력 노드 수 : 3 개

https://www.r-bloggers.com/r-for-deep-learning-i-build-fully-connected-neural-network-from-scratch/

Page 93: Ai 그까이거

입력 , 출력입력 벡터 : 길이 4

6.4, 2.8, 5.6, 2.2

출력 값setosa : 0

versicolor : 1

virginica : 2

Page 94: Ai 그까이거

전체 코드

copy from https://www.tensorflow.org/tutorials/tflearn

Page 95: Ai 그까이거

데이터 정의

training_set = tf.contrib.learn.datasets.base.load_csv_with_header( # 학습 데이타 filename="iris_training.csv", target_dtype=np.int, features_dtype=np.float32)test_set = tf.contrib.learn.datasets.base.load_csv_with_header( # 테스트 데이타 filename="iris_test.csv", target_dtype=np.int, features_dtype=np.float32)

# 실수 타입의 4 차원의 입력 백터feature_columns = [tf.contrib.layers.real_valued_column("", dimension=4)]

Page 96: Ai 그까이거

데이터 파일

training_set = tf.contrib.learn.datasets.base.load_csv_with_header( # 학습 데이타 filename="iris_training.csv", target_dtype=np.int, features_dtype=np.float32)test_set = tf.contrib.learn.datasets.base.load_csv_with_header( # 테스트 데이타 filename="iris_test.csv", target_dtype=np.int, features_dtype=np.float32)

# 실수 타입의 4 차원의 입력 백터feature_columns = [tf.contrib.layers.real_valued_column("", dimension=4)]

# 파일 iris_training.csv120,4,setosa,versicolor,virginica6.4,2.8,5.6,2.2,25.0,2.3,3.3,1.0,14.9,2.5,4.5,1.7,24.9,3.1,1.5,0.1,05.7,3.8,1.7,0.3,04.4,3.2,1.3,0.2,0...

# 파일 iris_test.csv30,4,setosa,versicolor,virginica5.9,3.0,4.2,1.5,16.9,3.1,5.4,2.1,25.1,3.3,1.7,0.5,06.0,3.4,4.5,1.6,15.5,2.5,4.0,1.3,16.2,2.9,4.3,1.3,1...

Page 97: Ai 그까이거

분류기 정의

# 분류기 정의# 입력층의 정의는 feature_columns로 . 입력벡터는 4차원 . 타입은 실수# 히든 레이어 3개 . 각 레이어의 노드수는 10, 20, 10# 출력층의 노드는 3개 . 분류한 클래스가 3개이다 .feature_columns = [tf.contrib.layers.real_valued_column("", dimension=4)]classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns, hidden_units=[10, 20, 10], n_classes=3, model_dir="/tmp/iris_model")

Page 98: Ai 그까이거

학습 실행

# 입력은 training_set.data# 출력은 training_set.target# 모두 2000번 반복classifier.fit(x=training_set.data, y=training_set.target, steps=2000)

Page 99: Ai 그까이거

결과 확인

# 입력은 test_set.data# 출력은 test_set.targetaccuracy_score = classifier.evaluate(x=test_set.data,y=test_set.target)["accuracy"]print('Accuracy: {0:f}'.format(accuracy_score))

Page 100: Ai 그까이거

결과 확인 - 개별 데이터로

# 2개의 입력new_samples = np.array( [[6.4, 3.2, 4.5, 1.5], [5.8, 3.1, 5.0, 1.7]], dtype=float)y = list(classifier.predict(new_samples, as_iterable=True))print('Predictions: {}'.format(str(y)))

Page 101: Ai 그까이거

실행 결과

$ python iris.pyAccuracy: 0.966667Predictions: [1, 1]

Page 102: Ai 그까이거

사과 구별은 언제 ?한다한다 하고 몇일 등짝 맞다가 그냥 갔다는 ...