[진짜 처음 시작하는] Tensorflow (텐서플로우) 설치 및 기본 개념, 예제 실습하기





알파고가 나온 이후에 AI 열풍이라고 분 듯 네이버 IT 뉴스 기사 에도 생전 보이지 않던 기술로 AI 를 언급하고 있습니다. 

저도 개인적으로 AI 분야에 관련해서 궁금한 것고 꼭 배워보고 싶어서 블로그에 설치 방법과 예제 정도를 학습하면서 올려보려고 합니다. 


! 팁 ! 전체적으로 한 번 읽어 보시는게 좋을 것 같습니다.

설치하면서 생기는 시행착오들을 그대로 적으면서 포스팅 하고 있기 때문에 차례대로 하면 약간 더 걸릴 수 있습니다. 


순서 : 설치 및 hello 출력 -> 기본 설명 


https://www.tensorflow.org/get_started/os_setup

위의 랭크를 참조해서 설치 방법을 올리겠습니다. 




pip3 install tensorflow 

위와 같은 명령어를 통해서 tensorflow 를 설치해줍니다.





위와 같은 명령어가 제 컴퓨터에서는 동작하지 않더라구요 

sudo pip3 install tensorflow

를 입력해줍니다. 

=================   pip3  란 ? ==================================

pip3 는 파이썬 3 버전의 관련 프로그램 설치를 도와주는 명령어인데 

만약 pip 를 찾을 수 없다고 하면 기존에 파이썬을 설치하고  pip 를 설치해야합니다. 


$ sudo apt-get install python3.4

위와 같은 명령어로 파이썬 3 를 설치합니다. 


sudo apt-get install python-pip3

그 다음에 파이프를 설치해줍니다. ( 기존에 제가 설치했던 방식인데, 파이썬 설치의 경우 지금 포스팅 하면서 확인 한 것이 아니기 때문에

안되면 다른 글을 확인하시는게 좋을 것 같습니다. 

=====================================================================




위에서 설치한 과정대로 설치가 잘 되었습니다. 


텐서플로우 홈페이지에서  GPU support 를 받기 위해서 설치하라고 해서 일단 설치해보겠습니다. 

인공지능의 발전이 GPGPU 라는 그래픽카드의 병렬연산 덕분에 발전했다고 하던데요 

제가 테스트 하는 컴퓨터에는 그래픽카드는 없지만 설치는 하고 넘어가보겠습니다. 


For installing the version with GPU support, please use:

$ pip install tensorflow-gpu


설치가 잘 완료 되었습니다. 


>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42

위와 같은 예제가 있어서 직접 실행해보려고 테스트를 해보았습니다. 

저는 jupyter notebook 을 이용해서 python 을 이용하는데 ipython 에서 테스트 해도 똑같은 결과를 불러오더라구요.



위와 같은 명령어를 terminal 에 입력해줍니다. 

ipython
import tensorflow as tf 

import 하는 과정에서 오류가 발생했습니다.



위와 같은 오류가 발생했습니다.

오류코드 >> 
Error importing tensorflow.  Unless you are using bazel,
you should not try to import tensorflow from its source directory;
please exit the tensorflow source tree, and relaunch your python interpreter
from there.


문제점을 해결하기 위해 이곳 저곳 검색을 해보니 

GPU 를 사용하기 위해서는 The GPU version works best with Cuda Toolkit 8.0 and cuDNN v5.1. Other versions are supported (Cuda toolkit >= 7.0 and cuDNN >= v3) only when installing from sources. Please see Cuda installation for details. For Mac OS X, please see Setup GPU for Mac.

위와 같은 요건을 만족해야 한다고 합니다.




제 컴퓨터 같은 경우에는 그래픽카드가 달려있지 않는 모델이기 때문에  NVidia 관련된 용어를 보고 바로 생략해야 겠다는 생각이 들었습니다.

sudo pip3 uninstall tensorflow-gpu
sudo pip3 uninstall tensorflow
sudo pip3 install tensorflow

위와 같은 명령어를 통해서 다시 설치를 했습니다. 

아무래도 처음 하는거라 이런 과정을 거칠 수 밖에 없네요 ㅎ 



이번에는  import 가 잘 되고 명령어도 잘 입력됩니다. 

모든 프로그래밍의 기초는 Hello world 를 출력하는 거니까 뭐 시작은 했다고 볼 수 있겠네요. ㅎ 





JupyterNotebook 에서도 잘 됩니다 


==============================================


이제 기본 예제를 실행 해 보 았으니 개념을 파악하고 다음 예제들을 학습해봐야겠죠?? 

https://gist.github.com/haje01/202ac276bace4b25dd3f

이 곳에서 내용을 참조했습니다. 

잘 정리해주셔서 감사할따름입니다. ( 설치 방법도 나와있는데 설치는 저는 다른 곳에서 찾아서 해서 저게 맞게 되는 지는 잘 모르겠습니다. 



소개

텐서플로우(TensorFlow)는 기계 학습과 딥러닝을 위해 구글에서 만든 오픈소스 라이브러리입니다. 데이터 플로우 그래프(Data Flow Graph) 방식을 사용하였습니다.

http://melonicedlatte.com/2016/08/18/002249.html  -> 위 링크에 기계 학습과 딥 러닝이 무엇인지 어느 정도 정리해 놓았으니 참고 해 보셔도 좋을 것 같습니다. 


데이터 플로우 그래프

데이터 플로우 그래프는 수학 계산과 데이터의 흐름을 노드(Node)와 엣지(Edge)를 사용한 방향 그래프(Directed Graph)로 표현합니다.

data flow graph

노드는 수학적 계산, 데이터 입/출력, 그리고 데이터의 읽기/저장 등의 작업을 수행합니다. 엣지는 노드들 간 데이터의 입출력 관계를 나타냅니다.

엣지는 동적 사이즈의 다차원 데이터 배열(=텐서)을 실어나르는데, 여기에서 텐서플로우라는 이름이 지어졌습니다.

텐서(Tensor)는 과학과 공학 등 다양한 분야에서 이전부터 쓰이던 개념입니다. 수학에서는 임의의 기하 구조를 좌표 독립적으로 표현하기 위한 표기법으로 알려져 있지만, 분야마다 조금씩 다른 의미로 사용됩니다. 여기에서는 학습 데이터가 저장되는 다차원 배열 정도로 이해하시면 되겠습니다.






출처 : http://www.kocca.kr/knowledge/abroad/indu/__icsFiles/artimage/2013/04/02/kc4b2/1.jpg

노드는 위와 같이 동그란 거점? 같은 부분입니다. 

장거리 달리기를 할 때, 1km 당 물을 먹는 지점이 있는거 라고 생각하면 쉬울 것 같습니다.

엣지는 노드와 노드를 잇는 선입니다. 

즉,  노드에서 배열(텐서) 연산을 수행하고 입출력을 엣지를 통해서 한다고 생각하면 되겠죠?



특징

텐서플로우는 다음과 같은 특징을 가집니다:

  • 데이터 플로우 그래프를 통한 풍부한 표현력
  • 코드 수정 없이 CPU/GPU 모드로 동작
  • 아이디어 테스트에서 서비스 단계까지 이용 가능
  • 계산 구조와 목표 함수만 정의하면 자동으로 미분 계산을 처리
  • Python/C++를 지원하며, SWIG를 통해 다양한 언어 지원 가능

이후의 설명은 Python을 중심으로 진행하겠습니다. (pip를 통한 Python3설치는 개발 중으로, Python2 기반으로 하겠습니다.)

"구글이 텐서플로우를 오픈소스로 한 것은, 기계 학습이 앞으로 제품과 기술을 혁신하는데 가장 필수적인 요소라고 믿기 때문입니다." - Google Brain Team

위와 같은 특징을 가지고 있다고 하는데 사실 잘 모르겠네요 ㅎ 해본 적이 없어서요. 저는   C++ 이 아닌 위에서처럼 python 으로 하겠습니다. 



기본 개념 익히기

일단 기본 용어부터 살펴보겠습니다.

용어

오퍼레이션(Operation)

그래프 상의 노드는 오퍼레이션(줄임말 op)으로 불립니다. 오퍼레이션은 하나 이상의 텐서를 받을 수 있습니다. 오퍼레이션은 계산을 수행하고, 결과를 하나 이상의 텐서로 반환할 수 있습니다.

텐서(Tensor)

내부적으로 모든 데이터는 텐서를 통해 표현됩니다. 텐서는 일종의 다차원 배열인데, 그래프 내의 오퍼레이션 간에는 텐서만이 전달됩니다. (Caffe의 Blob과 유사합니다.)

세션(Session)

그래프를 실행하기 위해서는 세션 객체가 필요합니다. 세션은 오퍼레이션의 실행 환경을 캡슐화한 것입니다.

변수(Variables)    

변수는 그래프의 실행시, 패러미터를 저장하고 갱신하는데 사용됩니다. 메모리 상에서 텐서를 저장하는 버퍼 역할을 합니다.


위와 같은 기본 용어들이 있습니다. 


위와 같은 예제를 실행해보았습니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import tensorflow as tf
 
# 변수를 0으로 초기화
state = tf.Variable(0, name="counter")
 
# state에 1을 더할 오퍼레이션 생성
one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)
 
# 그래프는 처음에 변수를 초기화해야 합니다. 아래 함수를 통해 init 오퍼레이션을 만듭니다.   
init_op = tf.initialize_all_variables()
 
# 그래프를 띄우고 오퍼레이션들을 실행
with tf.Session() as sess:
  # 초기화 오퍼레이션 실행
  sess.run(init_op)
  # state의 초기 값을 출력
  print(sess.run(state))
  # state를 갱신하는 오퍼레이션을 실행하고, state를 출력
  for _ in range(3):
    sess.run(update)
    print(sess.run(state))
cs



WARNING:tensorflow:From :12 in .: 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.


위와 같은 에러가 발생하더라구요   12 줄의 

 tf.initialize_all_variables()  
 tf.global_variables_initializer()

위의 코드를 아래의 코드로 변경해줍니다. 



위와 같은 결과가 출력됩니다. 



차후에 더 어려운 예제들을 실습해서 올리겠습니다.