[Tensorflow] 6. 기본 개념:Tensor / Flow
Tensorflow를 완전히 이해하기 위해서 기본 메커니즘을 이해해야한다. Tensorflow 런타임 환경의 기본 요소인 Graps, Sessions에 대해 공부해보았다.
0. Tensor
TensorFlow에서 데이터의 기본 단위는 Tensor라고 불리는 개념을 사용한다. 텐서는 다차원 배열을 통해 표현할 수 있는 N 차원 배열 로 정의할 수 있다. 텐서플로우는 데이터 플로우 그래프(Data Flow Graph)방식을 사용한다. 데이터 플로우 그래프란, 수학 계산과 데이터의 흐름을 Node와 Edge를 사용한 방향 그래프 표현이다. 다시말해 Tensor는 많은 데이터를 효과적으로 처리하는 자료구조를 의미하며 쉽게는 다차원 array 혹은 list라고 생각하면 된다. Flow란 결국 Graph를 의미한다. 즉 모든 연산을 쉽게 하기 위해 각각의 연산을 잘개 쪼개 이를 Graph로 연결한 것이다.
1. Graphs
텐서플로우 프로그램은 크게 두 가지 단계로 구성되어 있다. 구성과, 실행. 구성 단계에서는 graph를 조립하고 실행 단계에서는 session을 이용해 graph의 연산을 실행한다.
텐서플로우에서는 모든 수치 계산이 graph로 표현된다. graph란 모델의 작업을 나타내는 노드 배열이다.
이런 코드를 실행했을 때 무엇이 프린트 될까 ? 2에 3을 더한 5가 출력될 것을 예상 할 것이다 . 하지만 결과는 다음과 같다.
<실행결과>
위의 코드는 두개의 입력 노드 (a=2, b=3)와 하나의 출력 노드 (c='Add')를 만든다. 변수 c를 출력하라는 것은 결국 출력노드 텐서의 정보를 출력하라는 것이다.
연산의 결과를 출력하기 위해서는 graph를 구성한 다음단계인 session 단계로 나아가야한다. Tensorflow는 session에서 지정하지 않는 한 graph를 실행하지 않는다. 따라서 값을 할당하고 graph를 통해 흐름(flow)를 만들려면 session을 만들고 실행해야한다. 이에 따라 위의 코드를 수정해보면
위 코드를 실행하면 이제 연산의 결과 '5'가 출력된다. session 객체 sess가 만들어져 run() 메소드가 c의 계산 graph를 실행한다. 이때 텐서플로우는 c의 값을 얻는데 필요한 계산 graph만을 실행한다. 이것은 텐서플로우의 여러가지 장점 중 하나이다. 수백 수천개의 데이터로 거대한 작업을 처리할 때 많은 시간을 절약한다. session을 사용한 후에는 close()하는 것을 잊지 말자. 참고로 tf.add 안에서 지정해준 name은 tensorflow-name 이다. name을 지정하면 그래프에서 각 노드가 지정한 이름으로 나타난다. tensorflow-name을 지정하지 않을 경우 그래프에서 처리가능한 일반적인 기본 이름으로 처리된다.
0. Tensor
TensorFlow에서 데이터의 기본 단위는 Tensor라고 불리는 개념을 사용한다. 텐서는 다차원 배열을 통해 표현할 수 있는 N 차원 배열 로 정의할 수 있다. 텐서플로우는 데이터 플로우 그래프(Data Flow Graph)방식을 사용한다. 데이터 플로우 그래프란, 수학 계산과 데이터의 흐름을 Node와 Edge를 사용한 방향 그래프 표현이다. 다시말해 Tensor는 많은 데이터를 효과적으로 처리하는 자료구조를 의미하며 쉽게는 다차원 array 혹은 list라고 생각하면 된다. Flow란 결국 Graph를 의미한다. 즉 모든 연산을 쉽게 하기 위해 각각의 연산을 잘개 쪼개 이를 Graph로 연결한 것이다.
1. Graphs
텐서플로우 프로그램은 크게 두 가지 단계로 구성되어 있다. 구성과, 실행. 구성 단계에서는 graph를 조립하고 실행 단계에서는 session을 이용해 graph의 연산을 실행한다.
텐서플로우에서는 모든 수치 계산이 graph로 표현된다. graph란 모델의 작업을 나타내는 노드 배열이다.
1
2
3
4
5
|
import tensorflow as tf
a = 2
b = 3
c = tf.add(a, b, name='Add')
print(c)
| cs |
이런 코드를 실행했을 때 무엇이 프린트 될까 ? 2에 3을 더한 5가 출력될 것을 예상 할 것이다 . 하지만 결과는 다음과 같다.
<실행결과>
1
|
Tensor("Add:0", shape=(), dtype=int32)
| cs |
위의 코드는 두개의 입력 노드 (a=2, b=3)와 하나의 출력 노드 (c='Add')를 만든다. 변수 c를 출력하라는 것은 결국 출력노드 텐서의 정보를 출력하라는 것이다.
연산의 결과를 출력하기 위해서는 graph를 구성한 다음단계인 session 단계로 나아가야한다. Tensorflow는 session에서 지정하지 않는 한 graph를 실행하지 않는다. 따라서 값을 할당하고 graph를 통해 흐름(flow)를 만들려면 session을 만들고 실행해야한다. 이에 따라 위의 코드를 수정해보면
1
2
3
4
5
6
7
|
import tensorflow as tf
a = 2
b = 3
c = tf.add(a, b, name='Add')
sess = tf.Session()
print(sess.run(c))
sess.close()
| cs |
위 코드를 실행하면 이제 연산의 결과 '5'가 출력된다. session 객체 sess가 만들어져 run() 메소드가 c의 계산 graph를 실행한다. 이때 텐서플로우는 c의 값을 얻는데 필요한 계산 graph만을 실행한다. 이것은 텐서플로우의 여러가지 장점 중 하나이다. 수백 수천개의 데이터로 거대한 작업을 처리할 때 많은 시간을 절약한다. session을 사용한 후에는 close()하는 것을 잊지 말자. 참고로 tf.add 안에서 지정해준 name은 tensorflow-name 이다. name을 지정하면 그래프에서 각 노드가 지정한 이름으로 나타난다. tensorflow-name을 지정하지 않을 경우 그래프에서 처리가능한 일반적인 기본 이름으로 처리된다.
No comments: