TensorFlow의 개념 잡기 연습
TensorFlow의 개념
- Data flow graph를 이용하여 산술계산을 위한 오픈 소스 소프트웨어 라이브러리로 파이썬을 통해 사용할 수 있다.
Tensor란?
텐서(tensor) : \(n\)차원 행렬(matrix)
2차원 텐서는 일반적인 \(2\times2\) 행렬이다.
Data Flow Graph
- 점(node) : 그래프에서 수학 연산을 나타내며 선을 통해 입력받은 데이터를 연산하여 결과를 선으로 출력한다.
- 선(edge) : 점들을 지나다니는 다차원 데이터 배열(multidimensional data array)로 텐서(tensor)라고 함
- 데이터 흐름 그래프(data flow graph) : 데이터들이 점을 지나면서 연산이 이루어지고 결국에는 내가 원하는 결과를 얻거나 작업이 이루어지는 과정으로 텐서가 그래프 상에서 돌아다닌다., 즉 텐서 플로우(tensor flow)이다.
TensorFlow 실행
- TensorFlow를 설치하고, 버전을 확인한다.
>>> import tensorflow as tf >>> tf.__version__ '1.1.0-rc1'
- Hello, TensorFlow!를 출력해보자.
- constant() 함수를 사용해서 점만 1개 있는 그래프를 만든다.
- 선은 없으며, 점에는 "Hello, TensorFlow!"라는 상수만 있는 연산 그래프이다.
- 계산 그래프를 실행하기 위해서는
- 세션을 만든다.
- run() 함수를 사용하여 우리가 만들어 놓은 연산(점)을 실행한다.
- 결과에서 'Hello, TensorFlow!' 문자열 앞에 있는 b는 바이트 문자열(Bytes literals)을 의미한다.
# constant() 함수로 상수만 있는 연산을 하나 만든다. # 이 연산은 기본 텐서플로우 그래프에 점(node)으로 추가가 된다. >>> hello = tf.constant("Hello, TensorFlow!") # 텐서플로우 세션을 시작한다. >>> sess = tf.Session() # 연산을 수행하고 결과를 얻는다. >>> print(sess.run(hello)) b'Hello, TensorFlow!'
- 2개의 데이터를 받아 더하는 그래프를 만들어보자.
- 다음과 같이 a와 b의 값을 더하는 그래프를 만드는 것이다.
- 오른쪽 그림과 같이 텐서 3과 텐서 4가 선을 따라 이동하여 더하기 연산을 통하여 덧셈 결과값 텐서를 만들어 내는 것이다.
- 2개의 입력을 위하여 constant() 함수로 데이터 입력용 연산을 위한 점을 만든다.
- 더하기 연산을 위하여 add() 함수로 더하기 연산 점을 만든다.
- 세션을 만든다.
- run() 함수로 그래프 연산을 한다.
>>> node1 = tf.constant(3.0, tf.float32) >>> node2 = tf.constant(4.0) # 암묵적으로 tf.float32로 인식한다. >>> node3 = tf.add(node1, node2) >>> print("점1 = ", node1, "점2 = ", node2) 점1 = Tensor("Const_4:0", shape=(), dtype=float32) 점2 = Tensor("Const_5:0", shape=(), dtype=float32) # 점1과 점2는 모두 Tensor이다!!! >>> print("점3 = ", node3) 점3 = Tensor("Add:0", shape=(), dtype=float32) # 점3도 Tensor이다!!! >>> sess = tf.Session() >>> print("sess.run(점1, 점2) = ", sess.run([node1, node2])) sess.run(점1, 점2) = [3.0, 4.0] >>> print("sess.run(점3) = ", sess.run(node3)) sess.run(점3) = 7.0 >>> node4 = node1 + node2 # 'node4 = node1 + node2'라고 해도 된다. >>> print("sess.run(점4) = ", sess.run(node4)) sess.run(점4) = 7.0
TensorFlow의 역학구조
- TensorFlow의 연산을 사용하여 그래프를 만든다.
- Session() 함수로 세션을 만들고, sess.run() 함수에 데이터를 주고 계산 그래프를 실행하여 연산을 한다.
- 결과값이 나와 그래프에 있는 변수들이 업데이트 된다.
TensorFlow에서 변수의 값을 바꾸어 보자.
- 그래프를 미리 만들어 놓고, 실행하는 단계에서 값을 주고 싶다.
- placeholder() 함수로 점을 만들어 놓으면 된다.
- placeholder() 함수로 변수형 점을 만든다.
- run() 함수로 그래프를 실행할 때, feed_dict 변수로 데이터를 입력한다.
>>> a = tf.placeholder(tf.float32) >>> b = tf.placeholder(tf.float32) >>> adder_node = a + b >>> print(sess.run(adder_node, feed_dict = {a: 3, b: 4.5})) 7.5 >>> print(sess.run(adder_node, feed_dict = {a: [1, 3], b: [2, 4]})) [ 3. 7.]
Tensor란 무엇인가?
- 텐서는 배열(array)로서 어떤 값이든 될 수 있다.
- 텐서를 얘기할 때에는 랭크(Rank)와 모양(Shape), 종류(Type)를 사용한다.
- 랭크 : 몇 차원 배열인가?
- 모양 : 각각의 원소에 몇 개가 들어있는가?
- 텐서를 설계할 때 매우 중요하기 때문에 몇 개의 원소를 가지고 있는지 잘 살펴봐야 한다.
- 텐서의 모양은 파이썬 리스트일 수도 있고, 정수들의 정렬된 집합을 포함하는 튜플(tuple)일 수도 있다.
- 차원의 개수만큼 숫자들이 리스트 안에 있을 수 있는데, 리스트 안의 각 숫자는 각 차원의 숫자를 의미
- 각 차원의 값을 None으로 지정하면 길이는 변할 수 있다.
- tf.shape() 연산으로 모양을 확인할 수 있음
- 종류 : 데이터의 종류
- 대부분의 경우 float32를 사용
- 연산(OP; operation) : 텐서 객체에(또는 텐서 객체를 사용하여) 계산을 수행하는 점(node)이다.
- 0개 이상의 입력을 받아 0개 이상의 텐서를 반환
- 입력과 출력이 모두 0개인 연산
- 텐서플로우에서 연산은 단순한 수학적인 계산 이상으로 상태를 초기화하는 등과 같은 일에 사용됨
- 모든 점들이 다른 점들과 반드시 연결될 필요는 없음
- 연산의 생성자는 문자열 매개변수인 name을 입력을 받아들임
- name 매개변수를 사용하여 문자열로 특정 연산을 참조할 수 있음
-
c = tf.add(a, b, name = 'add_c')
'모두를 위한 머신러닝' 카테고리의 다른 글
Lesson 3 연습 : Multi-variable Linear Regression (1) | 2017.04.16 |
---|---|
Lesson 3 : Multi-variable Linear Regression (0) | 2017.04.16 |
Lesson 2 연습 : Linear Regression의 Hypothesis와 cost의 개념 (0) | 2017.04.11 |
Lesson 2 : Linear Regression의 Hypothesis와 cost의 개념 (0) | 2017.04.10 |
Lesson 1 : 기계학습의 기본 개념 (3) | 2017.04.03 |