TensorFlow自定义图检查报错,求替代方法查看输入节点
summarize_graph I get it, dealing with Bazel build hiccups and confusing command-line parameter errors can be super frustrating. Let's skip the summarize_graph tool entirely—here are a few straightforward Python-based methods to inspect your frozen TensorFlow graph's input nodes directly:
1. Load the Frozen Graph with TensorFlow's Core API
This method works directly with your frozen .pb file, no conversion needed. You'll load the graph definition and scan for nodes that have no incoming edges (these are your input nodes):
import tensorflow as tf # Load the frozen graph definition graph_def = tf.compat.v1.GraphDef() with tf.io.gfile.GFile('/home/WarMachineRox/test_frozen_graph.pb', 'rb') as f: graph_def.ParseFromString(f.read()) # Find and print input nodes print("Input nodes found:") for node in graph_def.node: # Input nodes typically have no incoming connections if len(node.input) == 0: shape_attr = node.attr.get('shape') shape = tf.TensorShape(shape_attr.shape) if shape_attr else "Not specified" print(f"- Name: {node.name}, Op type: {node.op}, Shape: {shape}")
2. Use TensorFlow 2.x Keras Utilities (for SavedModel or convertible graphs)
If your graph can be loaded as a SavedModel (or you're willing to convert your frozen .pb to this format temporarily), Keras makes inspecting inputs trivial:
import tensorflow as tf # Load the model (works directly with SavedModel directories) model = tf.keras.models.load_model('/path/to/your/saved_model') # Print details of all input layers print("Input layer details:") for input_tensor in model.inputs: print(f"- Name: {input_tensor.name}, Shape: {input_tensor.shape}, Data type: {input_tensor.dtype}")
Quick note: If you only have a frozen .pb file, you can wrap it into a SavedModel with a short script, or just stick with the first method above—it's simpler for frozen graphs.
3. Visualize the Graph with TensorBoard
For a more visual approach, TensorBoard lets you explore the full graph structure, including input nodes:
- First, save a graph summary to disk:
import tensorflow as tf graph_def = tf.compat.v1.GraphDef() with tf.io.gfile.GFile('/home/WarMachineRox/test_frozen_graph.pb', 'rb') as f: graph_def.ParseFromString(f.read()) # Create a session and import the graph with tf.compat.v1.Session() as sess: tf.import_graph_def(graph_def, name='') # Write graph to log directory writer = tf.summary.create_file_writer('./graph_logs') with writer.as_default(): tf.summary.graph(sess.graph, step=0)
- Run TensorBoard and view the graph:
tensorboard --logdir=./graph_logs
Open the link in your browser, go to the Graphs tab, and you'll see your full graph—input nodes are usually at the leftmost edge, easy to spot.
As a quick side note on your original summarize_graph problem: If you ever want to circle back to it, double-check your TensorFlow version (older releases sometimes used --input instead of --in_graph) and make sure you're running the command from the root of your TensorFlow repository. But honestly, the methods above will get you what you need without dealing with Bazel's quirks.
内容的提问来源于stack exchange,提问作者user1098761

