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

kwargs如何隐式传递给变量?PyTorch FashionMNIST参数传递疑问

PyTorch FashionMNIST 参数传递逻辑说明

核心原理

Python类实例化时,__new__方法仅负责创建空实例对象,所有调用时传入的位置参数、关键字参数,会在__new__执行完成后自动传递给__init__方法。你调试时看到__new__没传递kwds属于正常逻辑,参数实际是走__init__继承链完成处理的。

具体参数传递路径

FashionMNIST的继承链为FashionMNIST -> MNIST -> VisionDataset -> Dataset,你传入的transform=ToTensor()处理流程如下:

  • 参数首先流入VisionDataset基类的__init__方法,该方法显式声明了transform、target_transform、transforms三个参数,会直接将参数赋值给实例的同名属性:self.transform = transform
  • 后续调用数据集__getitem__取样本时,会自动调用实例上存储的transform方法,对加载的原始PIL图片做张量转换,所以你传入的参数实际会生效。

kwds的常见读取存储位置

  • 基类__init__方法:如果继承链上的类使用**kwargs接收参数,会在__init__阶段提取合法的参数存入实例变量,不合法的多余参数会直接抛出异常。
  • 子类自定义配置读取:部分数据集子类会在自己的__init__里从kwds中提取特有配置,比如subset、year、download_url等参数,存入实例供后续逻辑使用。
  • 辅助方法调用:数据集的download()、_check_integrity()等内置辅助方法,也可能从kwds中读取重试次数、超时时间、校验规则这类配置参数。

你可以参考VisionDataset的简化实现理解逻辑:

class VisionDataset(Dataset):
    def __init__(self, root: str, 
                 transforms: Optional[Callable] = None,
                 transform: Optional[Callable] = None, 
                 target_transform: Optional[Callable] = None) -> None:
        self.root = root
        self.transforms = transforms
        self.transform = transform
        self.target_transform = target_transform

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:27:01