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

+ Recent posts