【问题标题】:What does the & operator do in PyTorch and why does it change the shape?& 运算符在 PyTorch 中做了什么,为什么它会改变形状?
【发布时间】:2019-05-30 15:05:35
【问题描述】:

我的代码包含xy,两者都是torch.autograd.variable.Variable 类型。它们的形状是

torch.Size([30, 1, 9])
torch.Size([1, 9, 9])

我不明白的是,为什么以下会导致不同的大小/形状

z = x & y
print(z.shape)

哪个输出

torch.Size([30, 9, 9])

为什么z的形状在x & y之后是30*9*9? x的形状是30*1*9,y的形状是1*9*9,&x & y里面做了什么?

【问题讨论】:

    标签: pytorch


    【解决方案1】:

    这与& 运算符无关,而是与广播在 Python 中的工作方式有关。在 NumPy 中引用 Eric Wieser's excellent documentation on broadcasting

    为了广播,一个操作中两个数组的尾随轴的大小必须相同或其中之一必须是一个。

    以引用页面中的以下图片为例:

    这转化为您的问题如下:

    • a 的形状为 30 x 1 x 9
    • b 的形状为 1 x 9 x 9

    因此结果是这样创建的:

    • result1a1,因为 a1 > b1
    • result2b2,因为 a2 < b2
    • result3 既是 a3 又是 b3,因为 a3 = b3

    因此result 的形状为 30 x 9 x 9。

    另请注意,& 运算符在张量项的二进制编码上实现 logical conjunction

    【讨论】:

      【解决方案2】:

      我不确定,但我最好的猜测是 & 为数组中的每个项目取最大值。可以肯定的是,请尝试在 pytorch 文档中查找 & 运算符。希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-13
        • 2018-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-20
        • 2016-07-22
        相关资源
        最近更新 更多