#!/usr/bin/env python3
Operations on a Computational Graph, Layering Nested Operations
placeholder에 넣을 데이터를 만들고, 상수를 곱해보겠습니다.
import tensorflow as tf
import numpy as np
from tensorflow.python.framework import ops
ops.reset_default_graph()
x_vals = np.array([1., 3., 5., 7., 9.])
x_data = tf.placeholder(tf.float32)
m_const = tf.constant(3.)
my_product = tf.multiply(x_data, m_const)
with tf.Session() as sess:
print('m_const.eval() =>{} \n'.format(m_const.eval()))
for x_val in x_vals:
x_data_1 = sess.run(x_data, feed_dict={x_data:x_val})
print('x_data_1 => {}'.format(x_data_1))
my_product_1 = sess.run(my_product, feed_dict={x_data:x_val})
print('my_product_1 => {}'.format(my_product_1))
print('--------\n')
# m_const.eval() =>3.0
# -------------------
# x_data_1 => 1.0
# my_product_1 => 3.0
# -------------------
# x_data_1 => 3.0
# my_product_1 => 9.0
# -------------------
# x_data_1 => 5.0
# my_product_1 => 15.0
# -------------------
# x_data_1 => 7.0
# my_product_1 => 21.0
# -------------------
# x_data_1 => 9.0
# my_product_1 => 27.0
# -------------------
Layering Nested Operations을 알아보겠습니다.
연산이 서로 이어지는 방식을 알아보기 위해 opeation graph에 multiple operation을 구성하겠습니다.
placeholder에 두 matrix를 곱한 후 덧셈을 하는 경우를 예로 들어보겠습니다.
def prinft(classtf):
init = tf.global_variables_initializer()
with tf.Session() as sess:
init.run()
print(classtf.eval())
ops.reset_default_graph()
# Create data to feed in
my_array = np.array([[1., 3., 5., 7., 9.],
[-2., 0., 2., 4., 6.],
[-6., -3., 0., 3., 6.]])
# Duplicate the array for having two inputs
x_vals = np.array([my_array, my_array + 1])
print(x_vals)
# array([[[ 1., 3., 5., 7., 9.],
# [-2., 0., 2., 4., 6.],
# [-6., -3., 0., 3., 6.]],
# [[ 2., 4., 6., 8., 10.],
# [-1., 1., 3., 5., 7.],
# [-5., -2., 1., 4., 7.]]])
# Declare the placeholder
x_data = tf.placeholder(tf.float32, shape=(3, 5))
# Declare constants for operations
m1 = tf.constant([[1.],[0.],[-1.],[2.],[4.]])
printf(m1)
# [[ 1.]
# [ 0.]
# [-1.]
# [ 2.]
# [ 4.]]
m2 = tf.constant([[2.]])
printf(m2)
# [[2.]]
a1 = tf.constant([[10.]])
printf(a1)
# [[10.]]
이제 matrix multiplication을 해보겠습니다.
A(3x5) * m1(5x1) = (3x1)이 만들어지고 나머지 연산은 상수곱과 덧셈이기 때문에 차원은 변하지 않습니다.
init = tf.global_variables_initializer()
with tf.Session() as sess:
init.run()
prod1 = tf.matmul(x_data, m1)
prod2 = tf.matmul(prod1, m2)
add1 = tf.add(prod2, a1)
for x_val in x_vals:
result = sess.run(add1, feed_dict={x_data: x_val})
print('result => \n{}\n'.format(result))
# result =>
# [[102.]
# [ 66.]
# [ 58.]]
# result =>
# [[114.]
# [ 78.]
# [ 70.]]
참고 자료:
[1]TensorFlow Machine Learning Cookbook, Nick McClure
[2]https://github.com/nfmcclure/tensorflow_cookbook