1. Graph and Session

텐서플로에서의 DAG(Directed Acyclic Graph)는 다른 그래프들과 동일하게 edge와 node로 구성되어 있다.

(결국, 데이터와 데이터에 대한 연산으로 DAG가 이루어져있다.)

- edge : 데이터(즉, 텐서)

- node : 텐서들에 대한 연산작업

텐서플로는 그래프의 처리, 컴파일, DAG의 중간에 삽입, 수신 등을 할 수 있다.

그리고 DAG의 다른 부분을 다른 디바이스(CPU, GPU, TPU 뿐만 아니라 다른 기기까지)에 할당할 수 있다.

(다른 다바이스들간의 커뮤니케이션과 조정을 수행)

session 클래스는 우리가 사용하는 파이썬 프로그램과 C++ 런타임을 연결해주는 역할을 한다.

텐서플로 그래프를 실행하기 위해서는 세션에서 런을 호출해야 한다.
위의 예시에서는 x와 y라는 1차원 텐서를 정의했고,
z라는 텐서는 tf.add(x,y) (x와 y의 합)의 결과를 말한다.

이것을 evaluate하기 위해 z에 대해 session.run을 호출한다.
위의 예시에서는 파이썬의 with 구문을 통해 세션이 완료되었을 때 자동적으로 종료되게끔 한다.

2. Evaluating a Tensor

z를 evaluate 하기 위해서는 session.run(z) 을 기본적으로 사용하지만
z.eval() 을 사용할 수도 있다.

session.run()을 사용할 때 우리는 텐서의 리스트를 사용할 수도 있다.
그리고 tf.add(x,y) , tf.multiply(x,y) 대신 x+y 와 x*y 같이 간단히 적을 수 있다.

텐서플로에서는 원래 만들어진 그대로 lazy evaluation을 사용하는 것이 권장사항이다.
하지만 개발, 디버깅 등의 작업을 할 때는 즉시 결과를 볼 수 있는 eager mode를 사용하는 것이 편하다.

위와 같이 tf.eager를 불러온 다음 eager execution이 가능하게 하면
session.run 을 수행하지 않고도 즉시 결과를 볼 수 있다.
(하지만 강의에선 이런거는 검증이 끝나면 다시 lazy하게 돌아가는 것을 권장함)

3. Visualizing a graph

지금까지는 그래프를 어떻게 작성하고, 실행하는지 보았습니다.
그래프를 시각화한다거나, 데이터가 흘러 들어가서 어떻게 작동하는지 보고 싶을 때,
뉴런 네트워크 구조를 시각화 하고 싶을 때 어떻게 해야하는지 ??

그래프를 시각화하기 위해서는 tf.Summary.FileWriter("원하는 폴더명", sess.graph) 를 사용하면 된다.
그리고 이 때 정의한 텐서에 name을 지정해주어야 한다.
(그렇지 않으면 Ad_7 등과 같이 자동 생성된 이름이 나와서 파악하기가 어렵다.)
하지만 이것만 실행했을 때 폴더 안의 graph는 binary 값으로 되있기 때문에 우리가 읽을 수 있는 형태가 아니다.

우리가 읽기 위해서는 TensorBoard 라는 프로그램을 사용해야 한다.
아래는 텐서보드를 실행하는 코드이다.(google.datalab.ml을 따로 설치해야 실행이 되는것 같음)

위를 실행해서 나오는 페이지로 가면 아래와 같은 그림을 볼 수 있다.

※ 구글 클라우드셸에서 텐서보드 실행하는 법

'구글 머신러닝 스터디잼(중급) > Introduction to TensorFlow' 카테고리의 다른 글

TensorFlow 실습 1  (0) 2019.10.28
Tensor and Variable  (0) 2019.10.25
TensorFlow API Hierarchy  (0) 2019.10.25
What is TensorFlow?  (0) 2019.10.25
Introduction  (0) 2019.10.25

+ Recent posts