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 이성윤

[개념] Tensor Ranks, Shapes, Type


TensorFlow 프로그램은 모든 데이터를 tensor 데이터 구조를 사용해서 표현한다. TensorFlow의 tensor는 n-차원 배열 또는 리스트라고 생각해도 된다. 하나의 tensor는 정적 타입과 동적 차원을 갖고 있다. 컴퓨테이션 그래프의 노드들은 오직 tensor만을 전달 할 수 있다.


Rank


TensorFlow 시스템에서, tensor는 rank라는 차원 단위로 표현된다. Tensor rank는 행렬의 rank와 다르다. Tensor rank(order, degree, -n_dimension 으로도 언급됨)는 tensor의 차원수다. 예를 들어, 아래 tensor(Python 리스트로 정의)의 rank는 2다.

t = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]


rank 2인 tensor는 행렬, rank 1인 tensor는 벡터로 생각할 수 있다. rank 2인 tensor는 t[i, j] 형식으로 원소에 접근할 수 있다. rank 3인 tensor는 t[i, j, k] 형식으로 원소를 지정할 수 있다.


RankMath entityPython example
0Scalar (magnitude only)s = 483
1Vector (magnitude and direction)v = [1.1, 2.2, 3.3]
2Matrix (table of numbers)m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
33-Tensor (cube of numbers)t = [[[2], [4], [6]], [[8], [10], [12]], [[14], [16], [18]]]
nn-Tensor (you get the idea)....


출처: Tensor Ranks, Shapes, Type


Tensorflow Rank 결과

In [1]: import tensorflow as tf

In [2]: const_s_0 = tf.constant(1)

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

In [4]: const_v_1_2 = tf.constant([1, 2, 3])

In [5]: const_m_2_1 = tf.constant([[1, 2, 3], [4, 5, 6]])

In [6]: const_m_2_2 = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

In [7]: const_n_3_1 = tf.constant([[[2], [4]], [[8], [10]], [[14], [16]]]

   ...: )

In [8]: const_n_3_2 = tf.constant([[[2], [4], [6]], [[8], [10], [12]], [[

   ...: 14], [16], [18]]])

In [9]:     sess = tf.InteractiveSession()
In [10]: sess.run(tf.rank(const_s_0))
Out[10]: 0
In [11]: sess.run(tf.rank(const_v_1_1))
Out[11]: 1
In [12]: sess.run(tf.rank(const_v_1_2))
Out[12]: 1
In [13]: sess.run(tf.rank(const_m_2_1))
Out[13]: 2
In [14]: sess.run(tf.rank(const_m_2_2))
Out[14]: 2
In [15]: sess.run(tf.rank(const_n_3_1))
Out[15]: 3
In [16]: sess.run(tf.rank(const_n_3_2))
Out[16]: 3


Shape


TensorFlow 문서는 tensor 차원을 표현할 때 세 가지 기호를 사용한다. rank, shape, 차원수. 아래 표는 그 세 가지의 관계를 보여준다:


RankShapeDimension numberExample
0[]0-DA 0-D tensor. A scalar.
1[D0]1-DA 1-D tensor with shape [5].
2[D0, D1]2-DA 2-D tensor with shape [3, 4].
3[D0, D1, D2]3-DA 3-D tensor with shape [1, 4, 3].
n[D0, D1, ... Dn-1]n-DA tensor with shape [D0, D1, ... Dn-1].

Shape는 Python 리스트 / 정수형 튜플 또는 TensorShape class로 표현 할 수 있다. 


출처: Tensor Ranks, Shapes, Type


Tensorflow Shape 결과

In [1]: import tensorflow as tf

In [2]: const_s_0 = tf.constant(1)

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

In [4]: const_v_1_2 = tf.constant([1, 2, 3])

In [5]: const_m_2_1 = tf.constant([[1, 2, 3], [4, 5, 6]])

In [6]: const_m_2_2 = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

In [7]: const_n_3_1 = tf.constant([[[2], [4]], [[8], [10]], [[14], [16]]]

   ...: )

In [8]: const_n_3_2 = tf.constant([[[2], [4], [6]], [[8], [10], [12]], [[

   ...: 14], [16], [18]]])

In [9]:     sess = tf.InteractiveSession()
In [10]: sess.run(tf.shape(const_s_0))
Out[10]: array([], dtype=int32)
In [11]: sess.run(tf.shape(const_v_1_1))
Out[11]: array([2], dtype=int32)
In [12]: sess.run(tf.shape(const_v_1_2))
Out[12]: array([3], dtype=int32)
In [13]: sess.run(tf.shape(const_m_2_1))
Out[13]: array([2, 3], dtype=int32)
In [14]: sess.run(tf.shape(const_m_2_2))
Out[14]: array([3, 3], dtype=int32)
In [15]: sess.run(tf.shape(const_n_3_1))
Out[15]: array([3, 2, 1], dtype=int32)
In [16]: sess.run(tf.shape(const_n_3_2))
Out[16]: array([3, 3, 1], dtype=int32)


Data types


Tensor는 차원 말고도 데이터 타입도 갖는다. 아래의 데이터 타입을 tensor에 지정할 수 있다.


Data typePython typeDescription
DT_FLOATtf.float3232 비트 부동 소수.
DT_DOUBLEtf.float6464 비트 부동 소수.
DT_INT8tf.int88 비트 부호 있는 정수.
DT_INT16tf.int1616 비트 부호 있는 정수.
DT_INT32tf.int3232 비트 부호 있는 정수.
DT_INT64tf.int6464 비트 부호 있는 정수.
DT_UINT8tf.uint88 비트 부호 없는 정수.
DT_STRINGtf.string가변 길이 바이트 배열. Tensor의 각 원소는 바이트 배열.
DT_BOOLtf.bool불리언.
DT_COMPLEX64tf.complex642개의 32 비트 부동 소수로 만든 복소수 : 실수부 + 허수부
DT_COMPLEX128tf.complex1282개의 64 비트 부동 소수로 만든 복소수 : 실수부 + 허수부
DT_QINT8tf.qint88 비트 부호 있는 정수로 quantized Ops에서 사용.
DT_QINT32tf.qint3232 비트 부호 있는 정수로 quantized Ops에서 사용.
DT_QUINT8tf.quint88 비트 부호 없는 정수로 quantized Ops에서 사용.


출처: Tensor Ranks, Shapes, Type


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

Posted by 이성윤

[개념] Tensorflow 자료형

[상수(constants), 변수(Variable), 플레이스 홀더(placeholder)]


이것 저것 Tensorflow를 경험하고 기본으로 돌아오게 되었다.  검색을 통해 얻은 고마운 학습 자료들을 기반으로 정리해보고자 한다. 아래는 이글을 쓰기 위해 공부한 자료들이다.

Chanwoo Jacob Lee님의 Tensorflow 자료형

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

텐서플로우 첫걸음(Special notes-TF의 텐서와 상수, 변수, 플레이스홀더)


정의를 내리기엔 아직 실력이 부족하오니, 텐서플로우 한글 번역본(기본 사용법)의 힘을 빌린다.


기본 사용법(Basic Usage)


TensorFlow를 사용하기 위해 먼저 TensorFlow가 어떻게 동작하는지를 이해해 봅시다.

  • 연산은 graph로 표현합니다.(역자 주: graph는 점과 선, 업계 용어로는 노드와 엣지로 이뤄진 수학적인 구조를 의미합니다.)
  • graph는 Session내에서 실행됩니다.
  • 데이터는 tensor로 표현합니다.
  • 변수(Variable)는 (역자 주: 여러 graph들이 작동할 때도) 그 상태를 유지합니다.
  • 작업(operation 혹은 op)에서 데이터를 입출력 할 때 feed와 fetch를 사용할 수 있습니다.

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



graph 만들기(Building the graph)


graph를 만드는 것은 상수(constant)같이 아무 입력값이 필요없는 작업(op)을 정의하는 것에서부터 시작합니다. 이 op을 연산이 필요한 다른 op들에게 입력값으로 제공하는 것입니다.

+

파이썬 라이브러리의 작업 생성 함수(op constructor)는 만들어진 작업(op)들의 결과값을 반환합니다. 반환된 작업들의 결과값은 다른 작업(op)을 생성할 때 함수의 입력값으로 이용할 수 있습니다.

+

파이썬 라이브러리에는 작업 생성 함수로 노드를 추가할 수 있는 default graph라는 것이 있습니다. default graph는 다양하게 이용하기 좋습니다. Graph class 문서에서 여러 그래프를 명시적으로 관리하는 방법을 알 수 있습니다.


import tensorflow as tf

matrix1 = tf.constant([[3., 3.]])

matrix2 = tf.constant([[2.],[2.]])

product = tf.matmul(matrix1, matrix2)


default graph에는 이제 3개의 노드가 있습니다. 2개는 상수(constant) 작업(op)이고 하나는 행렬곱(matmul) 작업(op)이죠. 그런데 사실 행렬을 곱해서 결과값을 얻으려면 Session에다 graph를 실행해야 합니다.


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


Tensorflow로 뭔가를 작성 한다는 것은 그래프를 생성한다는 것이다. 연산 방식을 전부 그래프로 표현 할 수 있다. Tensorflow는 기본적으로 돌아갈때는 python 레벨에서는 연산을 허용하지 않는다. 


In [1]: import tensorflow as tf

In [2]: ph = tf.placeholder(tf.float32, shape=[3, 1])

In [3]: var = tf.Variable([1, 2, 3, 4, 5], dtype=tf.float32)

In [4]: const = tf.constant([10, 20, 30, 40, 50], dtype=tf.float32)

In [5]: print(ph)

Tensor("Placeholder:0", shape=(3, 1), dtype=float32)

In [6]: print(var)

<tf.Variable 'Variable:0' shape=(5,) dtype=float32_ref>

In [7]: print(const)

Tensor("Const:0", shape=(5,), dtype=float32)

메타 정보만 확인 시켜주고, 실제 값을 보여주지 않음을 볼 수 있다.


Tensorflow는 아래와 같은 수식을 갖는 모든 연산을 그래프로 정의하게 된다.

2(5 + 4) + 3(1 + 2) = ?




session에서 graph 실행하기(Launching the graph in a session)


graph를 구성하고 나면 Session 오브젝트를 만들어서 graph를 실행할 수 있습니다. op 생성함수에서 다른 graph를 지정해줄 때까지는 default graph가 Session에서 실행됩니다. 관련 내용은 Session class에서 확인할 수 있습니다.


sess = tf.Session()

result = sess.run(product)

print(result)

sess.close()



연산에 쓰인 시스템 자원을 돌려보내려면 session을 닫아야 합니다. 시스템 자원을 더 쉽게 관리하려면 with 구문을 쓰면 됩니다. 각 Session에 컨텍스트 매니저(역자 주: 파이썬의 요소 중 하나로 주로 'with' 구문에서 쓰임)가 있어서 'with' 구문 블락의 끝에서 자동으로 'close()'가 호출됩니다.

with tf.Session() as sess:

  result = sess.run([product])

  print(result)


TensorFlow의 구현 코드(TensorFlow implementation)를 통해 graph에 정의된 내용이 실행가능한 작업들(operation)로 변환되고 CPU나 GPU같이 이용가능한 연산 자원들에 뿌려집니다. 코드로 어느 CPU 혹은 GPU를 사용할 지 명시적으로 지정할 필요는 없습니다. 작업을 가능한 한 많이 처리하기 위해 TensorFlow는 (컴퓨터가 GPU를 가지고 있다면) 첫 번째 GPU를 이용하니까요.

... 생략

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


Tensorflow에서는 연산을 수행하는 방식이 따로 있다.

모든 연산을 그래프로 그리고 연산을 수행하도록 Run을 시키게 되면, 역행 연산을 수행하게 되고 input까지 수행하게 된다. 그리고 나서 run에 대한 리턴을 값을 돌려준다. 이렇게 그래프가 돌아가는 것을 텐서플로우에서는 세션이라고 부르며, 하나의 디바이스(CPU,GPU)에 올라가게 된다. 



세션은 그래프를 디바이스에 올려주는 역할을 한다. 세션은 IDE상에 존재 할 수 없다는 것은 다음과 같다.

Tensorflow에서는 파이썬 레벨, C레벨, Device 레벨 이 있다. 파이썬에서는 그래프를 생성하여 Device로 세션을 임베딩을 시키고 실제 연산은 C코드(펌웨어 레벨)에서 수행하게 된다.(C에서 연산을 수행한다고 보면 된다.)



Tensors


TensorFlow 프로그램은 모든 데이터를 tensor 데이터 구조로 나타냅니다. 연산 graph에 있는 작업들(op) 간에는 tensor만 주고받을 수 있기 때문입니다. TensorFlow의 tensor를 n 차원의 배열이나 리스트라고 봐도 좋습니다. tensor는 정적인 타입(static type), 차원(rank 역자 주: 예를 들어 1차원, 2차원하는 차원), 형태(shape, 역자 주: 예를 들어 2차원이면 m x n) 값을 가집니다. TensorFlow가 어떻게 이 개념들을 다루는지 알고 싶으시면 Rank, Shape, and Type을 참조하시기 바랍니다.


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


상수(Constant)

참고 :  Tensor 를 인자로 받는 함수들은  tf.convert_to_tensor 의 인자로 들어갈 수 있는 값들 또한 받을 수 있습니다.


상수값 텐서

※ TensorFlow는 상수를 생성할 수 있는 몇가지 연산을 제공합니다.

tf.constant(value, dtype=None, shape=None, name='Const')

상수 텐서를 생성합니다.

+

결과값 텐서는 value인자와 (선택적인) shape에 의해 결정됨으로써 dtype타입의 값으로 채워집니다. (아래 예시를 보세요.)

+

인자 value는 상수 또는 dtype타입을 가진 값들의 리스트가 될 수 있습니다. 만약 value가 리스트라면, 리스트의 길이는 shape인자에 의해 나올 수 있는 원소들의 갯수와 같거나 작아야 합니다. 리스트의 길이가 shape에 의해 정해지는 원소들의 갯수보다 적을 경우, 리스트의 마지막 원소가 나머지 엔트리를 채우는데 사용됩니다.

+

shape인자는 선택사항입니다. 만약 이 인자가 존재할 경우, 이는 결과값 텐서의 차원을 결정합니다. 그 외에는, value의 shape을 그대로 사용합니다.

+

만약 dtype인자가 결정되지 않을 경우에는, value로부터 타입을 추론하여 사용합니다.

+

예시:

# Constant 1-D Tensor populated with value list.

 tensor = tf.constant([1, 2, 3, 4, 5, 6, 7]) => [1 2 3 4 5 6 7]


 # Constant 2-D tensor populated with scalar value -1.

 tensor = tf.constant(-1.0, shape=[2, 3]) => [[-1. -1. -1.]

                                              [-1. -1. -1.]]

인자:
  • value: 반환 타입 dtype의 상수값 (또는 리스트).
  • dtype: 결과값 텐서 원소들의 타입.
  • shape: 결과값 텐서의 차원 (선택사항).
  • name: 텐서의 명칭 (선택사항).
반환값:

상수 Tensor.


출처: 텐서플로우 한글 번역본(상수, 시퀀스, 그리고 난수)


Constant는 변하지 않은 수를 말하며, 메소드이다. Constant는 자기 자신이 그래프가 되는 특징이 있다.


In [1]: import tensorflow as tf

In [2]: const = tf.constant([10, 20, 30, 40, 50], dtype=tf.float32)

In [3]: print(const)

Tensor("Const:0", shape=(5,), dtype=float32)

In [4]: sess = tf.Session()

2018-01-10 17:25:38.269961: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

2018-01-10 17:25:38.410758: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:892] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2018-01-10 17:25:38.411252: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: 

name: Graphics Device major: 6 minor: 1 memoryClockRate(GHz): 1.582

pciBusID: 0000:01:00.0

totalMemory: 11.90GiB freeMemory: 11.75GiB

2018-01-10 17:25:38.411289: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Graphics Device, pci bus id: 0000:01:00.0, compute capability: 6.1)

In [5]: result = sess.run(const)

In [6]: print(result)

[ 10.  20.  30.  40.  50.]

In [7]: sess.close()


Tensorflow 상수를 a, b, c 생성하여 d = a * b + c 연산을 그래프로 그리고 세션을 생성하여 그래프를 기반으로 연산을 수행한다. 세션을 수행(Run)한 결과 값을 돌려 받아 출력하게 된다.


In [1]: import tensorflow as tf

In [2]: a = tf.constant([5])

In [3]: b = tf.constant([10])

In [4]: c = tf.constant([2])

In [5]: d = a * b + c

In [6]: sess = tf.Session()

2018-01-10 17:30:00.320623: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

2018-01-10 17:30:00.483778: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:892] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2018-01-10 17:30:00.484247: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: 

name: Graphics Device major: 6 minor: 1 memoryClockRate(GHz): 1.582

pciBusID: 0000:01:00.0

totalMemory: 11.90GiB freeMemory: 11.75GiB

2018-01-10 17:30:00.484277: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Graphics Device, pci bus id: 0000:01:00.0, compute capability: 6.1)

In [7]: result = sess.run(d)

In [8]: print(result)

[52]

In [9]: sess.close()


변수(Variable)


변수: 생성, 초기화, 저장, 복구


모델을 학습 시킬 때, 매개 변수(parameter) 업데이트와 유지를 위해 변수(Variables)를 사용합니다. 변수는 텐서를 포함하는 인-메모리 버퍼입니다. 변수는 반드시 명시적으로 초기화해야 합니다. 그리고 학습 중 혹은 학습 후에 디스크에 저장할 수 있습니다. 저장된 값들을 모델 실행이나 분석을 위해 나중에 복원할 수도 있습니다.

+

이 문서는 다음 TensorFlow 클래스를 참조합니다. 링크를 따라가 API에 대한 자세한 설명이 있는 문서를 살펴보세요.

+

출처: 텐서플로우 한글번역본(변수: 생성, 초기화, 저장, 복구)



변수: 생성


변수(Variable) 를 생성할 때 Variable() 생성자의 초기값으로 Tensor 를 전달받게 됩니다. TensorFlow는 상수(constants) 또는 임의(random)의 값 으로 초기화 하는 다양한 명령어(op)를 제공합니다.

+

이 모든 명령어는 Tensor 들의 형태(shape)을 지정해줘야 합니다. 이 형태가 자동적으로 변수(Variable)의 형태가 됩니다. 변수는 대부분 고정된 형태를 가지지만 TensorFlow에서는 변수의 형태를 수정하기 위한(reshape) 고급 매커니즘도 제공합니다.


# 두 변수를 생성.

weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),

                      name="weights")

biases = tf.Variable(tf.zeros([200]), name="biases")

tf.Variable()호출은 그래프에 여러 오퍼레이션(op)을 추가합니다:

+

  • variable 오퍼레이션은 그 변수의 값을 가지고 있습니다.
  • tf.assign 오퍼레이션을 이용해서 변수의 초기값을 설정할 수 있습니다.
  • 예제에서 편차(bias)를 설정할 때 쓰이는 zeros 오퍼레이션같이 초기값을 설정하는 오퍼레이션도 그래프에 추가됩니다.

tf.Variable()에서 반환되는 값은 Python 클래스의 인스턴스인 tf.Variable 입니다.

+

출처텐서플로우 한글번역본(변수: 생성, 초기화, 저장, 복구)


Variable은 객체이며, Weight를 저장할 때 주로 쓴다.(weight matrix) Variable도 그래프를 만든다.


In [1]: import tensorflow as tf

In [2]: var1 = tf.Variable([5])

In [3]: var2 = tf.Variable([3])

In [4]: var3 = tf.Variable([2])

In [5]: var4 = var1 * var2 + var3

In [6]: print(var4)

Tensor("add:0", shape=(1,), dtype=int32)


변수: 초기화


변수 초기화는 모델의 다른 연산을 실행하기 전에 반드시 명시적으로 실행해야 합니다. 가장 쉬운 방법은 모든 변수를 초기화 하는 연산을 모델 사용 전에 실행하는 것입니다.

+

다른 방법으로는 체크포인트 파일에서 변수 값을 복원할 수 있습니다. 다음 챕터에서 다룰 것입니다.

+

변수 초기화를 위한 작업(op)을 추가하기 위해 tf.global_variables_initializer()를 사용해봅시다. 모델을 모두 만들고 세션에 올린 후 이 작업을 실행할 수 있습니다.

# 두 변수를 생성
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),
                      name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")
...
# 변수 초기화 오퍼레이션을 초기화
init_op = tf.global_variables_initializer()

# 나중에 모델을 실행할때
with tf.Session() as sess:
  # 초기화 오퍼레이션을 실행
  sess.run(init_op)
  ...
  # 모델 사용
  ...

출처텐서플로우 한글번역본(변수: 생성, 초기화, 저장, 복구)


Variable은 weight 파라미터를 담아 놓는 공간이며, weight는 언제나 초기화를 해줘야 한다. Variable은 반드시 초기화가 필요한 텐서이다. 그렇지 않으면 오류가 발생한다.


In [1]: import tensorflow as tf

In [2]: var1 = tf.Variable([5])

In [3]: var2 = tf.Variable([3])

In [4]: var3 = tf.Variable([2])

In [5]: var4 = var1 * var2 + var3

In [6]: sess = tf.Session()

2018-01-10 17:35:56.018639: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

2018-01-10 17:35:56.172663: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:892] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2018-01-10 17:35:56.173178: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: 

name: Graphics Device major: 6 minor: 1 memoryClockRate(GHz): 1.582

pciBusID: 0000:01:00.0

totalMemory: 11.90GiB freeMemory: 11.75GiB

2018-01-10 17:35:56.173302: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Graphics Device, pci bus id: 0000:01:00.0, compute capability: 6.1)

In [7]: result = sess.run(var4)

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value Variable_1
[[Node: Variable_1/read = Identity[T=DT_INT32, _class=["loc:@Variable_1"], _device="/job:localhost/replica:0/task:0/device:CPU:0"](Variable_1)]]


초기화를 시켜줘야만 활성화가 된다. Tf.initialize_all_variables()를 먼저 run을 해줘야 그래프로서 효력이 발생하게 된다. Variable도 그래프를 만든다.


In [1]: import tensorflow as tf

In [2]: var1 = tf.Variable([5])

In [3]: var2 = tf.Variable([3])

In [4]: var3 = tf.Variable([2])

In [5]: var4 = var1 * var2 + var3

In [6]: sess = tf.Session()

2018-01-10 17:43:15.148039: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

2018-01-10 17:43:15.289761: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:892] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2018-01-10 17:43:15.290229: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: 

name: Graphics Device major: 6 minor: 1 memoryClockRate(GHz): 1.582

pciBusID: 0000:01:00.0

totalMemory: 11.90GiB freeMemory: 11.75GiB

2018-01-10 17:43:15.290261: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Graphics Device, pci bus id: 0000:01:00.0, compute capability: 6.1)

In [7]: init = tf.initialize_all_variables()

WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/python/util/tf_should_use.py:107: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02.

Instructions for updating:

Use `tf.global_variables_initializer` instead.

In [8]: sess.run(init)

In [9]: result = sess.run(var4)

In [10]: print(result)

[17]

In [11]: sess.close()


다른 변수값을 참조하여 초기화 하기


변수를 초기화할 때 다른 변수의 초기값을 참조해야 하는 경우가 있습니다. tf.global_variables_initializer() 연산으로 모든 변수를 초기화 해야 하는 경우에는 조심해야 합니다.

+

다른 변수의 값을 이용해서 새로운 변수를 초기화할 때는 다른 변수의 initialized_value() 속성을 사용할 수 있습니다. 어떤 변수의 초기값을 바로 새로운 변수의 초기값으로 사용할 수도 있고 새로운 변수값을 위한 계산용으로 쓸 수도 있습니다.

# 랜덤 값으로 새로운 변수 초기화
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),
                      name="weights")
# weights와 같은 값으로 다른 변수 초기화
w2 = tf.Variable(weights.initialized_value(), name="w2")
# weights의 2배 값으로 다른 변수 초기화
w_twice = tf.Variable(weights.initialized_value() * 2.0, name="w_twice")

출처텐서플로우 한글번역본(변수: 생성, 초기화, 저장, 복구)


Placeholder

플레이스홀더는 Placeholder 연산 노드를 가리키는 텐서이며 텐서플로우에서 그래프를 실행할 때 사용자가 데이터를 주입할 수 있는 통로입니다.


Feeds


위의 예제에서 살펴본 graph에서 tensor들은 상수(Constant)변수(Variable)로 저장되었습니다. TensorFlow에서는 graph의 연산에게 직접 tensor 값을 줄 수 있는 'feed 메커니즘'도 제공합니다.

+

feed 값은 일시적으로 연산의 출력값을 입력한 tensor 값으로 대체합니다. feed 데이터는 run()으로 전달되어서 run()의 변수로만 사용됩니다. 가장 일반적인 사용방법은 tf.placeholder()를 사용해서 특정 작업(op)을 "feed" 작업으로 지정해 주는 것입니다.

input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = input1 * input2

with tf.Session() as sess:
  print(sess.run([output], feed_dict={input1:[7.], input2:[2.]}))

# output:
# [array([ 14.], dtype=float32)]


만약 feed 를 제대로 제공하지 않으면 placeholder() 연산은 에러를 출력할 것입니다. feed를 이용하는 다른 예시는 MNIST fully-connected feed tutorial(source code)를 참조하시기 바랍니다.


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


Placeholder는 그래프를 생성하지 않고, 플레이스홀더는 텐서와 데이터를 매핑 시키는 역할을 한다.


In [1]: import tensorflow as tf

In [2]: value1 = 5

In [3]: value2 = 3

In [4]: value3 = 2

In [5]: ph1 = tf.placeholder(tf.float32)

In [6]: ph2 = tf.placeholder(tf.float32)

In [7]: ph3 = tf.placeholder(tf.float32)

In [8]: ph4 = ph1 * ph2 + ph3

In [9]: result_value = ph1 * ph2 + ph3

In [10]: feed_dict = {ph1: value1, ph2: value2, ph3: value3}

In [11]: sess = tf.Session()

2018-01-10 17:46:27.078009: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

2018-01-10 17:46:27.219116: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:892] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2018-01-10 17:46:27.219590: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: 

name: Graphics Device major: 6 minor: 1 memoryClockRate(GHz): 1.582

pciBusID: 0000:01:00.0

totalMemory: 11.90GiB freeMemory: 11.75GiB

2018-01-10 17:46:27.219696: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1120] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: Graphics Device, pci bus id: 0000:01:00.0, compute capability: 6.1)

In [12]: result = sess.run(result_value, feed_dict=feed_dict)

In [13]: print(result)

17.0

In [14]: sess.close()


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

Posted by 이성윤

1. Tensorflow 기본 수학 함수

참조: Tensorflow 수학 함수 API 문서

 

함수

설명

tf.add

덧셈

tf.subtract

뺄셈

tf.multiply

곱셈

tf.div

나눗셈의 몫(Python 2 스타일)

tf.truediv

나눗셈의 몫(Python 3 스타일)

tf.mod

나눗셈의 나머지

tf.abs

절대값을 리턴합니다.

tf.negative

음수를 리턴합니다.

tf.sign

부호를 리턴합니다.(역주: 음수는 -1, 양수는 1, 0 일땐 0을 리턴합니다)

tf.reciprocal

역수를 리턴합니다.(역주: 3의 역수는 1/3 입니다)

tf.square

제곱을 계산합니다.

tf.round

반올림 값을 리턴합니다.

tf.sqrt

제곱근을 계산합니다.

tf.pow

거듭제곱 값을 계산합니다.

tf.exp

지수 값을 계산합니다.

tf.log

로그 값을 계산합니다.

tf.maximum

최대값을 리턴합니다.

tf.minimum

최소값을 리턴합니다.

tf.cos

코사인 함수 값을 계산합니다.

tf.sin

사인 함수 값을 계산합니다.

 

2. Tensorflow 기본 행렬 함수

참조: Tensorflow 행렬 함수 API 문서

 

함수

설명

tf.diag

대각행렬을 리턴합니다.

tf.transpose

전치행렬을 리턴합니다.

tf.matmul

텐서를 행렬곱셈하여 결과 텐서를 리턴합니다.

tf.matrix_determinant

정방행렬의 행렬식 값을 리턴합니다.

tf.matrix_inverse

정방행렬의 역행렬을 리턴합니다.

 

3. Tensorflow 중요한 연산(커널)

참조: http://download.tensorflow.org/paper/whitepaper2015.pdf

 

연산 카테고리

연산 예

Maths

Add. Sub, Mul, Div, Exp, Log, Greater, Less ,Equal

Array

Concat, Slice, Split, Constant, Rank, Shape, Shuffle

Matrix

MatMul, MatrixInverse, MatrixDeterminant

Neuronal Network

SoftMax, Sigmoid, ReLU, Convolution2D, MaxPool

Checkpointing

Save, Restore

Queues and syncronizations

Enqueue, Dequeue, MutexAcquire, MutexRelease

Flow control

Merge, Switch, Enter, Leave, NextIteration

 

 

Posted by 이성윤

tensorflow 에서 제공하는 Install 가이드를(https://www.tensorflow.org/install/install_linux) 통해서 설치해 보았다.


Determine how to install TensorFlow


Docker completely isolates the TensorFlow installation from pre-existing packages on your machine. The Docker container contains TensorFlow and all its dependencies. Note that the Docker image can be quite large (hundreds of MBs). You might choose the Docker installation if you are incorporating TensorFlow into a larger application architecture that already uses Docker.


Installing with Docker

Take the following steps to install TensorFlow through Docker:

  1. Install Docker on your machine as described in the Docker documentation.
  2. Optionally, create a Linux group called docker to allow launching containers without sudo as described in the Docker documentation. (If you don't do this step, you'll have to use sudo each time you invoke Docker.)
  3. To install a version of TensorFlow that supports GPUs, you must first install nvidia-docker, which is stored in github.
  4. Launch a Docker container that contains one of the TensorFlow binary images.

The remainder of this section explains how to launch a Docker container.


Docker를 통한 GPU 버전을 설치하기전에 nvidia-docker를 설치해줘야 한다.

현재 설치 할 시스템의 OS가 CentOs7이라서  https://github.com/NVIDIA/nvidia-docker 에서  "CentOS/RHEL 7 x86_64"  가이드 된 대로 진행을 해보면 뭔가 적절하게 되지 않는다.


그래서 구글링을 하게 되었다. http://blog.exxactcorp.com/installing-using-docker-nv-docker-centos-7/ 이 블로거가 가이드한대로 설치하면 잘 설치가 된다.

Installing and getting DOCKER and NV-DOCKER running in CentOS 7 is a straight forward process:

# Assumes CentOS 7
# Assumes NVIDIA Driver is installed as per requirements ( < 340.29 )
# Install DOCKER
sudo curl -fsSL https://get.docker.com/ | sh
# Start DOCKER
sudo systemctl start docker
# Add dockeruser, usermod change
sudo adduser dockeruser
usermod -aG docker dockeruser
# Install NV-DOCKER
# GET NVIDIA-DOCKER
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker-1.0.1-1.x86_64.rpm
# INSTALL
sudo rpm -i /tmp/nvidia-docker*.rpm
# Start NV-DOCKER Service
systemctl start nvidia-docker


그럼 이제 nvidia-docker 가 잘 설치가 되었다.


GPU support

Prior to installing TensorFlow with GPU support, ensure that your system meets all NVIDIA software requirements. To launch a Docker container with NVidia GPU support, enter a command of the following format:


$ nvidia-docker run -it -p hostPort:containerPort TensorFlowGPUImage

where:

  • -p hostPort:containerPort is optional. If you plan to run TensorFlow programs from the shell, omit this option. If you plan to run TensorFlow programs as Jupyter notebooks, set both hostPort and containerPort to 8888.
  • TensorFlowGPUImage specifies the Docker container. You must specify one of the following values:
    • gcr.io/tensorflow/tensorflow:latest-gpu, which is the latest TensorFlow GPU binary image.
    • gcr.io/tensorflow/tensorflow:latest-devel-gpu, which is the latest TensorFlow GPU Binary image plus source code.
    • gcr.io/tensorflow/tensorflow:version-gpu, which is the specified version (for example, 0.12.1) of the TensorFlow GPU binary image.
    • gcr.io/tensorflow/tensorflow:version-devel-gpu, which is the specified version (for example, 0.12.1) of the TensorFlow GPU binary image plus source code.

We recommend installing one of the latest versions. For example, the following command launches the latest TensorFlow GPU binary image in a Docker container from which you can run TensorFlow programs in a shell:

$ nvidia-docker run -it gcr.io/tensorflow/tensorflow:latest-gpu bash

The following command also launches the latest TensorFlow GPU binary image in a Docker container. In this Docker container, you can run TensorFlow programs in a Jupyter notebook:

$ nvidia-docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow:latest-gpu

The following command installs an older TensorFlow version (0.12.1):

$ nvidia-docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow:0.12.1-gpu

Docker will download the TensorFlow binary image the first time you launch it. For more details see the TensorFlow docker readme.


위에 내용을 참조하여 내가 실제로 수행한 명령어들은 와래와 같다.


$ sudo nvidia-docker run -d -p 8888:8888 -p 8889:8889 -p 6901:6901 --name tensorflow_gpu gcr.io/tensorflow/tensorflow:latest-gpu

위의 명령어를 수행하면 tensorflow + cuda + notebook 이 설치된 빈 깡통 Ubuntu16.04 OS가 설치된다.

※ 여기에서 중요한점은 -p 는 포트포워딩할 포트인데 내가 사용할 서버의 포트를 어떻게 사용할 것인지를 충분히 고려하여야 한다는점이다. 현재까지는 docker는 런타임중에 포트를 추가할 수 없게 되어 있다. 포트를 추가 하려면 다양한 방법이 있겠지만

나와 같은 경우에는 현재 이미지를 commit 하여 저장한 상태에서 다시 포트를 추가하여 container를 만들었다.


$ sudo nvidia-docker exec -it tensorflow_gpu bash

이 명령을 수행하게 되면 내가 생성한 tensorflow_gpu bash 컨테이너에 접속할 수 있게 된다.


Validate your installation

Run a short TensorFlow program

Invoke python from your shell as follows:

$ python

Enter the following short program inside the python interactive shell:

Python
import tensorflow as tf
hello
= tf.constant('Hello, TensorFlow!')

sess
= tf.Session()
print(sess.run(hello))

If the system outputs the following, then you are ready to begin writing TensorFlow programs:

Hello, TensorFlow!

위에도 언급했지만, nvidia-docker를 이용하여 컨테이너를 생성하면 빈깡통 ubuntu가 설치된다.

그러므로 기본 유틸리티들을 설치해주어야 한다.


Ubuntu 설치 후 기본 도구 설치

http://cafe.naver.com/telcosn/562 글 이외의 설치 목록은 아래에 있다.

apt-getinstall net-tools

apt-get install tcpdump

apt-get install apt-utils

apt install-y  vim htop  iftop tree  openssh-server  lrzsz openvswitch-switch

sudo apt-get install git


Ubuntu 설치 후 데스크탑 설치

apt-get update
apt-get upgrade
apt-get install tasksel


 

 

 

 

2


참고: https://imitator.kr/Linux/1305


Ubuntu 설치 후 tightvncserver 설치

참고: http://cafe.naver.com/telcosn/437

명령어: vncserver :100 -rfbport 6901 -geometry 1920x1080


Ubuntu 설치 후 시간 동기화

sudo dpkg-reconfigure tzdata -> asia, seoul 선택

Posted by 이성윤

필요한 정보를 최대한 인용하여 작성할 생각이다.


아래 글은 블로그(http://bcho.tistory.com/1192) 에서 인용했다.


Tensorflow Object Detection API는, Tensorflow 를 이용하여 이미지를 인식할 수 있도록 개발된 모델로, 라이브러리 형태로 제공되며, 각기 다른 정확도와 속도를 가지고 있는 5개의 모델을 제공한다. 머신러닝이나 텐서플로우에 대한 개념이 거의 없더라도 라이브러리 형태로 손쉽게 사용할 수 있으며, 직접 사용자 데이타를 업로드해서 학습을 하여, 내 시나리오에 맞는 Object Detection System을 손쉽게 만들 수 있다.


Object Detection API를 설치하기 위해서는 텐서플로우 1.x 와 파이썬 2.7x 버전이 사전 설치되어 있어야 한다. 이 글에서는 파이썬 2.7.13과 텐서플로우 2.7.13 버전을 기준으로 하고, 맥에 설치하는 것을 기준으로 한다. 리눅스나 다른 플랫폼 설치는 원본 설치 문서 https://github.com/tensorflow/models/blob/master/object_detection/g3doc/installation.md 를 참고하기 바란다.


2017.6.15에 Google에서 Tensorflow로 구현된Object Detection코드를 공개 했다. 지원하는 모델은 아래와 같다.

  • In addition to our base Tensorflow detection model definitions, this release includes:

    • A selection of trainable detection models, including:
      • Single Shot Multibox Detector (SSD) with MobileNet,
      • SSD with Inception V2,
      • Region-Based Fully Convolutional Networks (R-FCN) with Resnet 101,
      • Faster RCNN with Resnet 101,
      • Faster RCNN with Inception Resnet v2
    • Frozen weights (trained on the COCO dataset) for each of the above models to be used for out-of-the-box inference purposes.
    • Jupyter notebook for performing out-of-the-box inference with one of our released models
    • Convenient local training scripts as well as distributed training and evaluation pipelines via Google Cloud.
    SSD, RCNN 등 object detection 및 segmentation 하는 유명한 모델들이 tensorflow 안으로 들어갔다.

파이썬 라이브러리 설치


Object Detection API를 사용하는데 필요한 라이브러리 입니다. 

  • Protobuf 2.6
  • Pillow 1.0
  • lxml
  • tf Slim (which is included in the "tensorflow/models" checkout)
  • Jupyter notebook
  • Matplotlib
  • Tensorflow

pip install pillow
pip install lxml
pip install matplotlib
sudo yum install tkinter
sudo yum install protobuf
sudo yum install protobuf-compiler

pip install jupyter


Object Detection API 다운로드 및 설치


Object Detection API 설치는 간단하게, 라이브러리를 다운 받으면 된다. 설치할 디렉토리로 들어가서 git clone 명령어를 통해서, 라이브러리를 다운로드 받자

% git clone https://github.com/tensorflow/models

Protocol Buffer 컴파일

다음 프로토콜 버퍼를 사용하기 위해서 protoc로 proto 파일을 컴파일 한데, Object Detection API를 설치한 디렉토리에서 models 디렉토리로 들어간 후에, 다음 명령어를 수행한다.

" 레포지토리가 최신화가 안되어서 소스 설치를 했다. "

# $ sudo pip install protobuf
# $ yum install protobuf-compiler

% git clone https://github.com/google/protobuf.git

$ ./autogen.sh

$ ./configure --prefix=/home/tensorflow/local/protoc

$ make

$ python setup.py build

$ python setup.py test

$ sudo python setup.py install

$ protoc

$ protoc --version

export LD_LIBRARY_PATH=../src/.libs

% protoc object_detection/protos/*.proto --python_out=.


Add Libraries to PYTHONPATH

When running locally, the tensorflow/models/research/ and slim directories should be appended to PYTHONPATH. This can be done by running the following from tensorflow/models/research/:

# From tensorflow/models/research/
% export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

vi ~/venvs/tensorflow/bin/activate

PATH="$VIRTUAL_ENV/bin:$PATH:/usr/local/cuda-8.0/bin:/home/tensorflow/sylee/src/OBJ_DETECTI
ON_DEMO/models/research:/home/tensorflow/sylee/src/OBJ_DETECTION_DEMO/models/research/slim"
export PATH
PYTHONPATH="/home/tensorflow/sylee/src/OBJ_DETECTION_DEMO/models/research:/home/tensorflow/
sylee/src/OBJ_DETECTION_DEMO/models/research/slim"
export PYTHONPATH


Note: This command needs to run from every new terminal you start. If you wish to avoid running this manually, you can add it as a new line to the end of your ~/.bashrc file.


Testing the Installation

You can test that you have correctly installed the Tensorflow Object Detection
API by running the following command:

% python object_detection/builders/model_builder_test.py



NVIDIA-DOCKER - Ubuntu 16.04 설치 가이드


Tensorflow Object Detection API depends on the following libraries:
•Protobuf 2.6
•Pillow 1.0
•lxml
•tf Slim (which is included in the "tensorflow/models/research/" checkout)
•Jupyter notebook
•Matplotlib
•Tensorflow


For detailed steps to install Tensorflow, follow the Tensorflow installation instructions. A

typical user can install Tensorflow using one of the following commands:

# For CPU
pip install tensorflow
# For GPU
pip install tensorflow-gpu


The remaining libraries can be installed on Ubuntu 16.04 using via apt-get:

sudo apt-get install protobuf-compiler python-pil python-lxml
sudo pip install jupyter
sudo pip install matplotlib

Alternatively, users can install dependencies using pip:

sudo pip install pillow
sudo pip install lxml
sudo pip install jupyter
sudo pip install matplotlib

sudo apt-get install python-tk


Object Detection API 다운로드 및 설치

Object Detection API 설치는 간단하게, 라이브러리를 다운 받으면 된다. 설치할 디렉토리로 들어가서

git clone 명령어를 통해서, 라이브러리를 다운로드 받자

$ git clone https://github.com/tensorflow/models


Protobuf Compilation

The Tensorflow Object Detection API uses Protobufs to configure model and training parameters.

Before the framework can be used, the Protobuf libraries must be compiled. This should be done

by running the following command from the tensorflow/models/research/ directory:

# From tensorflow/models/research/
$ protoc object_detection/protos/*.proto --python_out=.


Add Libraries to PYTHONPATH

When running locally, the tensorflow/models/research/ and slim directories should be appended to PYTHONPATH. This can be done by running the following from tensorflow/models/research/:

# From tensorflow/models/research/$ export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

''''

PATH="$PATH:/usr/local/cuda-8.0/bin:/home/tensorflow/sylee/src/OBJ_DETECTION/modd
els/research:/home/tensorflow/sylee/src/OBJ_DETECTION/models/research/slim"
export PATH
PYTHONPATH="/usr/local/cuda-8.0/bin:/home/tensorflow/sylee/src/OBJ_DETECTION/modd
els/research:/home/tensorflow/sylee/src/OBJ_DETECTION/models/research/slim"
export PYTHONPATH

''''


Install object_detection

 

 


마지막으로, models디렉토리 에서 다음 스크립트를 실행하여 object_dection 라이브러리를 설치 할 수 있다.

 

sudo python setup.py install


설치도중 이와 같은 에러가 날 경우 


python-setuptools 설치를 통해 해결 할 수 있다.

sudo apt-get install python-setuptools


Testing the Installation

You can test that you have correctly installed the Tensorflow Object Detection
API by running the following command:


$ python object_detection/builders/model_builder_test.py




※ 설치 할 때부터 하나하나 기록해가면서 했어야 하는데.. 그러지 못해서 역시나.. 순서나 이런게 헛갈린다.

나중에 다시 손을 보겠다.


공부한 내용을 그때그때 바로 기록하는 습관이 갖어지길 바라며..

Posted by 이성윤

영상 분석을 위한 서버 환경이 CentOs 가 설치되어 있다.


tensorflow.org는 기본적으로 우분투 환경에서 완벽하게 지원하고 있는것으로 보인다.

궁극적으로는 ubuntu로 가는것이 맞는것으로 보이지만, 일단 회사 정책(기조?)가 CentOs로 넘어가고 있는 분위기라서

CentOs의 개발환경이 필요해진 상황이다.

ubuntu Install: http://cafe.naver.com/telcosn/552


영상분석 서버의 스펙은 아래와 같다.

OS: CentOS Linux release 7.3.1611

CPU: 1x E5-1650 V4 (6 Core, 15M Cache, 3.6 GHz, 140W)

MEM: 8x DDR4 PC19200 32GB ECC-REG

HDD: 3x HDD 3.5인치 SATA3 2TB

SSD: 1x 512GB SSD

POWER: POWER 2000W

GPU: NVIDIA TITAN X


CentOs TensorFlow 설치 과정

※ 많은 사람들이 CentOs에서는 python의 virtualenv 환경으로 설치하기를 권장해서 virtualenv 환경에서 설치

참고: https://www.tensorflow.org/install/install_linux 의 Installing with virtualenv


* GPU를 사용하고 있기 때문에 GPU 환경으로 설치

1. Install base

# yum -y install gcc gcc-c++ atlas atlas-devel gcc-gfortran openssl-devel libffi-devel
2. Installing with virtualenv
Take the following steps to install TensorFlow with Virtualenv:

Install pip and virtualenv by issuing one of the following commands:

 

$ sudo yum install python-pip python-devel python-virtualenv # for Python 2.7
$ sudo yum install python3-pip python3-devel python-virtualenv # for Python 3.n

 

Create a virtualenv environment by issuing one of the following commands:

 

$ virtualenv --system-site-packages targetDirectory # for Python 2.7
$ virtualenv --system-site-packages -p python3 targetDirectory # for Python 3.n

 

where targetDirectory specifies the top of the virtualenv tree. Our instructions assume that targetDirectory is ~/tensorflow, but you may choose any directory.

Activate the virtualenv environment by issuing one of the following commands:

 

$ source ~/tensorflow/bin/activate # bash, sh, ksh, or zsh
$ source ~/tensorflow/bin/activate.csh  # csh or tcsh

 

The preceding source command should change your prompt to the following:

 

(tensorflow)$ 

 

Ensure pip ≥8.1 is installed:

 

$ easy_install -U pip

 

Issue one of the following commands to install TensorFlow in the active virtualenv environment:

 


(tensorflow)$ pip install --upgrade tensorflow      # for Python 2.7(tensorflow)
$ pip3 install --upgrade tensorflow     # for Python 3.n(tensorflow)
$ pip install --upgrade tensorflow-gpu  # for Python 2.7 and GPU(tensorflow)
$ pip3 install --upgrade tensorflow-gpu # for Python 3.n and GPU

 

If the preceding command succeeds, skip Step 6. If the preceding command fails, perform Step 6.

(Optional) If Step 5 failed (typically because you invoked a pip version lower than 8.1), install TensorFlow in the active virtualenv environment by issuing a command of the following format:

 

(tensorflow)$ pip install --upgrade tfBinaryURL   # Python 2.7
(tensorflow)$ pip3 install --upgrade tfBinaryURL  # Python 3.n 

 

where tfBinaryURL identifies the URL of the TensorFlow Python package. The appropriate value of tfBinaryURLdepends on the operating system, Python version, and GPU support. Find the appropriate value for tfBinaryURL for your system here. For example, if you are installing TensorFlow for Linux, Python 3.4, and CPU-only support, issue the following command to install TensorFlow in the active virtualenv environment:

 

(tensorflow)$ pip3 install --upgrade \https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.4.0-cp34-cp34m-linux_x86_64.whl

 

If you encounter installation problems, see Common Installation Problems.
3. Next Steps After installing TensorFlow, validate the installation.
Note that you must activate the virtualenv environment each time you use TensorFlow. 
If the virtualenv environment is not currently active, invoke one of the following commands:
$ source ~/tensorflow/bin/activate      # bash, sh, ksh, or zsh
$ source ~/tensorflow/bin/activate.csh  # csh or tcsh
그래픽카드 사용시, 환경변수에 쿠다 관련 실행경로를 추가 해주어야 한다.
vi ~/venvs/tensorflow/bin/activate
PATH="$VIRTUAL_ENV/bin:$PATH:/usr/local/cuda-8.0/bin"
export PATH
LD_LIBRARY_PATH="/usr/local/cuda-8.0/lib64"
export LD_LIBRARY_PATH

When the virtualenv environment is active, you may run TensorFlow programs from this shell.
Your prompt will become the following to indicate that your tensorflow environment is active:
(tensorflow)$ 
When you are done using TensorFlow, you may deactivate the environment by invoking the deactivate function as follows:
(tensorflow)$ deactivate 
The prompt will revert back to your default prompt (as defined by the PS1 environment variable).
Uninstalling TensorFlow
To uninstall TensorFlow, simply remove the tree you created. For example:
$ rm -r targetDirectory 
※ 나의 경우에는 pip install --upgrade mock 이 설치가 안되어서 설치해줌 또한 쿠다환경은 다른 분석도구를 사용하기 위해서 사전에 설치되어 있었음
Posted by 이성윤

텐서플로우를 설치한지는 좀 되었지만, 기록을 위해 적어본다.


먼저, TensorFlow를 CentOs에 설치하기 위해서는 뭔가 복잡하다고 느껴졌었는데, Unbuntu에 설치하니

너무 간단하게 설치가 완료 되었다.


TensorFlow 공식 사이트

https://www.tensorflow.org/install/install_linux#InstallingNativePip


OS: Ubuntu 16.04데스크탑 버전

python3 기반으로 설치하였다.


$ sudo apt-get install python-pip python-dev # for Python 2.7

$ sudo apt-get install python3-pip python3-dev # for Python 3.n


$ pip install tensorflow # Python 2.7; CPU support (no GPU support)

$ pip3 install tensorflow # Python 3.n; CPU support (no GPU support)


이게 끝이다.


추가로 Tensorflow 강의를 듣다 보니 필요한 유틸리티를 설치하였다.

pip3 install numpy
sudo apt-get install python3-matplotlib
sudo apt-get install python3-pandas
pip3 install ipython (이건 내가 편해서)

Posted by 이성윤