SW 개발

[스터디] 머신러닝 입문 - 02 : 머신러닝(텐서플로)의 기본

. . . 2018. 7. 5. 10:25
반응형

본자료는 머리털나고 처음으로 머신러닝을 공부하는 입장에서 정리한 머신러닝 스터디노트입니다.

  • 오픈소스 강의를 들으면서 정리 및 요약한 자료입니다.
  • 제가 이해한 내용을 중심으로 작성했기 때문에 개인적인 의견 및 오류가 있을수있습니다.
  • 원본 강의는 항상 링크를 올립니다. 본강의와 함께 스터디하시는걸 추천드립니다.

머신러닝_기본_스터디 리스트 :

개요

강의자료

참고자료

강의 요약

  • 머신러닝은 누구나 활용할수있다
    • 누구보다 더 강력한 무기를 갖고 활용하자.
  • 알고리즘
    • linear regression
    • logistic regression
  • neural network
    • neural network
    • convolutional neural network
    • recurrent neural network
  • 머신러닝은 일종의 소프트웨어 ㅋㅋ

maching Learning

  • explicit programing
    • 일반적인 프로그램들이다.
    • 한계가 있다.
    • ex) 스팸필터의 경우…
      • 룰이 너무 많다.
      • 개발자가 일일이 다 룰을 추가해줘야함.
      • 일이 너무 많다.
  • 그래서..
    • 개발자가 일일이 개입하지 않고, 프로그램이 자체적으로 학습하는 프로그램이 좋을것 같다.
    • 머신러닝의 시작..

supervised / unsupervised learning

  • 학습의 방법에 따라 나누는 기준이다.

supervised learning.

  • 정해져있는 데이터
  • labeled examples : 이미 레이블이 달려있는 데이터들
    • training set 이라고 한다.

  • 고양이인지, 개인지… 이미 레이블이 달려있는 학습자료
    • 위의 자료를 바탕으로… 학습하는것을 supervised learning 이라고한다.

unsupervised learning

  • 데이터를 보고 스스로 학습하는 방법
  • ex) 자동적으로 유사한 뉴스들을 그룹핑
    • 유사한것들끼리 모은다거나.
    • word clustering : 단어 그룹핑 하여 자동 분석

대부분은 supervised learning 이다

  • 거의 대부분의 머신러닝은 supervised learning 이다
    • image labeling : learning from tagged image
    • email spam filter : labeled spam or ham email

training data set

  • supervised learning 에 필요한 데이터들
    • 반드시 필요하다
  • ex) alpha go 의 경우도 supervised learning
    • 기존 기보들은 training set

regression

  • ex) 성적을 예측하는 시스템의 경우 0~100 점
    • 이와같이 예측 범위가 넓은경우 regression

  • x변위에 공부한 시간 / y 결과에 시험점수를 런닝하는 모델의 경우…
    • 위와같은 경우 regression
    • 만약 7 시간공부했다고 입력할경우 약… 75 점이라고 결과가 나올것 같다.

binary classification

  • ex) 성적을 기준으로 성공 or 실패를 예측하는 프로그램의 경우
    • 이와같이 두가지로 나눌수있는경우 binary classification

  • x 변위에 공부한 시간 / y 결과에 시험의 통과여부
    • 위와같은경우 binary classification

multi-label classfication

  • ex) 성적을 기준으로 학점 a~f 까지 준다고 한다면..
    • 이와같이 결과가 여러개중에 하나일때… multi-label classification

x변위에 공부한시간 / y 결과에 시험 등급

  • 위와같은경우 multi-label classification

tensorflow basic

  • 구글에서 만든 오픈소스 라이브러리

  • 텐서플로말고도 각종 머신러닝 라이브러리들이 많다
    • 텐서플로가 다른것들 중에 가장 많이 사용중이다.
    • 사용자가 가장 많기 때문에 라이브러리나 각종 정보등을 취합하기 좋다.

  • data flow graph 를 이용하여 nemerical 컴퓨팅을한다?

data flow graph

  • graph
    • 각 node 간의 점을 서로 연결 (엣지) 하는것을 그래프…라고한다
  • data flow graph
    • 노드들이 각각의 오퍼레이션 역할을 하는 개념
    • 각각 앳지들은 data array 나 data

  • 각각의 데이터를 tensors 라고 한다..
    • 즉 우리가 만들어놓은 위와같은 data flow graph 위를 데이터가 마음대로 돌아다닌다는 개념

실습

install tensorflow

파이선 패키지로 바로 설치가능하다 ( 라이브러리 설치 )

그런데말입니다. cpu의 버젼에 따라서 텐서플로의 최신버젼을 설치하면 안됩니다요.

텐서플로 1.6버전부터 CPU 버전 바이너리는 AVX(고급 벡터 확장) 명령을 지원하도록 컴파일되어 있습니다. 만약 AVX를 지원하지 않는 CPU를 사용한다면 텐서플로 1.5 버전을 사용해야 합니다(아래 설명). 사용하고 있는 CPU가 AVX 명령을 지원하는지 확인하려면 여기를 참고하세요.

또는 인텔의 프로세서 유틸리티를 사용할 수도 있습니다. 이 프로그램을 다운받아 설치하고 실행하면 다음과 같은 화면을 볼 수 있습니다. 두 번째 탭에서 Advanced Vector Extensions에 ‘예’라고 표시되면 AVX 명령을 지원하는 CPU입니다. (출처 : 링크)

그래서 다음과 같이 인스톨한다.

pip install tensorflow==1.5.0
## 만약 cpu 가 avx 명령어를 지원한다면 최신버젼을 설치하도록한다.
pip install tensorflow

텐서플로우는 소스코드가 공개되어있으므로 직접 소스코드보려면..bazel 빌드시스템으로 바로 빌드

아나콘다에서의 설치

아나콘다 command 를 열고 위대로 텐서플로를 설치한다

텐서플로 버젼확인

import tensorflow as tf
tf.__version__

기본 예제모음

tensor flow hello world

# Create a constant op
# This op is added as a node to the default graph
hello = tf.constant("Hello, TensorFlow!")

# start a TF session
sess = tf.Session()

# run the op and get result
print(sess.run(hello))

data flow graph 모델에 따르면… 각각의 노드들을 연결하는 선.. 의 개념이다.

  1. tf.constant("Hello, TensorFlow!")
    • “Hello, TensorFlow!” 라는 노드를 생성한것이다.
  2. sess = tf.Session()
    • 생성한 노드를 세션으로 만들고…
  3. sess.run(hello)
    • 해당 세션을 실행함으로서 실행이 된다.

Computational Graph

node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0) # also tf.float32 implicitly
node3 = tf.add(node1, node2)
print("node1:", node1, "node2:", node2)
print("node3: ", node3)
## node1: Tensor("Const_1:0", shape=(), dtype=float32) node2: Tensor("Const_2:0", shape=(), dtype=float32)
## node3: Tensor("Add:0", shape=(), dtype=float32)
sess = tf.Session()
print("sess.run(node1, node2): ", sess.run([node1, node2]))
print("sess.run(node3): ", sess.run(node3))
## sess.run(node1, node2): [3.0, 4.0]
## sess.run(node3): 7.0
  • node1 = tf.constant(3.0, tf.float32) : 숫자 3 이라는 노드를 만들고
  • node2 = tf.constant(4.0) : 숫자 4라는 노드를 만들고
  • node3 = tf.add(node1, node2) : 각각의 덧셈을하는 노드를 만들었다
  • sess = tf.Session() : 각 세션을 연결하고..
  • sess.run([node1, node2]) / sess.run(node3) : 세션연결한 결과를 실행

tensorflow mechanics

  1. 그래프를 빌드 : placeholder 로 만들게 될경우 값을 넘겨줄수있다.
  2. 그래프를 실행
  3. 그래프속의 값들이 변경 혹은 리턴된다.

placeholder

위의 예제들은 이미 그래프내에 데이터가 있는 형태였다…

만약 그래프를 그려놓고 데이터는 나중에 던져주려면 다음과 같이한다.

a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b # + provides a shortcut for tf.add(a, b)

print(sess.run(adder_node, feed_dict={a: 3, b: 4.5}))
print(sess.run(adder_node, feed_dict={a: [1,3], b: [2, 4]}))
  • tf.placeholder() : node 생성시 빈것으로 생성
    • constant 가 아닌 비어있는 node다.

tensor 의 타입

tensor 는 데이터다. (graph 를 돌아당기는 데이터 -> tensor)

ranks : 배열

몇 차원 배열인가?

  • rank 0 : 0차원 array
  • rank 1 : 1차원 array

shape : 각각의 엘레멘트에 몇개 들어있는가?

각 배열에 몇개의 요소가 있는가?

  • shape 에 대한 표현은..
    • 3개의 배열이 3개의 요소니까..
    • [3 3] 혹은 [3,3] 와 같이 표현한다.

type : 변수타입

  • 대부분의 경우 float32 를 많이 사용한다.
반응형