【发布时间】:2019-11-28 23:29:37
【问题描述】:
我是 pytorch 的新手。我想知道如何将标量声明为参数。我想知道以下两种方式有什么区别?
x = torch.randn(1,1, requires_grad=True)
和
tensor = torch.randn(1,1)
x = Variable(tensor, requires_grad=True)
【问题讨论】:
我是 pytorch 的新手。我想知道如何将标量声明为参数。我想知道以下两种方式有什么区别?
x = torch.randn(1,1, requires_grad=True)
和
tensor = torch.randn(1,1)
x = Variable(tensor, requires_grad=True)
【问题讨论】:
根据pytorch官方文档here,
Variable API 已被弃用:变量不再需要使用带有张量的 autograd。 Autograd 自动支持将 requires_grad 设置为 True 的张量。
Variable(tensor) 和 Variable(tensor, requires_grad) 仍按预期工作,但它们返回的是张量而不是变量。
var.data 和 tensor.data 是一回事。
var.backward()、var.detach()、var.register_hook() 等方法现在适用于具有相同方法名称的张量。
此外,现在可以使用torch.randn()、torch.zeros()、torch.ones() 等工厂方法以及以下其他方法创建带有requires_grad=True 的张量:
autograd_tensor = torch.randn((2, 3, 4), requires_grad=True)
【讨论】:
Variable 已弃用,如果要声明新参数,
你应该使用torch.nn.Parameter()。
您可以像这样简单地使用它:
some_weights = torch.nn.Parameter(torch.rand(3, 2))
bias = torch.nn.Parameter(torch.ones(2))
您也可以看看this answer,它很好地了解了如何使用nn.Parameter()。
【讨论】: