2017-02-24 3 views
1

Ich trainiere ein CNN mit Worteinbettungen und aus irgendeinem Grund bekomme ich FailedPreconditionError Ausnahme, wenn ich versuche, eine eingefrorene Version des Modells für die spätere Verwendung zu speichern.Tensorflow FailedPreconditionError beim Versuch, gefrorenes Modell zu speichern

Dies ist trotz der Tatsache, dass ich sess.run(tf.global_variables_initializer()) kurz vor dem Training und ich habe kein Problem, Training und Checkpointing des Modells.

Das Problem tritt auf, wenn ich versuche, ein Modell von einem Prüfpunkt zu laden und ein eingefrorenes Modell zu speichern. Die Funktion Ich verwende ist wie folgt:

def freeze_model(checkpoint_path, model_save_path, output_node_names): 
    checkpoint = tf.train.get_checkpoint_state(checkpoint_path) 
    input_checkpoint = checkpoint.model_checkpoint_path 

    saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=True) 
    graph = tf.get_default_graph() 
    input_graph_def = graph.as_graph_def() 
    with tf.Session() as sess: 
     saver.restore(sess, input_checkpoint) 

     output_graph_def = graph_util.convert_variables_to_constants(
      sess, 
      input_graph_def, 
      output_node_names 
     ) 

     with tf.gfile.GFile(model_save_path, "wb") as f: 
      f.write(output_graph_def.SerializeToString()) 

Der Fehler, den ich bekommen ist:

Traceback (most recent call last): 
    File "myproject/train.py", line 522, in <module> 
    tf.app.run() 
    File "/home/foo/anaconda2/lib/python2.7/site-packages/tensorflow/python/platform/app.py", line 44, in run 
    _sys.exit(main(_sys.argv[:1] + flags_passthrough)) 
    File "myproject/train.py", line 518, in main 
    trainer.save_model(preprocessor) 
    File "myproject/train.py", line 312, in save_model 
    ut.freeze_model(self.checkpoint_dir, model_save_path, C.OUTPUT_NODE_NAMES) 
    File "/home/foo/anaconda2/lib/python2.7/site-packages/myproject/utils.py", line 224, in freeze_model 
    output_node_names 
    File "/home/foo/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/graph_util_impl.py", line 218, in convert_variables_to_constants 
    returned_variables = sess.run(variable_names) 
    File "/home/foo/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 767, in run 
    run_metadata_ptr) 
    File "/home/foo/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 965, in _run 
    feed_dict_string, options, run_metadata) 
    File "/home/foo/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1015, in _do_run 
    target_list, options, run_metadata) 
    File "/home/foo/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1035, in _do_call 
    raise type(e)(node_def, op, message) 
tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value embeddings/W 
     [[Node: embeddings/W/_20 = _Send[T=DT_FLOAT, client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_30_embeddings/W", _device="/job:localhost/replica:0/task:0/gpu:0"](embeddings/W)]] 
     [[Node: conv_maxpool_4/W/_17 = _Recv[_start_time=0, client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_26_conv_maxpool_4/W", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

Antwort

0

Stellt sich heraus, ich war ein Saver Objekt konstruieren, bevor ich ein Session so nichts aus der Sitzung gemacht wurde Gerettet.

Verwandte Themen