Machine Learning/TensorFlow

[Machine Learning] TensorFlow Function

데이터 세상 2021. 2. 27. 03:08
728x90
반응형

TensorFlow Function

  • Pytorch, Theano 등의 딥러닝 라이브러리에 있는 함수 기능을 본떠 TensorFlow 버전 2에서 새로 만들어진 방법
  • 선언적으로 계산 과정을 구현
  • 일반 파이썬 함수처럼 정의
  • 속도 향상을 위한 컴파일이 가능하며, @tf.function 데코레이터를 적용하여 구현
import tensorflow as tf

def t_func1(x):
    tv = tf.Variable([[4,5],[9,10]])
    return tv * x
print(t_func1(10))

@tf.function
def t_func2(a,b):
    return tf.matmul(a, b)

x = [[4,5,6],[6,7,9]]
w = tf.Variable([[2,5],[6,5],[17,10]])
print(t_func2(x,w))

>>
tf.Tensor(
[[ 40  50]
 [ 90 100]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[140 105]
 [207 155]], shape=(2, 2), dtype=int32)

 

TensorFlow 미분

  • 변수 텐서 혹은 변수 텐서를 포함하는 연산의 결과로 만들어진 텐서를 입력으로 가지는 함수는 그 변수텐서로 미분한 값을 계산
  • GradientTape()로 만들어지는 gradient tape 컨텍스트 내에서 함수값 결과를 저장한 텐서 y를 만든다.
  • tape.gradient(y, x) 명령으로 변수형 텐서 x에 대한 y의 미분값을 계산
  • 상수형 텐서에 대해 미분하고 싶으면 tape.watch() 함수를 사용하여 상수형 텐서를 변수형 텐서처럼 바꾸어야 함
import tensorflow as tf

x1 = tf.Variable(tf.constant(1.0))
x2 = tf.Variable(tf.constant(2.0))

with tf.GradientTape() as tape:
    y = tf.multiply(x1, x2)

gradients = tape.gradient(y, [x1, x2])
print(gradients)
print(gradients[0].numpy())
print(gradients[1].numpy())

>>
[<tf.Tensor: id=19, shape=(), dtype=float32, numpy=2.0>, <tf.Tensor: id=20, shape=(), dtype=float32, numpy=1.0>]
2.0
1.0
728x90
반응형