title: Tensorflow : Generate freeze graph without having node_names
body: <p>I have some (old) Tensorflow model that have been created by another person.</p>
  
  <p>For each of these model, I want to create frozen graph.</p>
  
  <p>My models can be either <code>Saved Model</code> : </p>
  
  <pre><code>+--- name.txt
  +--- saved_model.pb
  +--- variables
  |   +--- variables.data-00000-of-00001
  |   +--- variables.index
  </code></pre>
  
  <p>Or <code>Meta Graphs</code> : </p>
  
  <pre><code>+--- export.data-00000-of-00001
  +--- export.index
  +--- export.meta
  </code></pre>
  
  <p>So, I tried to create frozen graphs using these functions: </p>
  
  <pre><code>import tensorflow as tf
  import os
  
  def frozenGraph_SavedGraph(modelFolder, outputFolder, toolsFilepath)
      networkGraph = "saved_model.pb"
      networkCheckpoint = "variables/variables.data-00000-of-00001"
  
      args = "--checkpoint_version=1\
              --input_graph=" + modelFolder + "/" + networkGraph + "\
              --input_checkpoint=" + modelFolder + "/" + networkCheckpoint + "\
              --output_graph=" + outputFolder + "\
              --input_binary=true"
  
      os.system(toolsFilepath + "/freeze_graph.py " + args)
  
  def frozenGraph_Metagraph(modelFolder, outputFolder, toolsFilepath)
      networkMeta = "export.meta"
      networkCheckpoint = "export.data-00000-of-00001"
  
      args = "--checkpoint_version=1\
              --input_meta_graph=" + modelFolder + "/" + networkMeta + "\
              --input_checkpoint=" + modelFolder + "/" + networkCheckpoint + "\
              --output_graph=" + outputFolder + "\
              --input_binary=true"
  
      os.system(toolsFilepath + "/freeze_graph.py " + args)
  
  
  toolsFilepath = os.path.dirname(tf.__file__) + "/python/tools"
  savedGraphFilepath = [PATH/TO/SAVED_GRAPH]
  metaGraphFilepath = [PATH/TO/META_GRAPH]
  outputFolder = "/output"
  
  frozenGraph_SavedGraph(savedGraphFilepath, outputFolder, toolsFilepath)
  frozenGraph_Metagraph(metaGraphFilepath, outputFolder, toolsFilepath)
  </code></pre>
  
  <p>But for both of these function, I get the error message : </p>
  
  <pre><code>You need to supply the name of a node to --output_node_names.
  </code></pre>
  
  <p>The problem is that I don't think that I have the node names in the file that are available to me (those listed above).</p>
  
  <p>Is there a way to generate frozen graphs without these informations ? (Or a way to retrieve them ?)</p>
  
  <p>EDIT : </p>
  
  <p>I tried to retrieve node names from the graph using this code : </p>
  
  <pre><code>def printNames_Metagraph(modelFolder):
      networkMeta = "export.meta"
      networkCheckpoint = "export.data-00000-of-00001"
  
      saver = tf.train.import_meta_graph(modelFolder + "/" + networkMeta)
      sess = tf.Session()
      saver.restore(sess, modelFolder + "/" + networkCheckpoint)
      graph = sess.graph
  
      print([node.name for node in graph.as_graph_def().node])
  </code></pre>
  
  <p>But it throws a lot of error and warnings : </p>
  
  <pre><code>2019-03-14 16:40:42.973341: W tensorflow/core/framework/op_def_util.cc:357] Op TensorArray is deprecated. It will cease to work in GraphDef version 16. Use TensorArrayV3.
  2019-03-14 16:40:42.973738: W tensorflow/core/framework/op_def_util.cc:357] Op TensorArrayScatter is deprecated. It will cease to work in GraphDef version 19. Use TensorArrayGradV3.
  2019-03-14 16:40:42.974148: W tensorflow/core/framework/op_def_util.cc:357] Op TensorArrayRead is deprecated. It will cease to work in GraphDef version 16. Use TensorArrayReadV3.
  2019-03-14 16:40:42.974740: W tensorflow/core/framework/op_def_util.cc:357] Op TensorArrayWrite is deprecated. It will cease to work in GraphDef version 16. Use TensorArrayWriteV3.
  2019-03-14 16:40:42.975107: W tensorflow/core/framework/op_def_util.cc:357] Op TensorArraySize is deprecated. It will cease to work in GraphDef version 16. Use TensorArraySizeV3.
  2019-03-14 16:40:42.975378: W tensorflow/core/framework/op_def_util.cc:357] Op TensorArrayGather is deprecated. It will cease to work in GraphDef version 16. Use TensorArrayGatherV3.
  WARNING: Logging before flag parsing goes to stderr.
  W0314 16:40:43.424403 10080 meta_graph.py:897] The saved meta_graph is possibly from an older release:
  'model_variables' collection should be of type 'byte_list', but instead is of type 'node_list'.
  2019-03-14 16:40:43.439121: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
  W0314 16:40:43.442324 10080 deprecation.py:323] From [MY/PATH/]lib\site-packages\tensorflow\python\training\saver.py:1276: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.
  Instructions for updating:
  Use standard file APIs to check for files with this prefix.
  2019-03-14 16:40:44.049683: W tensorflow/core/util/tensor_slice_reader.cc:95] Could not open [MY/PATH2/]/models\PATH/TO/METAGRAPH/export.data-00000-of-00001: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?
  2019-03-14 16:40:44.052551: W tensorflow/core/util/tensor_slice_reader.cc:95] Could not open [MY/PATH2/]/models\PATH/TO/METAGRAPH/export.data-00000-of-00001: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?
  2019-03-14 16:40:44.052574: W tensorflow/core/util/tensor_slice_reader.cc:95] Could not open [MY/PATH2/]/models\PATH/TO/METAGRAPH/export.data-00000-of-00001: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?
  2019-03-14 16:40:44.053005: W tensorflow/core/framework/op_kernel.cc:1431] OP_REQUIRES failed at save_restore_tensor.cc:175 : Data loss: Unable to open table file [MY/PATH2/]/models\PATH/TO/METAGRAPH/export.data-00000-of-00001: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?
  
   ...
  
  Traceback (most recent call last):
    File "[MY/PATH/]lib\site-packages\tensorflow\python\client\session.py", line 1335, in _do_call
      return fn(*args)
    File "[MY/PATH/]lib\site-packages\tensorflow\python\client\session.py", line 1320, in _run_fn
      options, feed_dict, fetch_list, target_list, run_metadata)
    File "[MY/PATH/]lib\site-packages\tensorflow\python\client\session.py", line 1408, in _call_tf_sessionrun
      run_metadata)
  tensorflow.python.framework.errors_impl.DataLossError: Unable to open table file [MY/PATH2/]/models\PATH/TO/METAGRAPH/export.data-00000-of-00001: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?
       [[{{node save/RestoreV2_311}}]]
  
  During handling of the above exception, another exception occurred:
  
  Traceback (most recent call last):
    File "[MY/PATH2/]Main.py", line 80, in &lt;module&gt;
      printNames()
    File "[MY/PATH2/]Main.py", line 64, in printNames
      saver.restore(sess, modelFolder + "/" + networkWeightsFile)
    File "[MY/PATH/]lib\site-packages\tensorflow\python\training\saver.py", line 1286, in restore
      {self.saver_def.filename_tensor_name: save_path})
    File "[MY/PATH/]lib\site-packages\tensorflow\python\client\session.py", line 930, in run
      run_metadata_ptr)
    File "[MY/PATH/]lib\site-packages\tensorflow\python\client\session.py", line 1153, in _run
      feed_dict_tensor, options, run_metadata)
    File "[MY/PATH/]lib\site-packages\tensorflow\python\client\session.py", line 1329, in _do_run
      run_metadata)
    File "[MY/PATH/]lib\site-packages\tensorflow\python\client\session.py", line 1349, in _do_call
      raise type(e)(node_def, op, message)
  tensorflow.python.framework.errors_impl.DataLossError: Unable to open table file [MY/PATH2/]/models\PATH/TO/METAGRAPH/export.data-00000-of-00001: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator?
       [[node save/RestoreV2_311 (defined at [MY/PATH2/]Main.py:62) ]]
  
  Original stack trace for 'save/RestoreV2_311':
    File "[MY/PATH2/]Main.py", line 80, in &lt;module&gt;
      printNames()
    File "[MY/PATH2/]Main.py", line 62, in printNames
      saver = tf.train.import_meta_graph(modelFolder + "/" + networkArcFile)
    File "[MY/PATH/]\lib\site-packages\tensorflow\python\training\saver.py", line 1445, in import_meta_graph
      meta_graph_or_file, clear_devices, import_scope, **kwargs)[0]
    File "[MY/PATH/]\lib\site-packages\tensorflow\python\training\saver.py", line 1467, in _import_meta_graph_with_return_elements
      **kwargs))
    File "[MY/PATH/]\lib\site-packages\tensorflow\python\framework\meta_graph.py", line 855, in import_scoped_meta_graph_with_return_elements
      return_elements=return_elements)
    File "[MY/PATH/]\lib\site-packages\tensorflow\python\util\deprecation.py", line 507, in new_func
      return func(*args, **kwargs)
    File "[MY/PATH/]\lib\site-packages\tensorflow\python\framework\importer.py", line 443, in import_graph_def
      _ProcessNewOps(graph)
    File "[MY/PATH/]\lib\site-packages\tensorflow\python\framework\importer.py", line 236, in _ProcessNewOps
      for new_op in graph._add_new_tf_operations(compute_devices=False):  # pylint: disable=protected-access
    File "[MY/PATH/]\lib\site-packages\tensorflow\python\framework\ops.py", line 3612, in _add_new_tf_operations
      for c_op in c_api_util.new_tf_operations(self)
    File "[MY/PATH/]\lib\site-packages\tensorflow\python\framework\ops.py", line 3612, in &lt;listcomp&gt;
      for c_op in c_api_util.new_tf_operations(self)
    File "[MY/PATH/]\lib\site-packages\tensorflow\python\framework\ops.py", line 3504, in _create_op_from_tf_operation
      ret = Operation(c_op, self)
    File "[MY/PATH/]\lib\site-packages\tensorflow\python\framework\ops.py", line 1961, in __init__
      self._traceback = tf_stack.extract_stack()
  
  
  Process finished with exit code 1
  </code></pre>
  
  <p>Notes : </p>
  
  <ul>
  <li>Using Tensorflow 1.13.1 with Python 3</li>
  <li>The models I am trying to load might use an old version of Tensorflow with the first version of checkpoints</li>
  <li>The models are binary files</li>
  </ul>