【问题标题】:What does "*" operator do before the tensor size in PyTorch?PyTorch 中的张量大小之前,“*”运算符做了什么?
【发布时间】:2020-07-13 19:20:28
【问题描述】:

我现在正在学习在 PyTorch 中构建神经网络。以下是从.py 文件中截取的代码:

x = torch.unsqueeze(torch.linspace(-1, 1, 1000), dim=1)
y = x.pow(2) + 0.1*torch.normal(torch.zeros(*x.size()))

对于x.size() 之前的* 运算符的实用性,我感到很困惑。我尝试删除它并绘制散点图,证明与未删除*的散点图相同。

我也在https://pytorch.org/docs/stable/tensors.html中查看了size的官方文档,但我无法弄清楚。

Image of torch.size item in documentation

如果您能帮助我,我将不胜感激。

【问题讨论】:

    标签: python neural-network operators pytorch tensor


    【解决方案1】:

    * 在此处对结果没有影响的原因是 torch.zero 除了上述的可变数量的参数像列表或元组这样的集合 here。这并不意味着 * 本身没有用。

    那么,由于torch.Size() 类是python 元组的子类,因此可以使用 *. (x.size() 将返回一个 torch.Size() 对象)

    总结一下,x.size() 会给你(1000, 1)*x.size() 在参数中 会给你1000, 1 并且两者都被torch.zeros() 接受

    【讨论】:

    • 您的回答非常准确和清晰!非常感谢!
    【解决方案2】:

    * 在 Python 中像这样使用表示(参数)解包。当您将其添加到可迭代对象(x.size() 返回的内容)之前,它会解包并(在此处)将其项目作为位置参数传递给函数。例如:

    def f(a1, a2):
        print(a1, a2)
    
    f(*["Hello", "World"])
    

    您可以查看another example 和更详细的description 的文档链接。

    【讨论】:

    • 非常感谢!这个答案很容易理解!
    猜你喜欢
    • 2021-07-31
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多