텐서플로우의 기본 개념


텐서플로우는 뉴럴네트워크를 위한 라이브러리이므로, 기존에 우리가 알던 
파이썬 프로그래밍과는 조금 다른 형태를 보인다.

머신러닝, 딥러닝은 여러 연산처리를 해야하는 과정이다.
파이썬으로만 프로그램을 돌리게 된다면, 속도가 너무 느려진다.

텐서플로우는 파이썬에서 그래프(연산)의 여러 계산들을 디자인(설계)하고, 
그 디자인 된 것들을 돌리는 것은 파이썬 외부 device(CPUs, GPUs)에서 하는 것이다.
(이때, 아래 나올 변수 초기화를 위해 device를 C, C++로 이해를 하면 편하다.)

 

<텐서플로우 문서 한글 번역본  - 기본적인 사용방법>

- 연산은 graph로 표현합니다.
- graph는 Session내에서 실행됩니다.
- 데이터는 tensor로 표현합니다.
- 변수(Variable)는 그 상태를 유지합니다.
- 작업(operation 혹은 op)에서 데이터를 입출력 할 때 feed와 fetch를 사용할 수 있습니다.

 

위 문서를 보고 아래는 내가 공부를 하며 이해한 내용을 정리한 것이다.

1. 그래프(Graph)


 노드(node)와 꼭짓점(vertex)으로 연결되어 있는 객체이다. 노드들은 변(edge)를 통해 연결되어 있다.

문서에 나와있는 그래프라는 표현이 어렵다면, 쉽게 이해하기 위해서 그래프라고 나와있는 부분에  '연산'이라는 용어를 대체해서 넣어보면 이해를 하기 쉽다.
(연산을 operation 혹은 op라고 부른다.)

왜 텐서플로우에서는 그래프를 사용하는가?

출처 : https://excelsior-cjh.tistory.com/151 러닝텐서플로

이미지를 보면 우리가 e를 구하기 위해서 모든 것을 다 계산 할 필요 없이
a,b,c를 계산하면 e를 구할 수 있다. 
이런 방식으로 연산에 필요한 것들을 분별할 수 있는 구조가 그래프이다.


결국 목적은 불필요한 연산을 조금이라도 줄이기 위해서이다.

 

2. 텐서(Tensor)

 

다차원 배열 혹은 다차원 리스트라고 생각을 하면 된다. 
텐서플로우의 모든 데이터들의 종류(플레이스홀더, 상수, 변수)는 텐서이다. 
변수, 상수와 텐서의 개념이 헷갈릴 수도 있다. 
여기에서 변수, 상수는 우리가 연산하는 과정에서, 각자 맡는 역할에 대한 용어이고

그 모든 데이터들의 타입(종류)이 텐서라는 것이다. 

 

3. 상수(constant)

tf.constant(value, dtype=None, shape=None, name='Const')
의 형태로 표현을 한다. 
일반적인 프로그래밍에서의 상수 의미와 동일하다.

 

4. 변수(variable)

예를들어, 가중치 식을 y = W*x + b 라고 보는데,
입력값 x를 넣어서 해당 y값을 맞춰줄수 있는 W와 b를 구하는 것이 머신러닝이다.
이때, 텐서플로우에서는 W와 b를 변수로 만들어서 구하는 것이다.

모델을 학습을 시킬때, 최종 값을 얻기 위해 계속 수정해야하는 값들을 변수로 두는 것이라고 생각하면 된다. 

 


5. 세션 (Session)

텐서플로우 작동 방식을 2가지 과정으로 나타내면,

① 모든 것을 파이썬에서 디자인(설계)을 한 후
외부에서 연산을 돌린다

②에서 연산을 실행시키는 곳이 Session
구체적으로 device(CPUs, GPUs) 위에서 연산을 실행하는 것이다.   
세션은 텐서플로우 계산이 돌아갈 수 있는 환경을 만들어주는 코드라고 보면 된다.

sess =tf.Session()

그래프(연산)를 실행시켜 우리가 아는 형태로 보이기 위해서는 sess.run(graph)를 실행
sess.run()에서 () 안에 들어가는(graph) 인자를 fetches라고 한다.

과정이 끝난 후(연산에 쓰인 시스템 자원을 돌려 보내기 위해서는)
Session을 닫아야 한다. 
이때, sess.close를 사용하거나
with 구문을 사용한다.(with 구문의 끝에서 close()가 자동으로 호출 되어 많이 사용한다. )

with tf.Session() as sess:
      result = sess.run([product])
      print(result)

 

 

참고 자료:

https://m.blog.naver.com/PostView.nhn?blogId=ndb796&logNo=221277981625&proxyReferer=https%3A%2F%2Fwww.google.com%2F
안경잡이 개발자
https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/get_started/basic_usage.html
텐서플로우 문서 한글 번역본  - 기본적인 사용방법
https://excelsior-cjh.tistory.com/151
러닝텐서플로(연산그래프) (이미지 참조)
https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/api_docs/python/client.html
텐서플로우 문서 한글 번역본  - 그래프 실행

 

 

 

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기