2017-10-19 1 views
1

Ich versuche, einen Distributed Tensorflow zu starten und den folgenden Fehler zu erhalten. Mein Code sieht wie folgt aus:Tensorflow - Grafik ist finalisiert und kann nicht geändert werden

sv = tf.train.Supervisor(is_chief=(task_index == 0), logdir="/tmp/train_logs", init_op=init_op, 
         summary_op=summary_op, saver=saver, global_step=global_step, save_model_secs=600) 
with sv.managed_session(server.target) as sess: 

step = 0 
while not sv.should_stop() and step < nnc.steps: 

    mini_batches = random_mini_batches(x_train, y_train, mini_batch_size) 

    for mini_batch in mini_batches: 
     (batch_x, batch_y) = mini_batch 

     _, step = sess.run([train_op, global_step], feed_dict={x: batch_x, y: batch_y}) 

Wenn ich den Fehler auf random_mini_batches Funktion fehlgeschlagen ist. Aber ich verstehe überhaupt nicht wie und warum. random_mini_batches Funktion ist eine Funktion in reinem Python geschrieben + numpy ohne etwas mit TensorFlow. x_train und y_train wurden vorher nicht benutzt.

ist hier der Fehler, die ich bekomme:

File "/Users/curr_user/PycharmProjects/curr_project/src/nn.py", line 36, in random_mini_batches 
    num_complete_minibatches = int(math.floor(m/mini_batch_size)) # number of mini batches of size mini_batch_size 
    File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/ops/math_ops.py", line 880, in r_binary_op_wrapper 
    x = ops.convert_to_tensor(x, dtype=y.dtype.base_dtype, name="x") 
    File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 611, in convert_to_tensor 
    as_ref=False) 
    File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 676, in internal_convert_to_tensor 
    ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref) 
    File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py", line 121, in _constant_tensor_conversion_function 
    return constant(v, dtype=dtype, name=name) 
    File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/constant_op.py", line 106, in constant 
    attrs={"value": tensor_value, "dtype": dtype_value}, name=name).outputs[0] 
    File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2582, in create_op 
    self._check_not_finalized() 
    File "/Users/curr_user/tensorflow/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2290, in _check_not_finalized 
    raise RuntimeError("Graph is finalized and cannot be modified.") 

Jede Hilfe wäre sehr geschätzt! Danke

Antwort

0

Es ist nicht in Ihrer Frage, aber ich denke, dass mini_batch_size ist ein konstanter Tensor. Obwohl random_mini_batches ist in reinem Python und numpy, tensorflow overloads viele Betreiber mit Tensoren, so dieser Linie

num_complete_minibatches = int(math.floor(m/mini_batch_size)) 

ist in der Tat eine __div__ Operation an einem Tensor durchgeführt wird, die m auf einen Tensor als auch zu konvertieren zwingt. Aber tf.train.Supervisor() erzwingt die Graph-Finalisierung, d. H., Es können keine weiteren Knoten erstellt werden, daher schlägt die Konvertierung fehl.

Die Lösung ist mini_batch_size eine gewöhnliche Konstante zu machen und sicherzustellen, dass keine Tensoren innerhalb random_mini_batches verwendet werden.

+0

Danke, scheint, dass Sie Recht haben. – user3489820

Verwandte Themen