#!/usr/bin/env python3
placeholder, marix, operation
변수는 텐서를 입력받아 변수를 출력하는 Variable()함수를 이용하여 주로 생성합니다.
이 함수는 변수 선언만 하기 때문에 변수 초기화를 별도로 해줘야 합니다.
import tensorflow as tf
my_var = tf.Variable(tf.zeros([2, 3]), dtype=tf.float32, name='my_var')
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
result = my_var.eval()
print(result)
# [[0. 0. 0.]
# [0. 0. 0.]]
placeholder는 계산 그래프에 데이터가 투입되는 위치를 나타냅니다. 세션의 feed_dict 인자를 통해 placeholder 데이터를 투입합니다.
계산에 placeholder를 넣기 위해서는 placeholder에 대해 하나 이상의 연산을 수행해야 합니다.
import numpy as np
with tf.Session() as sess:
x = tf.placeholder(tf.float32, shape=[2, 2])
y = tf.identity(x) # Return a tensor with the same shape and contents as input.
x_vals = np.random.rand(2, 2)
print(sess.run(y, feed_dict={x: x_vals}))
# [[0.18282834 0.35173032]
# [0.3008346 0.14677659]]
다음은 matrix를 다루는 몇가지 방법에 대해 알아보겠습니다.
sess = tf.Session()
identity_matrix = tf.diag([1., 1., 1.]) # identity matrix
A = tf.truncated_normal([2, 3], mean=1, stddev=1, dtype=tf.float32)
B = tf.fill([2, 3], 5.)
C = tf.random_uniform([3, 2], dtype=tf.float32)
np_arr = np.array([[1, 2, 3],
[-3, -7, -1],
[0, 5, -2]])
D = tf.convert_to_tensor(np_arr, dtype=tf.float32)
print(sess.run(identity_matrix))
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
print(sess.run(A))
# [[0.25446475 1.108418 2.5896869 ]
# [0.3214993 0.6533705 0.8581022 ]]
print(sess.run(B))
# [[5. 5. 5.]
# [5. 5. 5.]]
print(sess.run(C))
# [[0.9613472 0.97370124]
# [0.4405172 0.7275435 ]
# [0.9694842 0.23063374]]
print(sess.run(D))
# [[ 1. 2. 3.]
# [-3. -7. -1.]
# [ 0. 5. -2.]]
# 더하기 빼기는 다음과 같이 사용합니다.
print(sess.run(A+B))
# [[6.5324025 6.2761655 7.3138623]
# [5.8994517 7.0984983 6.506235 ]]
print(sess.run(A-B))
# [[-4.5335164 -4.079894 -2.3542004]
# [-4.500795 -5.3273354 -2.5056663]]
# 행렬곱은 다음 함수를 사용합니다.
print(sess.run(tf.matmul(B, identity_matrix)))
# [[5. 5. 5.]
# [5. 5. 5.]]
print(sess.run(tf.transpose(C)))
# [[0.16169488 0.08706641 0.3332044 ]
# [0.18076909 0.5893874 0.8159915 ]]
print(sess.run(tf.matrix_determinant(D)))
# -38.0
print(sess.run(tf.matrix_inverse(D)))
# [[-0.50000006 -0.5 -0.50000006]
# [ 0.15789475 0.05263158 0.21052633]
# [ 0.39473686 0.13157895 0.0263158 ]]
print(sess.run(tf.cholesky(identity_matrix)))
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
eig_value, eig_vector = sess.run(tf.self_adjoint_eig(D))
print(eig_value)
# [-10.659076 -0.22750695 2.886583 ]
print(eig_vector)
# [[-0.21749546 -0.6325011 -0.74339646]
# [-0.84526515 -0.25879988 0.46749276]
# [ 0.48808062 -0.7300446 0.4783433 ]]
나눗셈과 외적은 다음과 같이 구합니다.
with tf.Session() as sess:
f = tf.div(3, 4) # 몫만 표현
print (f.eval()) # 0
f1 = tf.truediv(3, 4) # 나눗셈 결과를 소수로 표현
print(f1.eval()) # 0.75
f2 = tf.floordiv(3.0, 4.0) # 몫을 소수로 표현
print(f2.eval()) # 0.0
f3 = tf.mod(22.0, 5.0) # 나머지
print(f3.eval()) # 2.0
f4 = tf.cross([1., 0., 0.], [0., 1., 0.]) # 외적
print(f4.eval()) # [0. 0. 1.]
tan(pi/4)는 다음과 같이 구할 수 있습니다.
init = tf.global_variables_initializer()
with tf.Session() as sess:
init.run()
result = tf.div(tf.sin(np.pi/4.), tf.cos(np.pi/4.))
print(result)
# 1.0
다항함수 3*x^2 -x + 10의 결과는 다음 코드로 구현할 수 있습니다.
def custom_polynomial(val):
return(3*tf.square(val) - val + 10)
init = tf.global_variables_initializer()
with tf.Session() as sess:
init.run()
result = custom_polynomial(11).eval()
print(result)
# 362
참고 자료:
[1]TensorFlow Machine Learning Cookbook, Nick McClure
'Tensorflow > Introduction' 카테고리의 다른 글
Activation Function (0) | 2018.04.25 |
---|---|
Getting Start Tensorflow (0) | 2018.04.25 |