继承tf.keras.Model传参后args显示为0的问题求助
问题分析与解决方案
你在调试时看到tf.keras.Model的__new__方法中args数量为0,这是正常的Python参数传递行为——因为你实例化myClass时所有参数都用了关键字形式(inputs=...、outputs=...等),没有传入位置参数,所以__new__方法接收的*args自然是空元组,所有参数都在**kwargs里。
如果这个情况导致模型初始化出现功能问题(比如无法正确构建Functional模式的模型),可以按以下方式调整:
方案1:保持关键字参数调用,修正父类初始化方式
你的myClass无需手动把参数打包成args列表,直接用关键字参数传递给父类即可,更清晰且符合父类参数设计:
class myClass(tf.keras.Model): def __init__(self, inputs, outputs, name=None, trainable=True, **kwargs): # 直接通过关键字参数传递给父类 super().__init__(inputs=inputs, outputs=outputs, name=name, trainable=trainable, **kwargs)
这样既保留关键字参数调用的便利性,也能让父类正确接收所需参数。
方案2:实例化时使用位置参数
若希望__new__方法的args不为空,可改用位置参数传递inputs、outputs、name和trainable:
# 参数顺序需与__init__定义一致:inputs, outputs, name, trainable model = myClass(model_inputs, model_outputs, model_name, True, **model_kwargs)
此时__new__方法的args会包含这4个位置参数,kwargs则对应model_kwargs中的内容。
关键说明
tf.keras.Model的__new__方法内部会同时检查args和kwargs来判断是否为Functional模式构建(只要存在inputs和outputs参数,不管是位置还是关键字传递),所以只要你正确传入这两个参数,即使__new__的args为空,模型也能正常初始化。如果代码没有报错,只是调试时看到args为空,完全无需担心,这是正常现象。
内容的提问来源于stack exchange,提问作者user22921298
相关产品推荐
相关产品推荐

