2016-12-27 2 views
1

저는 프리 트레인 된 네트워크를 가지고 있으며 변수와 세이버 객체와 함께 그래프 (subgraph) tf 그래프의 일부만 얻으려고합니다.tensorflow에서 서브 그래프 추출하기

이 내가하고 있어요 방법은 다음과 같습니다

subgraph = tf.graph_util.extract_sub_graph(default_graph, list of nodes to preserve) 
tf.reset_default_graph() 
tf.import_graph_def(subgraph) 

이 그러나 모든 변수를 제거합니다 (I는 reset_default_graph를 호출 할 때). 비록 내가 명시 적으로 변수에 대한 연산 노드 ("변수"유형 연산 만)를 "보존 할 노드 목록"에 추가합니다.

어떻게 변수의 값을 유지하면서 더 큰 그래프의 부분 그래프를 보존 할 수 있습니까? "보존 목록"에 추가 된 새로운 노드가 있습니까?

그래프 노드와 변수 사이의 관계는 나에게 여전히 불분명하며 튜토리얼에서는 변수 생성이 그래프에서 일부 연산 (노드)을 생성한다고 언급합니다.

답변

0

나는 당신이 옳다고 생각합니다. 당신이 말했듯이, 변수는 특정 값의 텐서를 출력하는 단순한 연산 (그래프의 노드)입니다. 이미하고있는 것처럼 변수 노드를 목록에 추가하여 보존 할 수 있어야합니다. print (sess.graph_def)를 사용하여 입력하신 이름이 정확한지 확인해 주시겠습니까?

+0

변수는 연결된 작업 집합입니다. 일반적으로 운영체제는 "변수 [가변]", "할당 [할당]", "읽기 [ID]"(첫 번째 부분은 이름이고, 대괄호는 유형을 나타냄) 및 초기화 도구의 전체 집합입니다. 문제는 그래프 내보내기가 변수로 인식되지 않는 방식으로 변수 구조를 잘라내는 것입니다. 필요한 모든 작업을 선택하는 것은 번거롭기 때문에 가장 현명한 방법은 아닙니다. – Pietrko

+0

그래, 사실이야. extract_sub_graph (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/framework/graph_util_impl.py#L110)의 함수 인터페이스를 살펴보면 스마트 처리가없는 단순한 함수임을 알 수 있습니다 변수에 대해 "필요한 모든 연산을 선택"하는 것이 가장 좋은 방법 일 수 있습니다. 좋은 소식은 변수 관련 노드를 선택하는이 번거로운 프로세스를 자동화하는 간단한 함수 (graph_def를 입력으로)를 작성할 수 있다고 생각합니다. –

+0

그래, 나는 그것을 피할 수 있었으면 좋겠다. 어쩌면 기존 API를 사용하여 깨끗하고 빠른 방법이 존재할 수도있다. 감사. – Pietrko

관련 문제