You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

继承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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:40:29