1. 텐서플로우(TensorFlow)
텐서플로우(TensorFlow)는 구글이 2011년 개발을 시작하여 2015년 오픈소스로 공개한 대표적인 머신러닝 라이브러리 입니다. 데이터 그래프를 수치적으로 연산하기 위해 만들어 졌습니다. 기본적으로는 C++로 구현되었지만 파이썬, 자바 등 다양한 언어를 지원하고 있습니다. 하지만 파이썬을 최우선으로 지원하며, 대부분의 편리한 기능들은 파이썬 라이브러리로 구현되어 있으므로 파이썬을 통해 머신러닝을 개발하는 것이 편합니다.
아나콘다 환경에서 텐서플로우를 설치하기 위해서는 다음 명령어를 입력합니다. $ conda install tensorflow |
파이프를 통해 설치할 수도 있습니다.
2. 텐서(Tensor)
텐서플로우에서 텐서(tensor)란 다차원 배열의 데이터를 뜻합니다. 쉽게 말하자면 텐서플로우에서 사용하는 자료형이라 보면 됩니다. 텐서플로우의 연산은 데이터 흐름 그래프(DataFlow Graph)를 통해 이루어지며, 텐서는 그래프를 따라 흐르면서 연산됩니다. 즉, 텐서(tensor)가 그래프를 따라 흐른다(flow)는 의미에서 텐서플로우라는 이름이 붙었습니다.
위의 그림처럼 데이터와 연산은 정점(vertex)으로서 텐서를 구성하며, 간선(edge)으로 연결되어 그래프를 형성합니다. 데이터 노드(node)에 바로 데이터가 입력되는 것은 아니며, 데이터의 형태와 크기만 정의됩니다. 그 후 데이터 노드에 데이터를 공급하고 연산노드를 실행합니다. 텐서플로우 1.0에서는 세션을 생성하여 세션에 연산 노드를 추가함으로써 텐서플로우가 실행되었습니다. 그러나 텐서플로우 2.0에서는 즉시 실행(Eager execution)을 지원하면서 세션에 연산 노드를 추가할 필요없이 코드가 정의되면 바로 실행됩니다.
텐서플로우 1.0:
import tensorflow as tf
x = tf.constant(1) y = tf.constant(2) z = x + y
sess = tf.Session()
print(sess.run(z)) |
텐서플로우 2.0:
import tensorflow as tf
x = tf.constant(1) y = tf.constant(2) z = x + y
print(z.numpy()) |
3. 텐서의 구성요소
텐서는 랭크(rank), 형태(shape), 타입(type) 3가지 구성요소를 갖습니다.
랭크(rank)는 데이터의 차원을 의미합니다. 0차원 텐서는 스칼라(Scalar), 1차원 텐서는 벡터(Vector), 2차원 텐서는 행렬(Matrix)라고 합니다. 데이터에서 차원은 특징(feature)의 수에 따라 늘어납니다. 랭크는 텐서플로우 객체의 rank 함수를 통해 호출되는 0차원 텐서입니다.
형태(shape)는 각 차원에 있는 원소 개수를 나타냅니다. 텐서 객체의 shape 속성을 통해 출력할 수 있습니다.
텐서의 형태를 변경하고 싶다면 텐서플로우 객체의 reshape 함수를 사용합니다.
텐서플로우 객체의 transpose 함수를 통해 전치행렬의 텐서를 생성할 수도 있습니다.
타입(type)은 텐서의 원소가 갖는 값의 데이터 타입을 말하며 아래와 같은 타입을 가집니다. 공식 홈페이지(https://www.tensorflow.org/api_docs/python/tf/dtypes?hl=ko)를 참조하셔도 됩니다.
numpy 배열처럼 텐서의 원소도 동일한 타입을 가지며, 텐서를 생성할 때 타입을 지정하지 않으면 numpy 배열을 생성할때처럼 자동으로 유추합니다.
|