Python 在pytorch中引入nn.参数的目的
我是Pytorch的新手,对Python 在pytorch中引入nn.参数的目的,python,neural-network,deep-learning,pytorch,Python,Neural Network,Deep Learning,Pytorch,我是Pytorch的新手,对nn.Parameter和autograd.Variable之间的区别感到困惑。我知道前者是变量的子类,具有梯度。但是我真的不明白为什么我们要引入参数以及什么时候应该使用它 摘要: 感谢iacolippo的解释,我终于理解了参数和变量之间的区别。总之,pytorch中的变量与tensorflow中的变量不同,前者不附加到模型的可训练参数,而后者将附加到模型的可训练参数。附加到模型意味着使用model.parameters()将向您返回特定参数,这在培训阶段用于指定培
nn.Parameter
和autograd.Variable
之间的区别感到困惑。我知道前者是变量
的子类,具有梯度。但是我真的不明白为什么我们要引入参数
以及什么时候应该使用它
摘要:
感谢iacolippo的解释,我终于理解了
参数
和变量
之间的区别。总之,pytorch中的变量
与tensorflow中的变量
不同,前者不附加到模型的可训练参数,而后者将附加到模型的可训练参数。附加到模型意味着使用model.parameters()
将向您返回特定参数,这在培训阶段用于指定培训所需的变量。“变量”在某些网络中作为缓存更有用。来自文档:
Parameters
是Tensor
子类,当与Module
s一起使用时,它们具有非常特殊的属性-当它们被指定为Module
属性时,它们会自动添加到其参数列表中,并显示在Parameters()
迭代器中。分配张量没有这种效果。这是因为可能需要在模型中缓存一些临时状态,如RNN
的最后一个隐藏状态。如果没有像Parameter
这样的类,这些临时变量也会被注册
例如,当您初始化优化器时,请考虑:
optim.SGD(model.parameters(),lr=1e-3)
优化器将只更新模型的注册参数
变量
s仍存在于Pytorch 0.4中,但已弃用。从文档中:
变量
API已被弃用:变量
s不再需要与张量一起使用自动加载
。自动加载自动支持张量
,并将requires\u grad
设置为True
Pytorch pre-0.4 在0.4版之前的Pytorch中,需要将
张量
包装在torch.autograd.Variable
中,以便跟踪应用于它的操作并执行区分。从0.3中的变量的文档中:
包装张量并记录应用于它的操作。
Variable
是一个围绕Tensor
对象的薄包装器,它还包含对它的梯度w.r.t.,以及对创建它的函数的引用。此引用允许追溯创建数据的整个操作链。如果变量
是由用户创建的,那么它的梯度fn
将是无
,我们称这些对象为叶变量
。
由于autograd
仅支持标量值函数微分,grad
大小始终与数据
大小匹配。另外,grad
通常仅分配给叶变量,否则将始终为零
wrt参数
的差异大致相同。从0.3中的参数的文档中:
一种被视为模块参数的变量
。
参数
是变量
子类,与模块
s一起使用时具有非常特殊的属性-当它们被指定为模块
属性时,它们会自动添加到其参数列表中,并将出现在参数()
迭代器中。分配变量
没有这种效果。这是因为可能需要在模型中缓存一些临时状态,比如RNN的最后一个隐藏状态。如果没有像Parameter
这样的类,这些临时变量也会被注册
另一个区别是参数不能是易变的,默认情况下它们需要渐变。切换到0.4版本,您就没有变量了。@Paddy Hi Paddy,切换到0.4.0版本后,我仍然有变量您不需要使用变量。对于后面的回答,我很抱歉。谢谢,现在我知道pytorch中的参数就像tensorflow中的变量一样。出于好奇,为什么pytorch在版本0.4.0之前引入了该参数?在0.4.0版本之前,参数和变量之间有什么区别吗?我知道了。看起来“variable”很有用,那么为什么不推荐使用它呢?不推荐使用它是因为Tensor现在具有这种行为,而不需要将它包装到另一个类中