개념
텐서플로우 메커니즘
- 텐서플로우는
node
와edge
로 구성된 그래프로 표현된다 - 그래프의 각
node
들은operation
을 의미한다
기본 용어
기본 자료구조 Tensor
- 그래프에서 edge를 따라 흐르는 값을 의미한다
- 다차원 배열과 리스트로 구성된다
- rank, shape, type 세 가지의 매개변수를 가진다
Tensor = rank(차원) + shape(행, 열) + type(타입)
- 과학과 공학 등 다양한 분야에서 쓰던 개념으로, 수학과 물리학에서는 선형 관계를 나타내는 기하적 대상을 뜻한다 → 주로 연속체역학(고체역학, 유체역학)에서 텐서를 사용한다
- 두 개 이상의 독립적인 방향을 동시에 표현할 때 사용한다 → 벡터는 하나의 방향을 표시하지만, 동시에 두 개 이상의 데이터를 표현하는 방식이다
- 모든 데이터는 텐서를 통해 표현된다
- 그래프 내의 오퍼레이션 간에는 텐서만 전달된다
-
텐서의 자료형 랭크
Rank
- 텐서의 차원을 표현하는 방식이다 → Tensor rank(order, degree, n-dimensions)
1 2
t = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] //텐서 t는 랭크가 2인 텐서 행렬이다
- 크기만을 갖는
scalar
: rank 0 - 크기와 방향을 갖는
vector
: rank 1 - 행렬
Matrix
: rank 2 - 3차원 숫자 큐브
3-Tensor
: rank 3 n-Tensor
: rank n
Shape
- 텐서는 셰이프라는 각 차원의 크기 값을 튜플의 형태로 표현할 수 있다
추상적인 연산 Operation
- 이름을 가지는 추상적인 연산을 의미한다.
- Graph-construction time에 operaion이 생성되어 노드라 불린다.
- 딥러닝에 상용되는 대표적인 operation 및 class로는
constant
,Variable
,Placeholder
,Matrix operation
,neural-net building block
등이 있다. - 그래프 상의 노드는 오퍼레이션으로 불린다
- 하나 이상의 텐서를 받을 수 있다
- 계산을 수행한 결과를 하나 이상의 텐서로 반환할 수 있다
데이터 타입
변수 Variables
- 그래프의 실행 시 파라미터를 저장하고 갱신한다
- 메모리 상에서 텐서를 저장하는 버퍼 역할을 한다
- 변수를 가지기 때문에 변경이 가능하여 딥러닝의
Weight
와Bias
변수를 선언할 때 사용된다 Variable
을 사용하기 전에 반드시 초기화 과정을 거쳐야 한다
선언된 모든 Variables를 초기화하는 코드1 2 3
init = tf.global_variables_initializer() with tf.Session() as sess: tf.run(init)
-
다양한 형태로
Variable
선언이 가능하다1 2 3 4 5 6 7 8 9 10 11
# create variable a with scalar value a = tf.Variable(2, name="scalar") # create variable b as a vector b = tf.Variable([2, 3], name="bios_vector") # create variable c as a 2x2 matrix c = tf.Variable([[0,1], [2,3]], name="2x2_matrix") # create variable W as 784 * 10 tensor, filled with zeros W = tf.Variable(tf.zeros([784, 10]))
상수형 Constant
- 상수를 저장하는 데이터형
- 상수형 선언:
tf.constant(value, dtype=None, shape=None, name='Const', verity_shape=False)
- 반환값: 상수형 텐서
value
: 상수 값dtype
: 상수의 데이터형(tf.float32와 같이 실수, 정수 등의 데이터 타입 정의)shape
: 행렬의 차원 정의(shape=[3,3]인 경우 3x3 행렬 저장)name
: 상수의 이름 정의
Variables
과 constant
와의 차이
constant
는 상수이므로 변수를 할당할 수 없다. 변경이 불가능하다.constant
: operation,Variable
: classVariable
은 class이기 때문에 많은 operation을 지원한다.
세션 Session
- 오퍼레이션의 실행 환경을 캡슐화한 것이다
- 그래프를 실행하기 위해서는 세션 객체가 필요하다
placeholder & feed_dict
- 텐서플로우는 그래프 어셈블이 이루어진 후에 연산이 수행된다
- 그래프 어셈블 수행시 입력 값을 미리 정의해주면
Session
을 수행할 때 데이터를 생성한다. - placeholder의 매개변수
Dtype
:placeholder
의 데이터 타입을 지정하는 필수 매개 변수Shape
:placeholder
값으로 상용할 텐서의shape
를 의미함Name
: 해당placeholder
에 이름을 지정함
1
tf.placeholder(dtype, shape=None, name=None)
- 세션을 수행할 때
feed_dict
를 이용하여placeholder
값에 데이터를 입력한다.1
sess.run(optimizer, feed_dict={X: x, Y: y})