#!/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

+ Recent posts