TensorFlow Keras从层配置重建时报错Keyword argument not understood: axis
错误原因
你的操作逻辑方向没问题,但写法存在错误:tf.keras.layers.Layer是所有Keras层的基类,仅包含通用属性,不识别具体层的专属参数。从你给出的层配置可以判断,索引132的层是BatchNormalization层,axis是BatchNormalization的专属初始化参数,基类无法识别,因此触发报错。
正确实现方案
单层层克隆+权重迁移
不用手动调用基类实例的from_config,直接用原层的类来加载配置即可,代码如下:
# 获取原层对象 original_layer = MCM_feature_extractor.get_layer(index=132) # 用原层对应类的from_config方法加载配置,生成新层 cloned_layer = type(original_layer).from_config(original_layer.get_config()) # 迁移原层权重到新层 cloned_layer.set_weights(original_layer.get_weights())
批量复制多层+函数式API构建新模型
如果要复制多个层,直接循环处理即可,函数式API拼接示例:
# 假设你要复制索引120到140的层,输入shape和原模型输入一致 input_shape = MCM_feature_extractor.input_shape[1:] inputs = tf.keras.Input(shape=input_shape) x = inputs for layer_idx in range(120, 141): # 逐层克隆+权重迁移 original_layer = MCM_feature_extractor.get_layer(index=layer_idx) cloned_layer = type(original_layer).from_config(original_layer.get_config()) cloned_layer.set_weights(original_layer.get_weights()) # 函数式API拼接 x = cloned_layer(x) # 生成最终新模型 new_model = tf.keras.Model(inputs=inputs, outputs=x)
补充说明
如果需要单独用配置重构层,也可以用Keras自带的通用反序列化方法,会自动识别层类型:
config = MCM_feature_extractor.get_layer(index=132).get_config() # 注意deserialize需要传入包含class_name和config的字典,get_config返回的是config部分,需要补充类名 cloned_layer = tf.keras.layers.deserialize({ "class_name": original_layer.__class__.__name__, "config": config })
内容的提问来源于stack exchange,提问作者Luciano Dourado
相关产品推荐
相关产品推荐

