[머신러닝/실습] Tensorflow 기본
머신러닝은 복잡한 mathematical expression의 반복적인 computation의 결과라고 할 수 있습니다. 텐서플로우는 이러한 computation 과정을 data flow graph라는 방향 그래프를 이용해서 나타냅니다. 이 그래프에서 node와 edge는 각각
node : operator
edge : data
가 됩니다.
위의 그래프는 간단한 data flow graph입니다. 각 node는 상수를 입력받거나 두 숫자를 더하는 operator로 이루어져 있고, edge는 실수형 data가 자리하고 있습니다. 아래에서, 위의 data flow graph를 tensorflow를 이용해 구현해보도록 하겠습니다.
2. Tensor
tensor는 data flow graph에서 (edge를 차지하고 있는) 데이터의 구조입니다. tensor는 간단히 말하자면 multi-dimensional array라고 할 수 있습니다. tensor의 특징을 나타내는 용어에는 Rank, Shape, Type 이렇게 세 가지가 있습니다.
1) Rank
배열의 차원수
ex) tensor = [[1,2], [3,4]] 이면 2차원 배열이기 때문에 rank가 2가 됩니다.
2) Shape
배열의 구조
ex) tensor = [[1,2,3], [4,5,6]] 이면 원소가 3개인 배열 2개를 원소로 가지는 배열이 됩니다. 따라서, shape는 [2,3]이 됩니다.
shape는 우리가 multi-dimensional array를 iterating 할 때, for문의 종결조건에 걸어주는 숫자라고 생각하면 쉽습니다. 위의 tensor를 iterating 한다고 하면,
for(int i=0; i<2; i++) 와 for(int j=0; j<3; j++)를 중첩한 for문을 쓰게 될 것이고, 종결조건에 써있는 숫자인 2와 3이 각각 shape에 들어가는 숫자이기 때문입니다.
3) Type
배열의 원소의 자료형
대부분 tensorflow.float32를 사용합니다. tensorflow documentation을 보면 어떤 자료형들이 있는지 확인할 수 있습니다.
3. 코드
tensorflow를 이용하는 과정은 간단하게 3단계라고 할 수 있습니다.
① 그래프(data flow graph) 만들기
② sess.run(node(s))
③ graph 속의 값을 update 하거나 value를 리턴
아래의 코드를 통해 위에서 본 data flow graph를 구현해보도록 하겠습니다.
1
2
3
4
5
6
7
8
9
10 |
import tensorflow as tf
node1 = tf.constant(3.2, tf.float32)
node2 = tf.constant(4.3, tf.float32)
node3 = tf.add(node1, node2)
sess = tf.Session()
print(sess.run([node1, node2])) // [3.2, 4.3]
print(sess.run(node3)) // 7.5 |
① 그래프(data flow graph) 만들기
일단, 상수를 입력받는 operator인 tf.constant를 node1과 node2로 지정해주고 각각 3.2와 4.3를 tf.float32 type으로 받습니다.
그 다음으로, operand 2개를 더해주는 operator인 tf.add를 이용해 node1과 node2를 node3에 연결해줍니다.
② sess.run(node(s))
이러한 data flow graph에 실제 data가 흐를 수 있게 하려면 tf의 Session을 생성해 run해주어야 합니다. 이 때, 실행할 연산의 node 또는 node들의 array를 run()에 parameter로 넘겨줘야 합니다.
sess.run()은 각 연산을 시행한 결과를 순서대로 리턴해줍니다.
<참고>
1. 모두의 딥러닝 강좌 시즌1 (https://www.youtube.com/playlist?list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm)