TensorFlow 2.13.0下无法以.tf格式保存ConvNeXtTiny模型
解决TensorFlow中ConvNeXt模型无法以TF格式保存的问题
方案1:重新构建模型并迁移权重
由于原模型内部存在名称为None的可追踪层,导致TF格式保存失败,可通过重新初始化干净的模型并迁移权重来规避:
import tensorflow as tf # 根据实际情况修改输入形状和类别数 input_shape = (224, 224, 3) num_classes = 10 # 加载训练好的原模型(或直接使用训练后的model变量) original_model = tf.keras.applications.convnext.ConvNeXtTiny( weights=None, input_shape=input_shape, num_classes=num_classes ) # 若之前存过H5权重则加载,刚训练完的模型可跳过此步 original_model.load_weights("trained_weights.h5") # 初始化全新的ConvNeXt模型 new_model = tf.keras.applications.convnext.ConvNeXtTiny( weights=None, input_shape=input_shape, num_classes=num_classes ) # 迁移训练好的权重 new_model.set_weights(original_model.get_weights()) # 保存为TF格式 new_model.save("my_tf_model", save_format="tf")
方案2:手动修复模型中层的None名称
遍历模型所有层,将名称为None的层手动命名,避免保存时的转义错误:
import tensorflow as tf # 初始化并训练模型(你的原有流程) model = tf.keras.applications.convnext.ConvNeXtTiny( weights=None, input_shape=(224, 224, 3), num_classes=10 ) # ... 训练代码 ... # 遍历修复层名称 for idx, layer in enumerate(model.layers): if layer.name is None: layer._name = f"convnext_auto_layer_{idx}" # 保存TF格式模型 model.save("my_tf_model", save_format="tf")
问题原因
这个错误源于ConvNeXt模型的部分内部子层在构建时未被正确命名,name属性为None。而TensorFlow的TF格式保存机制依赖可追踪变量的名称转义,当处理None值时,escape_local_name函数会触发AttributeError。H5格式保存不依赖这套追踪逻辑,其他模型(如ResNet、EfficientNet)的层都有合法名称,因此不会出现该问题。
内容的提问来源于stack exchange,提问作者big tree
相关产品推荐
相关产品推荐

