如何获取Keras Xception模型的输出节点名称?
获取Keras Xception模型输出节点名方法
方法1:直接读取模型输出属性
实例化或加载完模型后直接调用output_names属性即可获取,代码示例:
import tensorflow as tf from tensorflow.keras.applications import Xception # 加载官方预训练Xception model = Xception(weights='imagenet') # 加载自己微调后保存的模型替换为下方代码 # model = tf.keras.models.load_model('your_custom_xception.h5') # 直接打印输出节点名 print(model.output_names)
- 官方预训练原版Xception的默认输出节点名为
predictions - 如果你自定义过输出层,输出节点名就是你给输出层设置的
name参数值,未手动设置的话会返回Keras自动生成的名称如dense_2这类格式
方法2:遍历计算图节点确认(适配冻结模型场景)
如果需要确认节点对应的算子类型,避免冻结时选错节点,可以遍历全图操作节点筛选:
for op in model.graph.get_operations(): # 筛选输出层常用的Softmax类算子 if 'Softmax' in op.type or 'predictions' in op.name.lower(): print("节点名:", op.name, "输出张量:", op.outputs)
冻结模型适配OpenCV调用的补充说明
拿到输出节点名后,可通过以下代码将Keras模型转为OpenCV dnn模块可读取的冻结pb模型,注意替换代码里的输出节点名:
from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2 # 将Keras模型转为TensorFlow函数 infer_func = tf.function(lambda input_tensor: model(input_tensor)) infer_func = infer_func.get_concrete_function( tf.TensorSpec(model.inputs[0].shape, model.inputs[0].dtype) ) # 将变量转为常量完成冻结 frozen_graph = convert_variables_to_constants_v2(infer_func) # 保存冻结后的pb模型 tf.io.write_graph( graph_or_graph_def=frozen_graph.graph, logdir="./frozen_model", name="xception_frozen.pb", as_text=False )
- 后续在OpenCV中加载该pb模型做推理时,输出blob对应的节点名就填你之前获取到的输出节点名即可。
内容的提问来源于stack exchange,提问作者beaustroms
相关产品推荐
相关产品推荐

