In laboratorio Interviste ai passanti Interviste ai passanti Interviste ai professori.
Ai 그까이거
-
Upload
dohyoung-rim -
Category
Technology
-
view
9.896 -
download
2
Transcript of Ai 그까이거
AI 그까이거임도형
임도형10 년 전 AI 전공자 .
지금은 백엔드 개발자 .
삽질 싫어하는 .
대상 , 목적 , 주의수학 좀 거시기한 개발자 .
수식 좀 몰라도 떠들썩한 AI 를 들여다 보고 싶다 .
기계가 학습한다고 어떻게 ?
얄팍한 지식 전달에 불과합니다 .
AI 겉표면만 핥아봅니다 .
아 그렇구나 정도의 개념이 있는 것 같기도 하면 성공입니다 .
과일 구별하기
귤 익은 것 구별하기개발자인 제가 시골에 갔습니다 .
과수원 하시는 어머니가 일을 시킵니다 . 귤 익은 것만 골라내라고 .
창고로 갔습니다 . 큰 바구니에 귤 들이 담겨 있습니다 .
골라내야 하긴 하는데 , 어떻게 .
“ 엄마 , 어떻게 골라 ?”
“ 거기 골라진 것 보고 알아서 해 "
귤 익은 것 구별하기상자가 2 개 있습니다 .
짐작해 보건데 한 상자에는 익은 것들이 , 다른 상자에는 안 익은 것들이 .
고것들을 보고 대애충 감잡아서 구별해 놓았습니다 .
“ 다 했어 ?”
“ 다 했어 "
“ 잘했다 . 온 김에 1 달 하고 가 "
귤 익은 것 구별하기 - 깡통 로봇으로 .옆에 로봇이 있습니다 .
저는 개발자입니다 . SW 엔지니어입니다 . 대신 하게 코딩해봅시다 .
로직을 입력해야 합니다 .
‘Xxx 하면 우측 상자에 , 그렇지 않으면 좌측 상자에 넣도록 .’
어떻게 했더라 ?
귤 익은 것 구별하기 - 구별 로직 ?왔을 때 있었던 상자 2 개를 비교해 보니 크기가 많이 달랐습니다 .
익은 쪽은 큰 것 , 아닌족은 작은 것 .
대에에에충 그 중간 정도를 눈으로 가늠해서 그 걸 기준으로 구분했습니다 .
크다작다
기준익은거안익은거
귤 익은 것 구별하기 - 구별 로직 !귤의 크기를 로봇이 측정하게 했고 ,
눈으로 가늠 했던 그 기준을 입력했습니다 .
아자 ! 깡통 로봇이 잘 구분합니다 . 뿌듯합니다 .
“ 엄마 놀다 올게요 .”
“ 그려 "
사과 익은 거 구별하기새벽일찍 들어와 속쓰린데 , 일어나 밥 먹으랍니다 .
“ 어제 욕봤어 , 퍼뜩 먹고 , 귤 옆에 보면 사과도 있어 그 것도 혀 .”
사과 익은 거 구별하기 - 다시 로봇으로사과도 역시 상자 2 개가 있네요 .
익은 거 , 안익은 거 . 그리고 구별할 거 바구니에 잔뜩 .
역시 로봇이 하게 해야지 .
로직이야 비슷할 테고 , 그렇다면 기준을 찾아내기만 하면 되겠네 .
상자 2 개의 사과를 보고 기준을 찾아내는 로직을 구현하고 실행시킵니다 .
자러갑니다 .
기준 찾기
크다작다
기준
익은거
기준 찾기
크다작다
기준
안익은거
기준 찾기
크다작다
기준
안익은거
기준 찾기
크다작다
기준
안익은거
기준 찾기
크다작다
기준
익은거
기준 찾기
크다작다
기준
익은거
기준 찾기
크다작다
기준
안익은거
기준 찾기
크다작다
기준
기준 찾기 - 찾았다 !
크다작다
기준안익은거 익은거
귤은 내가 학습했는데 ( 직접 코딩한 알고리즘 ),
사과는 기계가 학습했네요 ( 기계 학습한 알고리즘 ).
그 둘의 목적이나 사용새는 똑 같아요 .
분류기크기 익었다 구분
구분을 위해 ‘크기를 재서 기준 크기를 가지고 구별’을 고안해요 . ←model
학습 시키려면 사과 2 상자가 필요해요 . 익은거 상자 , 안익은거 상자 . ←training set
여러번 반복해서 , ← iteration, step
원하는 기준 크기를 찾아내요 . ← learning
기준 크기는 숫자로 표현되네요 .
그리고 구분 안된 바구니에 적용해요 . ← test set
사과 익은 것 구별하기 - 로봇으로자고 나왔더니 기준을 찾았네요 .
찾은 기준을 입력했습니다 .
다시 실행시키니 , 아자 ! 깡통 로봇이 잘 구분합니다 . 흐흐흐
“ 엄마 또 놀다 올게요 .”
“ 일찍 들어와 !”
사과 익은 것 구별하기 - 다시오늘도 얼마 못잤는데 , 깨웁니다 .
“ 사과 구별해 놓은 거 다시 허야혀 .”
“ 왜 ! 크기 보고 잘했는데 "
“ 크기만 하면 뭘해 . 퍼런게 익지도 않았는디 . 다시 혀 !"
“ 다시 혀야혀 " ← 성능이 안좋다 .
training set 으로 학습된 결과를 test set 에 적용했더니 그 결과가 좋지 않다 .
training set 에서의 성능이 100% 이더라도 그것이 test set 과 직결되지 않는다 .
사과 익은 것 구별하기 - 왜 ?구별해 놓은 걸 봤습니다 .
정말 큰것중에 퍼런게 익었다고 구별되어 있네요 .
아 . 색깔도 신경쓰자 .
크더라도 퍼러면 안익은거 , 작더라도 뻘거면 익은거 .
크다작다
안익은거 익은거
기준 다시 찾기 - 색깔도 고려
크다작다
안익은거
익은거
뻘겋다
퍼렇다
기준 다시 찾기 - 가르자
크다작다
기준
안익은거
뻘겋다
퍼렇다익은거
기준이 선이네기준 귤일때는 값만 찾으면 됐는데 ,
이젠 기준이 선이네 .
아 까다롭다 .
새 기준의 의미크기하고 색깔하고 같이 고려해서 어느정도 이상이면 익은거
익은거
안익은거
크기
색깔
처음이자 마지막 수식선은 다음 으로 표현됩니다 .
w1x1 + w2x2 = bw1x1 + w2x2 = bx
2
x1
1x1 + 1x2 = 3.5
크기 정도 (x1) 하고색깔 정도 (x2) 를 합쳐서3.5 정도인 거
선
1 2 3 4
1
2
x1
1x1 + 1x2 = 3.5x2
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
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
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
익은거
안익은거
기준을 찾는다는 건기준은 선으로 표현되고 , 선을 나타내는 3 개의 값 . : w1, w2, b 을 찾는 거 .
w1x1 + w2x2 = bw1x1 + w2x2 = bx
2
x1
선을 학습하는 방법기본 아이디어 : ‘ 최종 오차는 해당 입력 값 크기에 기인한다 .’
(3, 1) 의 안 익은 배의 경우 크기 (3) 가 색깔 (1) 보다 그 결과에 크게 작용했다 .
색깔의 비중보다크기의 비중을 더 조정하자 .
(3, 1)4 = 1x3 + 1x1
1x1 + 1x2 = 3.5
크기 3, 색깔 1 크기에 대한 비중을 더 조정
값이 큰 항목의 가중치를 더 크게 조정하자 .
입력값에 비례하여 비중을 조정
크기
색깔
크기
색깔
색깔 값이 큰 경우 크기 값이 큰 경우
선을 학습하는 방법각 비중치를 오차와 각 입력값의 곱에 비례해서 비중치를 수정한다 .
가중치의 변경 크기 = 입력값 * 오차 * 학습율
계산 식의 다른 표현x1
x2
1
w1
w2
b
+ w1x1 + w2x2+ b
선의 학습 실 예
https://www.youtube.com/watch?v=tYxkIOTdeu8
선의 학습 실 예
https://www.youtube.com/embed/V2MMyk7bdWY
해당 선을 찾을 수 있다실제 저 간단한 로직으로 선을 찾을 수 있다 .
학습할 수 있다 .
크기에다가 색깔을 추가하니 더 잘된다 . ← 크기 , 색깔을 특질 (feature) 라 한다 .
각 사과 마다 2 개 값의 특질이 있다 . 크기 3, 색깔 2 ← 특질 벡터 혹은 입력 벡터라 한다 .
사과 예의 경우 2 개 특질 ( 크기 , 색깔 ) 을 사용했다 . ← 입력 벡터가 2 차원 .
학습을 한다는 건 선을 구성하는 3 개의 값을 찾는 것이다 .
선으로 양분한다 . ← 선형 분리 (linear separating)
각 입력에 곱해지는 w1, w2 들을 가중치 (weight) 라 칭한다 . 각 입력 별 중한 정도 ?
오차 함수 (Cost Function)귤의 예에서 , 그 기준의 값에 따라 오차의 크기가 결정된다 .
결국 학습의 목표는 오차를 최소로 , 혹은 오차함수의 값이 최소가되는 w 를 찾는것 .
오차 함수는 모델을 구성하는 가중치(w) 의 함수이다 .
예에서의 기준값에 의해 발생하는 오차의 정도 .
경사 하강법 (Gradient Descent)현재 계수 w 에서 오차가 줄어드는 방향과 그 때의 경사로 w 를 조정한다 .
오차 평면위에 공을 놓았을 때 공은 최소가 되는 지점으로 흘러간다 .
더 이상 공이 움직이지 않으면 혹은 오차가 충분히 작으면 학습을 종료한다 .
http://rasbt.github.io/mlxtend/user_guide/general_concepts/gradient-optimization/
사과 예에서의 학습 방법경사하강법은 오차함수를 구하고 , 이를 각 weigth 별로 편미분하면 각 weigth 별로 수정할 다음 값을 구할 수 있다 . 그렇다고 한다 .
선형 모델 (w1x1 + w2x2 = b) 에서는 경사하강법의 결과가 직관적으로 설명했던 방법과 동일하다 .
사실 그 직관적인 설명의 방법은 증명된 것이다 .
결국 사과예에서 학습한 방법은 경사하강법을 사용한 것이다 .
신경 세포여러개의 수상돌기에서 자극이 합해져서그 값이 어느 값 이상일 경우축색돌기로 자극을 발생시킨다 .
http://m.blog.daum.net/lpds417/17453443
신경세포와 유사
http://m.blog.daum.net/lpds417/17453443
선형 분리의 문제를 학습할 수 있다 .
Perceptron
x1
x2
1
w1
w2
b
+w1x1 + w2x2+ b 0 or 1
Perceptron 의 한계간단한 XOR 도 못한다 .
선형분리가 불가능한 것은 풀지 못한다 .
XOR 는 선형분리로 풀지 못하는 문제이다 .
http://programmermagazine.github.io/201404/book/pmag.html
선형 분리 여부
http://sebastianraschka.com/Articles/2014_kernel_pca.html
선형 분리 불가 문제의 해결 방법입력 차원을 늘린다 .( 사과 예 )
입력 차원의 비선형 변환하여 선형분리 가능하도록 한다 .
혹은 MLP.
http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/
MLP(Multi Layer Perceptron)입력과 출력 사이에 층이 더 있다 .
개별 perceptron 의 결과를 다음 층의 입력으로 사용하고 결과적으로 선형 분리의 제약을 극복한다 .
http://docs.opencv.org/2.4/modules/ml/doc/neural_networks.html
Perceptron 의 능력1 개의 Perceptron 은 1 개의 선형 분리를 할 수 있다 .
perceptron 의 결과를 다른 perceptron 의 입력으로 하면 여러개의 선으로 분리를 할 수 있다 .
https://www.wikipendium.no/TDT4137_Cognitive_Architectures
개념들
기계학습 (Machine Learning) 이란특정 문제의 경우 사람이 알고리즘을 고안하기가 아주 어렵다 .( 얼굴 인식 같은 )
그런 문제의 경우 기계가 학습하게 하자 .
기반 데이타 (train set) 를 가지고 학습한다 .
사람이 코딩한 알고리즘 기계가 학습한
알고리즘 하드 코딩된 룰 찾아낸 수치
기계학습과 신경망아주 많은 기계학습 방법이 있다 . 아주 많다 .
그 중의 하나가 신경망이다 .
신경망에도 MLP 를 비롯한 아주 많은 모델이 있다 .
신경망과 심층신경망 (Deep Neural Network)에전에는 은닉층이 2,3 개에 불과했으나 요즈음은 몇십개를 사용하기도 한다 .
그 은닉층이 깊다고 해서 심층신경망 (Deep Neural Network) 이라 불린다 .
기계학습과 심층학습 (Deep Learning)사실 다른게 없다 .
AI, 기계학습에 대한 엄청난 기대가 20 년 전 쯤에 있었지만 엄청난 계산량의 필요로 인해 기대만큼의 실망이었다 .
최근 Big( 저장공간 , 컴퓨팅 파워 )덕분에 압도적인 성능을 보임 .
실망했던 용어 대신 붐을 일으키기 위한 용어이다 .
기계학습과 AI?인간이 고안한 알고리즘이건 , 기계가 학습한 알고리즘이건 어떤 기계가 판단해서 처리하면 AI 라 한다 .
AI 밥통 , AI 세탁기 , 자동주행 자동차 .
단지 기계가 학습한 경우를 기계학습이라 한다 .
그리고 요즘 신경망의 압도적인 성능으로 기계학습의 대부분은 신경망을 사용한다 .
그래서 , 그냥 NN = ML = 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
숫자 인식의 예이미지를 구성하는 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
CNN, RNN최근 CNN 과 RNN 의 월등한 성능을 보이고 있다 .
그래서 ML 의 다른 방법을 제끼고 AI 하면 NN 라고 할만큼 대세이다 .
CNN(Convolutional NN)사람눈에는 특정 모양에 반응하는 신경세포들이 있다 .
이를 구현한 가장 간단한 방법이 convolution filter 이다 .
https://developer.apple.com/library/content/documentation/Performance/Conceptual/vImage/ConvolutionOperations/ConvolutionOperations.html
Convolutional Filter필터 모양의 자극이 있으면 그 결과가 최대가 된다 .
http://www.kdnuggets.com/2016/08/brohrer-convolutional-neural-networks-explanation.html
CNN(Convolutional NN)(convolution 필터 적용과 이를 샘플링 ) 을 다수 적용한 결과를 NN 입력으로 한 것 .
특히 이미지 입력값을 사람처럼 RGB 로 분리하여 하였다 .
http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf
RNN(Recurrent NN)과거의 입력 혹은 과거에 계산된 값을 다음 입력에 적용한 구조의 NN.
http://peterroelants.github.io/posts/rnn_implementation_part01/
NN 대충해도 .숫자 인식 대충 돌려봐도 인식율 95% 이상 .
기타
AWS 의 AI 관련 서비스API
Rekognition : 이미지 인식 분석 . 객체 및 장면 인지 . 얼굴 감정 인식 /유사성 비교/ 인식
Polly : 음성 합성Lex : 음석인식 , 자연어 처리AWS Machine Learning : AI 개발을 위한 서비스 .
살짝 알아야 할 것Backpropagation Algorithm.
Activation Function.
Overfitting, Regularization.
Local Minima, Gradient Decay.
용어들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
TensorFlow 예필기체 숫자 인식
TensorFlow 로 MLP 학습학습 대상 : 필기체 숫자 인식ML 방법 : 신경망 MLP
사용 데이타 : MNIST data
필기체 숫자
http://makeyourownneuralnetwork.blogspot.kr/2015/03/the-mnist-dataset-of-handwitten-digits.html
MNIST dataset
https://www.researchgate.net/figure/264273647_fig1_Fig-18-0-9-Sample-digits-of-MNIST-handwritten-digit-database
MLP 모델입력 노드 수 : 784 개 ( 이미지 사이즈 28*28)
히든 레이어 1 개히든 레이어의 노드 수 : 15 개출력 노드 수 : 10 개 (0 에서 9 까지 )
http://neuralnetworksanddeeplearning.com/chap1.html
입력 벡터길이 784(28 * 28 이미지 사이즈 )
https://ml4a.github.io/ml4a/neural_networks/
출력노드 값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 }
전체 코드
copy from https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/multilayer_perceptron.py
파라매터 정의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]) # 출력
학습할 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]))}
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
학습 방법 정의
# 출력값 : 학습된 (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()으로 호출될 때 실행된다 .
학습
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}) # 학습시킨다 .
성능 확인# 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}))
실행 결과
$ python mlp.py
Optimization Finished!Accuracy: 0.9399
TensorFlow 예아이리스 인식
아이리스3 가지 종류가 있다 .
꽃받침과 꽃잎의 폭과 길이로 구분입력벡터는 4 차원 .
http://sebastianraschka.com/Articles/2015_pca_in_3_steps.html
TensorFlow 로 MLP 학습학습 대상 : 아이리스 인식ML 방법 : 신경망 MLP
사용 데이타 : 학습 데이터 120 개 , 테스트 데이터 30 개
https://www.tensorflow.org/tutorials/tflearn/
MLP 모델입력 노드 수 : 4 개히든 레이어 3 개히든 레이어의 노드 수 : 10 개 , 20 개 , 20 개출력 노드 수 : 3 개
https://www.r-bloggers.com/r-for-deep-learning-i-build-fully-connected-neural-network-from-scratch/
입력 , 출력입력 벡터 : 길이 4
6.4, 2.8, 5.6, 2.2
출력 값setosa : 0
versicolor : 1
virginica : 2
전체 코드
copy from https://www.tensorflow.org/tutorials/tflearn
데이터 정의
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)]
데이터 파일
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...
분류기 정의
# 분류기 정의# 입력층의 정의는 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")
학습 실행
# 입력은 training_set.data# 출력은 training_set.target# 모두 2000번 반복classifier.fit(x=training_set.data, y=training_set.target, steps=2000)
결과 확인
# 입력은 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))
결과 확인 - 개별 데이터로
# 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)))
실행 결과
$ python iris.pyAccuracy: 0.966667Predictions: [1, 1]
사과 구별은 언제 ?한다한다 하고 몇일 등짝 맞다가 그냥 갔다는 ...