Tech/ML, DL

Tensorflow에 대해

Julie's tech 2021. 5. 14. 11:50
728x90

우리가 딥러닝을 처음 접할 때 가장 많이 듣는 라이브러리, 'Tensorflow'에 대해 다뤄볼 것이다.

우선 개괄적인 이야기부터하자면, Tensorflow는 구글이 개발한 라이브러리이다.

딥러닝 모델을 구현하기 위해 필요한 기능들을 제공하는 오픈소스 프레임워크이며, 기반언어는 C++이다.

모바일 뿐만 아니라 여러 OS에서 구동 가능하여 큰 인기를 끌었다.

Tensorflow라는 이름에서도 유추가 가능하듯이, Tensor라는 다차원 배열 데이터를 노드로 담아 Dataflow를 만든다.

위키에서는 '상태를 가지는 유향그래프' 라고 하여 Statefull dataflow라고 하는데,

과거 데이터를 지속적으로 저장하면서 방향을 지닌채 진행되는 그래프라고 생각하면 된다.

노드와 엣지로 구성되어 있으며, 데이터를 의미하는 Tensor과 그래프를 따라 연산이 수행되는 흐름인 flow를 합친 이름이다.

노드는 흔히 데이터 배열을 담고, 엣지는 Operator를 담게 된다.

출처 : https://jungjihyuk.github.io/2019/10/06/tensorflow/

우리는 Tensorflow를 이용하여 계산 과정과 목표 함수만 정하면 쉽게 미분을 통해 답을 얻을 수 있고,

로컬 컴퓨터의 환경에 따라 CPU / GPU를 모두 이용하여 이러한 계산을 하도록 할 수 있다.

Tensorflow는 머신러닝, 딥러닝 양쪽에 사용되고 있다.

CPU 와 GPU를 모두 지원하는데, 각각의 장단점이 있다.

CPU의 경우 GPU에 비해 코어수가 많고, 직렬 처리로 진행되어 복잡한 연산을 계산하기 좋다.

GPU는 병렬 처리로 인해 간단한 연산을 대량으로 처리하기 좋아서, 머신러닝을 학습 연산에 유용하다.

사용자는 모르게 코드 단에서는 CPU와 GPU 각각에 대해 처리 방식이 다르다.

Tensor의 구조(rank, shape, type)에 대해서는 다른 글에서 이미 다루었기 때문에 넘어가도록 하겠다.

2차원 배열을 의미하는 텐서 : https://statkclee.github.io/deep-learning/tensorflow-data-structure.html


Tensorflow를 설치(1.4버전)하여 import를 하면 내부적으로 default_graph_stack에 기본 그래프가 생성된다.

아래 명령어를 통해 확인해볼 수 있다.

tf.get_default_graph().get_operations()

아무런 operation이 확인되지 않지만, 상수 tensor 라도 만들면 주소가 기록된다.

이처럼 Tensor는 그래프를 생성하고, 실행하는 과정에서 연산이 이루어진다.

Session이라는 객체를 통해 그래프를 실행할 수 있다.


Tensorflow외에 여러 오픈소스 딥러닝 프레임워크들이 있다.

대표적인 예로 Keras가 있는데, 모델을 구현할 때 손쉽게 할 수 있게 해준다. (layer생성 등)

출처 : https://keras.io/ko/why-use-keras/

Keras는 여러 백엔드 엔진을 지원하는데, 그 중 하나가 Tensorflow이다.

- Tensorflow 백엔드 (Google)

- CNTK 백엔드 (Microsoft)

- Theano 백엔드

즉 Keras는 좀 더 범용적이고 자주 사용되는 모델들을 손쉽게 빌드할 수 있게 도와주고,

Tensorflow는 좀 더 밑단에서 직접 모델을 구현하고 싶거나, 엔지니어하고 싶을 경우 사용하기에 적합한 라이브러리라고들 한다.

반응형