[텐서플로우 정리] 05. Shapes & Shaping

텐서플로우 내부를 보여주거나 변경하는 함수에 대해 소개한다.
텐서플로우에 이러한 역할을 하는 함수가 몇 개 없어 간략하게 정리할 수 있었다.

rank. 배열의 차원.

Rank

Math

Entity

Python example

0

Scalar

(magnitude only)

s = 483

1

Vector

(magnitude and direction)

v = [1.1, 2.2, 3.3]

2

Matrix

(table of numbers)

m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

3

3-Tensor

(cube of numbers)

t = [[[2], [4], [6]], [[8], [10], [12]], [[14], [16], [18]]]

n

n-Tensor

(you get the idea)

....


shape. 배열의 모양(2x5는 2행 5열)

Rank

Shape

Dimension number

Example

0

[]

0-D

A 0-D tensor. A scalar.

1

[D0]

1-D

A 1-D tensor with shape [5].

2

[D0, D1]

2-D

A 2-D tensor with shape [3, 4].

3

[D0, D1, D2]

3-D

A 3-D tensor with shape [1, 4, 3].

n

[D0, D1, ... Dn-1]

n-D

A tensor with shape [D0, D1, ... Dn-1].


내부 정보를 출력하는 함수로 functions.py에 만들었던 함수다.

def showConstantDetail(t):
sess = tf.InteractiveSession()
print(t.eval())
print('shape :', tf.shape(t))
print('size :', tf.size(t))
print('rank :', tf.rank(t))
print(t.get_shape())

sess.close()


shape을 변경할 수 있는 2개의 함수를 살펴 본다.

import tensorflow as tf
import functions

c1 = tf.constant([1, 3, 5, 7, 9, 0, 2, 4, 6, 8, 3, 7])
v1 = tf.Variable([[1, 2, 3], [7, 8, 9]])

print('-----------reshape------------')
functions.showOperation(tf.reshape(c1, [2, -1])) # [[1 3 5 7 9 0] [2 4 6 8 3 7]]
functions.showOperation(tf.reshape(c1, [-1, 3])) # [[1 3 5] [7 9 0] [2 4 6] [8 3 7]]
functions.showOperation(tf.reshape(v1, [-1])) # [1 2 3 7 8 9]

c2 = tf.reshape(c1, [2, 2, 1, 3])
c3 = tf.reshape(c1, [1, 4, 1, 3, 1])

print('-----------squeeze------------') # reemoves dimensions of size 1
# [[[[1 3 5]] [[7 9 0]]] [[[2 4 6]] [[8 3 7]]]]
functions.showOperation(c2)
functions.showOperation(tf.squeeze(c2)) # [[[1 3 5] [7 9 0]] [[2 4 6] [8 3 7]]]

# [[[[[1] [3] [5]]] [[[7] [9] [0]]] [[[2] [4] [6]]] [[[8] [3] [7]]]]]
functions.showOperation(c3)
functions.showOperation(tf.squeeze(c3)) # [[1 3 5] [7 9 0] [2 4 6] [8 3 7]]

reshape 함수에 사용된 -1은 나누어 떨어지는 숫자를 자동으로 적용하겠다는 뜻이다. 12개의 요소가 있을 때, [3,-1]이라는 것은 [3,4]와 같고, [2,2,-1]이라는 것은 [2,2,3]과 같다. 행과 열, 페이지에서 중심이 되는 것을 지정한 다음에, 나머지를 계산하기 싫을 때 주로 사용된다.