参考:
方法 | 功能 / 注意事项 |
---|---|
id() | 可以打印变量的内存地址 |
y = x | 直接赋值,两个变量共享内存 |
torch.full((3, 2), 2) | tensor([[2, 2], [2, 2], [2, 2]]) |
torch.arange(1, 10, 1) | tensor([1, 2, 3, 4, 5, 6, 7, 8, 9]) |
torch.linspace(1, 10, 10) | tensor([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]) |
torch.normal(0, 1, size=(1, 3)) | # 正态分布 tensor([[ 0.3916, -0.0035, 0.6998]]) |
torch.cat([a, a], dim=1) | # 在某个维度进行拼接,维度不扩充 dim=1: [a.size(0), a.size(1) + a.size(1), a.size(2), …] |
torch.stack([a, a], dim=1) | # 在某个维度进行拼接,维度扩充 dim=1: [a.size(0), 2, a.size(1), a.size(2), …] |
torch.split(d, split_size_or_sections=[1, 2, 1], dim=1) | # 用列表来指定切分的长度 dim=1分别切分为1, 2, 1 |
mask = tensor([False, True, True, False]), d[:, mask, :] | 通过mask来进行切片 |
b.reshape(-1, 1), b.view(-1, 1) | [b.size(0)*b.size(1)…, 1] |
d.transpose(1, 0) | # 维度交换 [d.size(1), d.size(0), d.size(2), …] |
d.squeeze(dim=1) | # 压缩 如果dim=1的维度为1,则[d.size(0), d.size(2), …] |
d.unsqueeze(dim=1) | # 拓展 [d.size(0), 1, d.size(1), d.size(2), …] |
torch.matmul(x, y) | 矩阵乘法 |
torch.mul(y, z) , y * z | 矩阵点乘 |
torch.rand((1, 1), requires_grad=True) | 需要计算梯度,tensor默认不计算梯度 |
with torch.no_grad(): | 可以执行计算,但该计算不会在反向传播中被记录。 |
w.grad | tensor的梯度 |
w.grad.zero_() | 梯度清零 tensor([[0.]]) |
x.retain_grad() | # 非叶子节点保留梯度,默认清除 |
w -= x, w.sub_(x) | in-place原地操作,地址不变 |
optimizer.zero_grad() | 梯度清零 |
loss.backward() | autograd自动求导计算梯度 |
optimizer.step() | 反向传播更新参数 |
out.gt(0.5) | 返回bool,指示每一位是否>0.5 |