2017-09-08 4 views
0

나는 ValueError: Tensor("conv2d_1/kernel:0", ...) must be from the same graph as Tensor("IteratorGetNext:0", ...)으로 실행 중입니다. 나는 Estimator 클래스로 keras 모델을 재사용하려고합니다. 은 tensorflow에서 사용 가능한 그래프 목록이 있습니다

나는

g = tf.Graph() with g.as_default():

import tensorflow as tf 

g = tf.Graph() 
with g.as_default(): 
    MODEL = get_keras_model(...) 

    def model_fn(mode, features, labels, params): 
     logits = MODEL(features) 
     ... 

    def parser(record): 
     ... 
    def get_dataset_inp_fn(filenames, epochs=20): 
      def dataset_input_fn(): 
       dataset = tf.contrib.data.TFRecordDataset(filenames) 
       dataset = dataset.map(parser) 
       ... 

with tf.Session(graph=g) as sess: 
    est = tf.estimator.Estimator(
      model_fn, 
      model_dir=None, 
      config=None, 
      params={"optimizer": "AdamOptimizer", 
        "opt_params":{}} 
      ) 
    est.train(get_dataset_inp_fn(["mydata.tfrecords"],epochs=20)) 

에 최선을 둘러싸는 시도하지만 도움이되지 않습니다.

현재 시점까지 정의 된 모든 그래프를 나열하는 방법이 있습니까?

+0

내가 틀렸을 수도 있지만 아직 Keras와 견적을 섞을 수 있다고 생각하지 않습니다 .. 비슷한 문제를보고 ... – dartdog

답변

1

다음은 일반적인 디버깅 기술입니다. import pdb; pdb.set_trace()tf.Graph 생성자에 넣은 다음 bt을 사용하여 누가 그래프를 작성하는지 파악합니다. 내 첫 번째 추측은 Keras가 기본 그래프를 사용하지 않고 자체 그래프를 생성한다는 것입니다. Graph 파일을 로컬 위치를 당신은 찾을 inspect.getsourcefile(tf.Graph)을 할 수

+0

잘못된 경우 순환으로 들립니다. 올바른지 알아야합니다. 생성자가 어디 있는지 알고 싶습니다. 밖으로 생성자가 어디 있는지. 내가하지 않으면? –

+0

Conda를 사용하는 경우 '~/anaconda/lib/python3.5/site-packages/tensorflow/python/framework/ops.py'에 있습니다. –

0

그래프를 확인하고 오류를 반환 함수는 (그들은뿐만 아니라 그래프 주소를 반환 할)이 그래프를 확인하는 기능을 다음 호출 :

from tensorflow.python.framework.ops import _get_graph_from_inputs 
_get_graph_from_inputs([x]) 

이 경우 keras가 만든 그래프는 g과 동일하지만 get_dataset_inp_fn으로 만든 그래프는 g과 다릅니다.