2017-09-08 8 views
0

私はValueError: Tensor("conv2d_1/kernel:0", ...) must be from the same graph as Tensor("IteratorGetNext:0", ...)に入っています。私はEstimatorクラスのケラスモデルを再利用しようとしています。テンソルの利用可能なグラフのリスト

私は

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

それは間違っている場合は、円形正しい聞こえる – dartdog

答えて

1

一般的なデバッグ方法を次に示します。import pdb; pdb.set_trace()tf.Graphコンストラクタに入力し、btを使用して、グラフの作成者を特定します。私の最初の推測では、Kerasはデフォルトのグラフを使用せず、独自のグラフを作成します。あなたはGraphファイルがローカルに

+0

...私が間違っているかもしれないが、私はあなたがKerasと推定を混在させることができると思うまだ..同様の問題を見ていない:私は、コンストラクタが見つけるためにある場所を知っている必要がありますコンストラクターがどこにあるかを調べます。もし私がしなければ? –

+0

あなたがCondaを使用している場合、それは '〜/アナコンダ/ libに/ python3.5 /のsite-packages/tensorflow /パイソン/フレームワーク/ ops.py' になります –

0

置かれている場所のグラフをチェックし、エラーを返す関数は、(彼らは同様にグラフアドレスを返すたい)のグラフを確認するには、次の関数を呼び出す見つけることinspect.getsourcefile(tf.Graph)を行うことができます。

from tensorflow.python.framework.ops import _get_graph_from_inputs 
_get_graph_from_inputs([x]) 
kerasが作成した

この場合、グラフは、gをグラフと同一であるが、get_dataset_inp_fnによって作成されたものは、g異なります。

関連する問題