필자가 딥러닝을 배우기시작하면서 선택한 프레임워크인데 생각보다 어렵지는 않다.
그러나 필자가 블로그에 포스팅 하는 부분들 중에서는 거의 해본적없는 분야이고
빨리 빨리 바뀌기에 이 포스터는 항상 맞을수 없다고 볼 수 있다.
그러기 때문에 읽는 입장에서 그 부분을 고려해서 읽길 바란다.
이 포스터는 Python3.6으로 Tensorflow1.2로 테스팅 했으며 작업환경은 PyCharm이며 특별한 경우가 아니면 쉘에서 실행하지 않음.
그러나 사람입장에서는 되게 중요한데 namescope는 논리적으로 어디까지가 우리가 원하는 부분인지를 나눌 수 있기 때문이다.
복잡하면 복잡할수록 name scope로 쪼개는게 좋다. 나중에 엄청 커졌을 경우를 생각해보자,
만약 name scope라는 논리적 단위로 쪼개놓지 않는다면 더 이해하기는 힘들 것이다.
그러면 이제 name scope를 사용해서 논리적으로 쪼갠 예제를 보자.
Name Scope 만들기
import tensorflow as tf
with tf.name_scope('scope_alpha'):
a = tf.constant(5, dtype=tf.int32, name='const_a')
b = tf.constant(10, dtype=tf.int32, name='const_b')
c = tf.add(a, b, name='add_c')
with tf.name_scope('scope_beta'):
d = tf.constant(500, dtype=tf.int32, name='const_a')
e = tf.constant(1000, dtype=tf.int32, name='const_b')
f = tf.add(d, e, name='add_c')
output = tf.add(c, f)
sess = tf.Session()
writer = tf.summary.FileWriter('./mygraph', graph=tf.get_default_graph())
print(sess.run(output))
namescope를 만드는 코드는 아래와 같다.
with tensorflow.name_scope('Scope'):
이제 with구문안에 작성하면 이는 name_scope안에서 하는 행동으로 취급한다.
사실 name_scope안에서 하던 안하던 그건 크게 중요하지 않다.
name_scope안에서 선언한 변수도 밖에서 얼마든지 쓸수 있기 때문이다.
즉 name_scope는 순수하게 사람이 알아보기위해서 사용하는것이라고 생각하면된다.
그러면 이렇게 만들면 과연 시각화 하는데 어떻게 유리할까??
어짜피 코드단위인데 라고 생각한다면 TensorBoard를 켜보면된다.
Tensor Board를 사용하여 Name Scope를 확인하기
위 코드는 그래프를 만들었으므로 Tensorboard로 확인하도록 하자.
만약 텐서보드를 어떻게 보는지 기억이 안된다면 Tensorflow2장을 확인하자.
그러면 그래프를 확인하도록하자.
보면 이때까지와 달리 namescope에 넣은 부분은 namescope로 표현되어 더 알아보기 쉽게 표현됨을 알 수 있다.
이제 +누르면 내부를 상세하게 볼 수 있다.
이렇게 보면 내부를 알 수 있다.
내부가 복잡해질수록 반드시 namescope로 나누는게 사람이 이해하기에 도움이된다.
'Programming > Python-Tensorflow' 카테고리의 다른 글
[Tesorflow-08] 스칼라를 사용해서 그래프 만들기 (0) | 2017.09.05 |
---|---|
[Tensorflow-06] 변수 (0) | 2017.08.04 |
[Tensorflow-05] Fetches, Feed Dictionary, Place Holder (0) | 2017.08.02 |
[Tensorflow-04] 그래프 (0) | 2017.08.02 |
[Tensorflow-03] 텐서 (0) | 2017.08.02 |