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

PyTorch中Parameter实现原理:data变量存储机制的疑问

PyTorch中Parameter的data属性解析

首先明确核心事实:Parameter是Tensor的直接子类,它本身就是一个完整的Tensor实例,并非对Tensor的包装。你看到的data属性并非Parameter独有,而是所有PyTorch Tensor都具备的通用属性。

关于data属性的本质

  1. 不存在所谓“父Tensor”:Parameter实例本身就持有张量数据的存储。当你创建Parameter(data=torch.tensor([1.,2.]))时,通过PyTorch内部的Tensor._make_subclass方法,传入的data张量的存储会被转移到新的Parameter实例中——换句话说,这个Parameter实例就是存储数据的那个Tensor对象。
  2. data是Tensor基类的内置属性:对于任何Tensor(包括Parameter),data属性返回的是一个脱离autograd梯度追踪的视图。它和原张量共享底层数据存储,但对data的修改不会被记录到计算图中。举个例子:
    import torch
    p = torch.nn.Parameter(torch.tensor([1., 2.]))
    print(p.data is p)  # 输出False,但二者共享底层存储
    p.data.add_(1.)
    print(p)  # 输出Parameter containing: tensor([2., 3.])
    
  3. 为什么源码里看不到定义:data并非普通的Python实例变量,它的实现是在PyTorch的C++核心代码中,属于Tensor类的底层特性,所以在Parameter的Python源码里找不到它的定义。

总结

  • Parameter没有额外包装Tensor,它自己就是Tensor,因此能直接调用*、tanh()等张量操作。
  • data属性是Tensor基类提供的,用来获取底层数据的无梯度视图,并非指向某个不存在的父对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:14:50