본문 바로가기

Deep Learning

TensorFlow - 기본 사용법

@markdown

# TensorFlow 기본 사용법

<br/>

## TensorFlow 개요

____

- TensorFlow는 graph로 연산하는 프로그래밍 시스템이다.

- 기계 학습과 딥러닝을 위해 구글에서 만든 오픈소스 라이브러리이다.

- 데이터 플로우 그래프 방식으로 데이터의 흐름을 노드와 엣지를 사용한 방향 그래프로 표현한다.


## TensorFlow 용어

____

- `Tensor` : 정형화된 다차원 배열, 내부적 자료구조는 Tensor를 통해 표현된다.

- `Session` : 그래프를 실행하기 위한 객체로, run()로 그래프를 실행한다.

- `op(Operation)` : 동작을 정의하는 것으로, Tensor를 입력 받아 연산을 수행하고, 반환한다.

- `graph` : 연산을 표현한 것

- `Node` : Operation 정의에 포함된 것

- `Edge` : Node 간 연결을 표현한 것


## graph 연산

____

- `TensorFlow`는 보통 `graph`를 조립하는 '구성 단계'와 `session`을 이용해 `graph`의 연산을 실행시키는 '실행 단계'로 구성된다.

- 각 연산을 쪼개고 `graph`로 연결하여 구성하고, `graph`의 `operation`을 실행시킨다.



### graph 처리 과정

- `TensorFlow`의 구현 코드를 통해 `graph`에 정의된 내용이 실행가능한 `operation`으로 변환되고 CPU나 GPU같이 이용가능한 연산 자원들에 뿌려진다.

- 머신러닝의 동작 계획을 `graph`로 표현한 것이고, 각 `tensor` 자료구조가 이동하면서 `operation`에 의해 연산하는 방식이다.


### graph 만들기


- `graph`를 만드는 것은 연산 정의부터 시작한다.

- 기본적으로 `TensorFlow`를 `import`하게 되면 작업 함수로 노드를 추가할 수 있는 default graph가 생성된다.

- `tf.get_default_graph()` 명령어로 호출 가능


```

# 간단한 행렬곱 graph 만들기

import tensorflow as tf

# constant op는 default graph의 노드로 구성된다.

matrix1 = tf.constant([[3., 3.]])

matrix2 = tf.constant([[2.],[2.]])

# product는 행렬곱의 결과를 의미한다.

product = tf.matmul(matrix1, matrix2)

```

- 실행 결과 default graph에 3개의 op가 구성된다. constant 2개, 행렬곱 1개

- 동작 계획을 정의만 한 것이지 실행한 것은 아니다. 


### graph 실행

- 구성한 graph를 Session 객체를 이용해 실행할 수 있다.

```

sess = tf.Session()

result = sess.run(product)

print(result)

# 실행 후에 자원을 반납해준다.

sess.close()

```

- run()을 실행하면 위에서 구성한 3개의 op가 실행되고, 행렬곱 결과가 result로 반환된다.


```

# 자동으로 자원을 반납해주는 코드

with tf.Session() as sess:

  result = sess.run([product])

  print(result)

```