2017-09-16 8 views
0

Tensorflowを初めて使用しています。問題が発生しました。私のプログラムがx_batch = sess.run(X_mb)に達すると、スタックされてしまいます(1と2は印刷できますが、4は印刷できません)。無限ループです。私はX_mbの値を出力し、結果はTensor("batch:0", shape=(32, 39), dtype=float32)です。誰でも私を助けることができますか?どうも! mb_size = 32、gの形状は[60366,39]です。Tensorflow、sess.run()関数でスタックされたプログラム

更新されたコード:ここで

X = tf.placeholder(tf.float32, shape=[None, X_dim]) 

def sample_z(m, n): 
    return np.random.uniform(-1., 1., size=[m, n]) 

g = tf.unstack(data, num = 60366, axis = 0) 
X_mb, *_ = tf.train.batch(g ,mb_size, capacity = 60366) 
sess = tf.train.MonitoredSession() 


i = 0 

for it in range(2000): 
    #print(1) 
    for _ in range(5): 
     #print(2)  

     #print(X_mb) 
     x_batch = sess.run(X_mb) 
     # print(4) 
     _, D_loss_curr, _ = sess.run(
      [D_solver, D_loss, clip_D], 
      feed_dict={X: x_batch, z: sample_z(mb_size, z_dim)} 
     ) 

    _, G_loss_curr = sess.run(
     [G_solver, G_loss], 
     feed_dict={z: sample_z(mb_size, z_dim)} 
    ) 

はエラーメッセージです:何の無限ループがありません

runfile('/Users/franklan123/.spyder-py3/temp.py', wdir='/Users/franklan123/.spyder-py3') 
Traceback (most recent call last): 

    File "<ipython-input-4-6af95f06eb7f>", line 1, in <module> 
    runfile('/Users/franklan123/.spyder-py3/temp.py', wdir='/Users/franklan123/.spyder-py3') 

    File "/Users/franklan123/anaconda/envs/tensorflow/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 688, in runfile 
    execfile(filename, namespace) 

    File "/Users/franklan123/anaconda/envs/tensorflow/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 101, in execfile 
    exec(compile(f.read(), filename, 'exec'), namespace) 

    File "/Users/franklan123/.spyder-py3/temp.py", line 48, in <module> 
    X = tf.placeholder(tf.float32, shape=[None, X_dim]) 

    File "/Users/franklan123/anaconda/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/ops/array_ops.py", line 1530, in placeholder 
    return gen_array_ops._placeholder(dtype=dtype, shape=shape, name=name) 

    File "/Users/franklan123/anaconda/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/ops/gen_array_ops.py", line 1954, in _placeholder 
    name=name) 

    File "/Users/franklan123/anaconda/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py", line 767, in apply_op 
    op_def=op_def) 

    File "/Users/franklan123/anaconda/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 2458, in create_op 
    self._check_not_finalized() 

    File "/Users/franklan123/anaconda/envs/tensorflow/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 2181, in _check_not_finalized 
    raise RuntimeError("Graph is finalized and cannot be modified.") 

RuntimeError: Graph is finalized and cannot be modified. 

答えて

0

、tf.train.batchはキューを作成し、あなたがにキューランナーを実行する必要がありますデータを取得します。それ以外の場合、sess.runを実行すると、コードはqueue.dequeue()操作でハングするだけです(実際にデータをキューに入れるスレッドがないため)。

シンプルなソリューション:

  1. 移動し、あなたのためのキューを実行します
  2. 変更tf.Session tf.train.MonitoredSessionにX_mbライン前にセッションの作成(!これはグラフを修正)(、それ以外の場合は手動で実行する必要があります+ MonitoredSessionはグラフをファイナライズして、上記のようなエラーを回避します)。一度これを行う - グローバル初期化子(MonitoredSessionもあなたのために初期化)で行を削除します。
+0

こんにちは、私はRuntimeErrorを持っています(グラフはファイナライズされており、変更することはできません) – FRANKfisher

+0

答えとして - これはあなたのグラフを完成させます**後でグラフを修正できません** (これがTFコードの書き方です)。おそらく、イニシャライザを削除するのを忘れたのでしょうか? – lejlot

+0

私のコードは次のとおりです。g = tf.unstack(data、num = 60366、axis = 0) X_mb、* _ = tf.train.batch(g、mb_size、capacity = 60366) sess = tf.train.MonitoredSession ()の範囲内のそれのため I = 0 (2000): x_batch = sess.run(X_mb) _、D_loss_curr、_ = sess.run( [D_solver:_範囲内(5)のための 、D_loss、clip_D]、 feed_dict = {X:x_batch、z:sample_z(mb_size、z_dim)} ) – FRANKfisher

関連する問題