1. 텐서 기초 살펴보기


basics_of_tensor



1) 텐서란?


basics_of_tensor

텐서 (Tensor)다차원 배열 (Multi-dimensional Array)입니다.

텐서 (Tensor)는 벡터 (Vector)와 행렬 (Matrix)을 일반화한 것이며, 3차원 이상으로 확장할 수 있습니다.

텐서 (Tensor)는 TensorFlow의 가장 주요한 객체이며, TensorFlow의 작업은 주로 텐서의 연산으로 이루어집니다.

즉, TensorFlow는 텐서 (Tensor)를 정의하고 연산을 수행하도록 하는 프레임워크 (Framework)입니다.




2) 텐서의 차원 - 랭크 (Rank)


텐서의 랭크 확인하기

import tensorflow as tf

scalar = tf.constant(1)
vector = tf.constant([1, 2, 3])
matrix = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
tensor = tf.constant([[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
                    [[1, 2, 3], [4, 5, 6], [7, 8, 9]],
                    [[1, 2, 3], [4, 5, 6], [7, 8, 9]]])

print(tf.rank(scalar))
print(tf.rank(vector))
print(tf.rank(matrix))
print(tf.rank(tensor))
tf.Tensor(0, shape=(), dtype=int32)
tf.Tensor(1, shape=(), dtype=int32)
tf.Tensor(2, shape=(), dtype=int32)
tf.Tensor(3, shape=(), dtype=int32)

텐서 (Tensor) 객체의 랭크 (Rank)는 차원의 수 (n-dimension)입니다.

tf.rank()는 텐서의 랭크를 반환합니다.

텐서 scalar, vector, matrix, tensor는 각각 랭크 0, 1, 2, 3를 가집니다.




3) 텐서 만들기


모듈 임포트하기

import tensorflow as tf

TensorFlow 프로그램을 만드는 가장 첫번째 단계는 tensorflow 라이브러리를 임포트하는 것입니다.



tf.constant() 사용하기

a = tf.constant(1)
b = tf.constant([2])
c = tf.constant([[1, 2], [3, 4]])

print(a)
print(b)
print(c)
tf.Tensor(1, shape=(), dtype=int32)
tf.Tensor([2], shape=(1,), dtype=int32)
tf.Tensor(
[[1 2]
 [3 4]], shape=(2, 2), dtype=int32)

tf.constant()는 상수 텐서를 만듭니다.



tf.zeros() 사용하기

a = tf.zeros(1)
b = tf.zeros([2])
c = tf.zeros([2, 3])

print(a)
print(b)
print(c)
tf.Tensor([0.], shape=(1,), dtype=float32)
tf.Tensor([0. 0.], shape=(2,), dtype=float32)
tf.Tensor(
[[0. 0. 0.]
[0. 0. 0.]], shape=(2, 3), dtype=float32)

tf.zeros()는 모든 요소가 0인 텐서를 만듭니다.

tf.zeros()에 만들어질 텐서의 형태 (shape)를 입력합니다.

텐서의 형태에 대해서는 4) 텐서의 데이터 타입과 형태를 참고하세요.



tf.ones() 사용하기

a = tf.ones(3)
b = tf.ones([4])
c = tf.ones([2, 2, 2])

print(a)
print(b)
print(c)
tf.Tensor([1. 1. 1.], shape=(3,), dtype=float32)
tf.Tensor([1. 1. 1. 1.], shape=(4,), dtype=float32)
tf.Tensor(
[[[1. 1.]
[1. 1.]]

[[1. 1.]
[1. 1.]]], shape=(2, 2, 2), dtype=float32)

tf.ones()는 모든 요소가 1인 텐서를 만듭니다.

tf.ones()에 만들어질 텐서의 형태 (shape)를 입력합니다.

텐서의 형태에 대해서는 4) 텐서의 데이터 타입과 형태를 참고하세요.



tf.range() 사용하기

a = tf.range(0, 3)
b = tf.range(1, 5, 2)

print(a)
print(b)
tf.Tensor([0 1 2], shape=(3,), dtype=int32)
tf.Tensor([1 3], shape=(2,), dtype=int32)

tf.range()는 파이썬 range()와 비슷하게, 주어진 범위와 간격을 갖는 숫자들의 시퀀스를 만듭니다.



tf.linspace() 사용하기

a = tf.linspace(0, 1, 3)
b = tf.linspace(0, 3, 10)

print(a)
print(b)
tf.Tensor([0.  0.5 1. ], shape=(3,), dtype=float64)
tf.Tensor(
[0.         0.33333333 0.66666667 1.         1.33333333 1.66666667
2.         2.33333333 2.66666667 3.        ], shape=(10,), dtype=float64)

tf.linspace()numpy.linspace()와 비슷하게, 주어진 범위를 균일한 간격으로 나누는 숫자의 시퀀스를 반환합니다.

NumPy 다양한 함수들 페이지를 참고하세요.




4) 텐서의 자료형과 형태


예제1

a = tf.constant(1)
b = tf.constant([2])
c = tf.constant([3, 4, 5])

print(a.dtype, a.shape)
print(b.dtype, b.shape)
print(c.dtype, c.shape)
<dtype: 'int32'> ()
<dtype: 'int32'> (1,)
<dtype: 'int32'> (3,)

dtype, shape 속성은 각각 텐서 (Tensor)의 자료형과 형태를 반환합니다.

텐서 a, b, c는 모두 정수형 (int32)의 데이터를 갖고, 각각 ( ), (1,), (3,)의 형태를 가짐을 알 수 있습니다.



예제2

d = tf.constant([1., 2.])
e = tf.constant([[1, 2., 3]])
f = tf.constant([[1, 2], [3, 4]])

print(d.dtype, d.shape)
print(e.dtype, e.shape)
print(f.dtype, f.shape)
<dtype: 'float32'> (2,)
<dtype: 'float32'> (1, 3)
<dtype: 'int32'> (2, 2)

텐서 d는 실수형 (float32)의 데이터를 갖고, (2,)의 형태를 가집니다.

텐서 e는 실수형 (float32)의 데이터를 갖고, (1, 3)의 형태를 가집니다.

(정수와 실수를 모두 포함하는 텐서의 자료형은 실수형이 됩니다.)

텐서 f는 정수형 (int32)의 데이터를 갖고, (2, 2)의 형태를 가집니다.




5) 간단한 수학 연산


예제

a = tf.add(1, 2)
b = tf.subtract(10, 5)
c = tf.square(3)
d = tf.reduce_sum([1, 2, 3])
e = tf.reduce_mean([1, 2, 3])

print(a)
print(b)
print(c)
print(d)
print(e)
tf.Tensor(3, shape=(), dtype=int32)
tf.Tensor(5, shape=(), dtype=int32)
tf.Tensor(9, shape=(), dtype=int32)
tf.Tensor(6, shape=(), dtype=int32)
tf.Tensor(2, shape=(), dtype=int32)

TensorFlow는 텐서 (Tensor)를 생성하고 연산하는 다양한 수학적 함수를 제공합니다.




6) NumPy 호환성


텐서 (Tensor)NumPy 어레이와 비슷하지만,

  • 텐서는 GPU, TPU와 같은 가속기에서 사용할 수 있고,

  • 텐서는 값을 변경할 수 없습니다.


텐서를 NumPy 어레이로

a = tf.constant([1, 2, 3])

print(a)
print(a.numpy())
tf.Tensor([1 2 3], shape=(3,), dtype=int32)
[1 2 3]

텐서의 numpy() 메서드를 사용해서 텐서를 NumPy 어레이로 변환할 수 있습니다.



NumPy 어레이를 텐서로

import numpy as np

b = np.ones(3)

print(b)
print(tf.multiply(b, 3))
[1. 1. 1.]
tf.Tensor([3. 3. 3.], shape=(3,), dtype=float64)

반대로, 다양한 TensorFlow 연산은 자동으로 NumPy 어레이를 텐서로 변환합니다.



이전글/다음글