- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在关注 60-minute blitz on PyTorch但对将 numpy 数组转换为张量有疑问。教程示例 here .
这段代码:
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
产量
[2. 2. 2. 2. 2.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
不过
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
a = a + 1 #the diff is here
print(a)
print(b)
产量
[2. 2. 2. 2. 2.]
tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
为什么输出不同?
最佳答案
这实际上与 PyTorch 关系不大。比较
import numpy as np
a = np.ones(5)
b = a
紧随其后
np.add(a, 1, out=a)
print(b)
或
a = a + 1
print(b)
np.add(a, 1, out=a)
和 a = a + 1
是有区别的。在前者中,您保留具有不同值(2
而不是 1
)的相同对象(数组)a
;在后者中,您会得到一个新 数组,它绑定(bind)到相同的变量名a
并且具有2
的值。然而,“原始”a
被丢弃,除非有其他东西(b
)指向它,否则将被释放。换句话说,第一个操作是就地的,而后者是异地的。由于 b
保留了最初在 a
处找到的数组,因此将 a + 1
重新分配给 a
不会影响b
的值。另一种就地突变语法是
a[:] = a + 1
print(b)
关于PyTorch,很简单。 from_numpy
创建一个为实际对象(数组)起别名的张量,因此它等同于我第一个代码段中的 b = a
行。张量将跟踪调用时名为 a
的数组的变化,而不是名称 a
指向的变化。
关于python - PyTorch 在张量和 numpy 数组之间的转换 : the addition operation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55040217/
我正在使用 MLKiT 加载自定义 tensoflow 模型而读取模型时出现以下错误 java.lang.IllegalArgumentException:无法在类型为 UINT8 的 TensorF
我有一个形状为 (?, L) 的二维张量 A,它指的是通过神经网络获得的特征(其中“?”是批量大小),以及形状为(N、K、L 的 3-D 张量 B )。显然,B中有N个形状为(K,L)的数组,称为C。
我是一名优秀的程序员,十分优秀!