1.1 数据生成
- 生成一个行向量,从0开始顺序张量,全是0张量和全是1的张量
x = torch.arange(12)
x = torch.zeors((2,3,4))
x = torch.ones((2,3,4))
| reshape() | 调整个数但是不调整函数值,其中可以用-1来表示自动调整个数 | x.reshape(3,-1) |
|---|---|---|
| shape() | 用于张量形状 | |
| numel() | 用于描述元素的个数 |
1.2 运算符
| x+y,x-y,x*y,x/y | |
|---|---|
| x**y | **是求幂的运算 |
| exp(x) |
1.3 广播机制
**广播机制:**执行按照元素操作
- 通过复制来扩展一个或两个数组,使其具有相同的形状
- 对生成的数组执行按照元素操作
a = torch.arange(3).reshape((3,1))
b = torch.arange(2).reshape((1,2))
a + b = ([[0,1],[1,2],[2,3]])
这里对a和b分别进行了扩展,是复制操作
1.4 索引和切片
x[-1]来选择最后一个元素- 通过x[1:3] 来选择切片,表示访问第二个和第三个元素
- ‘‘:’’表示沿着轴的所有元素
1.5 节省内存
每次数据的操作,都会重新分配内存,这对于数据量庞大的ML来说,这是很不可取的。
- 不能一直重新分配内存,希望原地执行这些
- 不原地更新参数,其他引用仍会指向旧的内存
所以:Y[:] =
import torch
x = torch.arange(12).reshape((2,-1))
y = torch.ones((2,6))
z = torch.zeros_like(y)
before = id(z)
z[:] = x+y
print(before == id(z))
True
本文介绍了使用PyTorch进行张量操作的基本方法,包括数据生成如arange、zeros和ones,张量reshape和元素运算。讨论了广播机制在不同形状张量相加时的作用,以及索引和切片的用法。此外,还强调了内存管理的重要性,通过示例展示了如何原地修改张量以避免频繁的内存分配。
957

被折叠的 条评论
为什么被折叠?



