일반 상대성이론(general relativity) 전문가인 "Lillian Lieber"는 텐서(tensor)를 "Facts of the Universe"라고 지칭했다. 구글브레인(google brain)에서 그래프기반 수치연산(Graph-based Numerical Computation)을 위한 오픈소스 라이브러리로 텐서플로우(tensorflow)를 공개했으며 2019년 Tensorflow 2.0를 공개하였는데 Eager Execution, 케라드, Estimators이 추가되었다.
텐서는 벡터와 행렬을 일반화한 것으로 숫자의 집합이라고 볼 수 있다. 행렬은 2-D 격자위에 놓은 숫자 집합으로 간주할 수 있는 반면 텐서(tensor) 는 일반화된 행렬로 생각할 수 있다.
from __future__ import absolute_import, division, print_function
import tensorflow as tf
tf_0d = tf.ones((1,))
tf_0d
tf_1d = tf.ones((2,))
tf_1d
tf_2d = tf.ones((2,2))
tf_2d
tf_3d = tf.ones((2,2,2))
tf_3d
넘파이(numpy)와 마찬가지로 상수를 정의하는데 유용한 함수가 다수 지원된다.
연산자 | 사례 |
---|---|
tf.constant() | constant([1, 2, 3]) |
tf.zeros() | zeros([2, 2]) |
tf.zeros_like() | zeros_like(input_tensor) |
tf.ones() | ones([2, 2]) |
tf.ones_like() | ones_like(input_tensor) |
tf.fill() | fill([3, 3], 7) |
from tensorflow import constant
x = constant(3, shape=[2,3])
print(x)
y = constant([1,2,3,4], shape=[2,2])
y
# 변수 정의
x = tf.Variable([1, 2, 3, 4, 5, 6], dtype=tf.float32)
y = tf.Variable([1, 2, 3, 4, 5, 6], dtype=tf.int16)
# 상수, 회귀계수 정의
coef = tf.constant(5, tf.float32)
# 회귀계수와 X 곱
y_hat = tf.multiply(x, coef)
print(".numpy() 메서드는 텐서를 넘파이 배열로 변환합니다.")
# print(y_hat.numpy())
import time
def time_matmul(x):
start = time.time()
for loop in range(100):
tf.matmul(x, x)
result = time.time()-start
print("10 loops: {:0.2f}ms".format(1000*result))
# CPU에서 강제실행합니다.
print("On CPU:")
with tf.device("CPU:0"):
x = tf.random_uniform([1000, 1000])
assert x.device.endswith("CPU:0")
time_matmul(x)
# GPU #0가 이용가능시 GPU #0에서 강제실행합니다.
print("On GPU:")
if tf.test.is_gpu_available():
with tf.device("GPU:0"): # 또는 GPU:1, GPU:2
x = tf.random_uniform([1000, 1000])
assert x.device.endswith("GPU:0")
time_matmul(x)
print(tf.test.is_gpu_available(cuda_only=False, min_cuda_compute_capability=None))
tf.test.is_gpu_available()