About
Tensorflow로 이것저것 도전하면서1
2
3
4ValueError: Operation name: "init"
op: "NoOp"
input: "^val/Assign"
is not an element of this graph.
오류라던가1
Tensor Tensor("val:0", shape=(), dtype=int32_ref) is not an element of this graph.
와 같은 오류들을 마주치면서 graph에 대해서 좀 더 깊게 이해하는 것이 좋겠다는 생각이 들었다.
그래서 찾던 도중에 좋은 예제가 있어서 이번 포스팅을 통해서 소개하고자한다.
Graph?
- Graph는 operation을 정의한 것을 말한다. Tensor와 Node간의 계산 등을 포함한 설계도를 의미하며 Data와는 관계가 없다.
- Graph를 Session을 통해서 실행할 때, 우리가 layer간에 설치한 dimensions나 type등을 체크하며 문제가 있을시에는 예외를 발생시킨다.
- Graph를 실행하기 위해서는 Data를 feed 해야한다.
Session?
Graph에게 전화를 거는 것이다. 특정 Graph에게 전화를 걸고 우리가 원하는 결과를 얻기위해 일을 시키는 것이라고 생각하면 된다.1
2with tf.Session(graph=graph_we_want_to_connect) as sess:
sess.run([op], feed_dict={data:data})
실습
위의 뜻을 해석해보면 다양한 모델(Graph)을 만들고 세션마다 원하는 모델에 연결해서 학습을 진행할 수 있다는 것이다.
무슨 뜻인지 아래의 예제를 통해서 확인해보자.
1 | import tensorflow as tf |
이 경우에 아래처럼 실행하면1
2
3with tf.Session(graph=graph_1) as sess:
sess.run(init_graph_2)
print(sess.run(W_1))
아래같은 오류가 난다.1
2
3
4Operation name: "init"
op: "NoOp"
input: "^graph_2_W/Assign"
is not an element of this graph.
오류 의미 그대로이다. 우리가 실행하고자 한 init_graph_2가 graph_1에 해당하는 것이 아니어서 오류가 발생한 것이다.
변수의 경우도 마찬가지로 아래처럼 실행하면 오류가 발생한다.1
2
3with tf.Session(graph=graph_1) as sess:
sess.run(init_graph_1)
print(sess.run(W_2))
1 | Tensor("graph_2_W:0", shape=(), dtype=int32_ref) is not an element of this graph. |
결론
Graph는 모델이며, Session은 원하는 모델을 선택하여 전화를 걸고 일을 시키는 행위를 말한다.
Related Posts
Understanding Session and Graph