Tensorflow Interactive Session Utility


Tensorflow에서는 상수나 변수를 생성하여 그래프로 정의하고, 세션을 만들어 그래프로 정의된 연산을 수행한다.  그리고 그 연산의 결과를 돌려받는 과정을 거치게 된다.


Tensorflow에서 상수나, 변수 등을 값을 대입하여 생성한 후, 이때 상수나 변수를 출력하게 되면 메타 정보만 출력하게 되고 실제 값을 보여주지는 않는다. 실시간으로 변수나 상수의 값을 들여다보기 위해 Tensorflow의 Interactive Usage을 활용하여 Tensorflow 출력 API를 만들고자 한다.


인터렉티브한 이용법(Interactive Usage)


이 문서에 있는 파이썬 예제들은 Session을 실행시키고 Session.run() 메서드를 이용해서 graph의 작업들을 처리한다.


IPython같은 인터렉티브 파이썬 환경에서의 이용편의성을 위해InteractiveSession클래스와 Tensor.eval(),Operation.run() 메서드를 대신 이용할 수도 있다. session 내에서 변수를 계속 유지할 필요가 없기 때문이다.

# 인터렉티브 TensorFlow Session을 시작해봅시다.

# Enter an interactive TensorFlow Session.

import tensorflow as tf

sess = tf.InteractiveSession()


x = tf.Variable([1.0, 2.0])

a = tf.constant([3.0, 3.0])


# 초기화 op의 run() 메서드를 이용해서 'x'를 초기화합시다.

# Initialize 'x' using the run() method of its initializer op.

x.initializer.run()


# 'x'에서 'a'를 빼는 작업을 추가하고 실행시켜서 결과를 봅시다.

# Add an op to subtract 'a' from 'x'.  Run it and print the result

sub = tf.subtract(x, a)

print(sub.eval())

# ==> [-2. -1.]


# 실행을 마치면 Session을 닫읍시다.

# Close the Session when we're done.

sess.close()


출처: 텐서플로우 한글 번역본(기본 사용법)


class tf.InteractiveSession


쉘과 같은 인터랙티브 컨텍스트에서 사용하기 위한 TensorFlow Session

+

일반 Session과의 유일한 차이점은 InteractiveSession은 생성시 자기 자신을 기본 세션으로 설치한다는 것입니다. Tensor.eval()메서드와 Operation.run()메서드는 연산을 실행하기위해 그 세션을 사용할 것입니다.


이는 인터랙티브 쉘과 IPythonnotebooks에서 편리하며, 연산을 실행하기 위한 Session 객체를 명시적으로 전달하지 않아도됩니다.


예시:

sess = tf.InteractiveSession()

a = tf.constant(5.0)

b = tf.constant(6.0)

c = a * b

# 'sess'의 전달없이도 'c.eval()'를 실행할 수 있습니다.

print(c.eval())

sess.close()

일반 세션은 with문 안에서 생성될 경우 자기 자신을 기본 세션으로 설치합니다. 인터랙티브 프로그램이 아닌 경우의 일반적인 사용법은 다음 패턴을 따르는 것입니다.

a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b
with tf.Session():
  # 'c.eval()'을 여기에서도 사용할 수 있습니다.
  print(c.eval())


출처: InteractiveSession


tf.Tensor.eval(feed_dict=None, session=None)


Evaluates this tensor in a Session.


Calling this method will execute all preceding operations that produce the inputs needed for the operation that produces this tensor.


N.B. Before invoking Tensor.eval(), its graph must have been launched in a session, and either a default session must be available, or session must be specified explicitly.


Args:
  • feed_dict: A dictionary that maps Tensor objects to feed values. See Session.run() for a description of the valid feed values.
  • session: (Optional.) The Session to be used to evaluate this tensor. If none, the default session will be used.
Returns:

A numpy array corresponding to the value of this tensor.


출처: Tensor.eval()


tf.Operation.run(feed_dict=None, session=None)


Runs this operation in a Session.


Calling this method will execute all preceding operations that produce the inputs needed for this operation.


N.B. Before invoking Operation.run(), its graph must have been launched in a session, and either a default session must be available, or session must be specified explicitly.


Args:
  • feed_dict: A dictionary that maps Tensor objects to feed values. See Session.run() for a description of the valid feed values.
  • session: (Optional.) The Session to be used to run to this operation. If none, the default session will be used.


출처: Operation.run()


Tensorflow 상수, 변수 출력 함수

def tf_print_constant(const):

    sess = tf.InteractiveSession()

    print(const.eval())

    sess.close()


def tf_print_variable(var):

    sess = tf.InteractiveSession()

    var.initializer.run()

    print(var.eval())

    sess.close()


Tensorflow 상수, 변수 출력 결과

In [1]: import tensorflow as tf

In [2]: const1, const2 = tf.constant([1]), tf.constant([2, 3])

In [3]: tf_print_constant(const1)
[1]
In [4]: tf_print_constant(const2)
[2 3]
In [5]: var1, var2 = tf.Variable([4]), tf.Variable([5, 6])
In [6]: tf_print_variable(var1)
[4]
In [7]: tf_print_variable(var2)
[5 6]


Tensorflow 상수, 변수 조회 함수

def tf_get_const_value(const):

    sess = tf.InteractiveSession()

    ret_const = const.eval()

    sess.close()

    return ret_const


def tf_get_var_value(var):

    sess = tf.InteractiveSession()

    var.initializer.run()

    ret_var = var.eval()

    sess.close()

    return ret_var


Tensorflow 상수, 변수 조회 결과

In [2]: const1, const2 = tf.constant([1]), tf.constant([2, 3])
In [3]: tmp_const1 = tf_get_const_value(const1)
In [4]: tmp_const2 = tf_get_const_value(const2)
In [5]: print(const1)
Tensor("Const:0", shape=(1,), dtype=int32)
In [6]: print(tmp_const1)
[1]
In [7]: print(const2)
Tensor("Const_1:0", shape=(2,), dtype=int32)
In [8]: print(tmp_const2)
[2 3]
In [9]: var1, var2 = tf.Variable([4]), tf.Variable([5, 6])
In [10]: tmp_var1 = tf_get_var_value(var1)
In [11]: tmp_var2 = tf_get_var_value(var2)
In [12]: print(var1)
<tf.Variable 'Variable:0' shape=(1,) dtype=int32_ref>
In [13]: print(tmp_var1)
[4]
In [14]: print(var2)
<tf.Variable 'Variable_1:0' shape=(2,) dtype=int32_ref>
In [15]: print(tmp_var2)
[5 6]


이 포스팅은 머신러닝/딥러닝 오픈소스 Tensorflow 개발을 위한 선행학습으로 Tensorflow API Document의 Python API 대한 학습노트입니다.

Posted by 이성윤