1. Tensor
import numpy as np
import torch
# 初始化 tensor 1
t = torch.tensor([1, 2, 3])
print(t.dtype) # torch.int64
t=torch.FloatTensor([1, 2, 3])
print(t.dtype) # torch.float32
t=torch.tensor([1., 2., 3.])
print(t.dtype) # torch.float32
# 初始化 tensor 2
np_array = np.arrange(12).reshape(3, 4)
# [[0, 1, 2, 3],
# [4, 5, 6, 7],
# [8, 9, 10, 11]]
t = torch.from_numpy(np_array)
# 指定 tensor 类型
t =torch.tensor([1, 2, 3], dtype = float32) # float32
# 随机创建 tensor torch.rand(2, 3) # 返回 tensor 尺寸 print(t.shape) # torch.Size([2, 3]) # 创建全0、1 tensor torch.zeros(3, 4) torch.ones(3, 2) torch.zeros_like(t) # 创建一个跟 t 一样的 tensor torch.rand_like(t) # 创建一个跟 t (除了数据)一样的 tensor
# Size
t = torch.rand(2, 3)
t.size() # torch.Size([2, 3])
t.size(0) # 2
t.size(1) # 3
# device
t.device # device(type = 'cpu')
# 移动到 gpu
# 判断 cuda 可用
torch.cuda.is_available()
# 移动 gpu
t = t.to('cuda')
Tensor 数据类型转换
# tensor 数据类型转换 t = torch.rand([2, 3], dtype = int32) t = t.type(torch.float32) t = t.long() # int64 t = t.float() # float32
torch 运算
# torch 运算 t + 3 # tensor 全部元素 + 3 t + t1 # tensor + tensor 对应元素相加 t.add(t1) # 等价于上面 赋值给 t 不开新内存 # .abs # .mean # .sum # .multiply # .divide # .matmul 矩阵乘法 '@' # .T 转置 # .item() 维度为 0 的 tensor 转换为 python 数据类型 # .numpy() tensor - > numpy
view 方法
# 转换形状 t = torch.rand(4, 6) # numpy 里的 reshape <==> tensor 里的 view t = t.view(3, 8) t.shape # torch.Size([3, 8]) # 常用来展平 t = t.view(-1, 1)
squeeze
# t1 = torch.rand([12, 48]) t1 = t1.view(1, 12, 48) # torch.Size([1, 12, 48]) # squeeze 去掉 1 维 的维度 t2 = torch.squeeze(t1) # torch.Size([12, 48])
张量 自动微分
#
t.requires_grad # True / False 判断
t.requires_grad(True) # t.requires_grad = True 设置
t = torch.ones(2, 2, requires_grad = True)
y = t + 5
y # tensor([[6., 6.],
[6., 6.]], grad_fn = ) 计算此张量的方法
y.requires_grad # True
z = y * 2
out = z.mean()
out.backward() # 计算此过程 每一中间结果的梯度
t.grad # grad 记录 计算得到的梯度
######### 不记录 微分 ########
#1
with torch.no_grad():
y = t + 2 # y.requires_grad = False
#2
t.requires_grad(False)
#3
out = out.detach()



