pytorch学习-torch相关api总结

torch api总结

总结一些常用的api,以防忘记。
完整api链接地址:https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch/
torch 包含了多维张量的数据结构以及基于其上的多种数学操作。另外,它也提供了多种工具,其中一些可以更有效地对张量和任意类型进行序列化。

torch创建相关

# 1. 返回一个2维张量,对角线位置全1,其它位置全0
# torch.eye(n, m=None, out=None)
torch.eye(3)
tensor([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])

# 2. 将numpy.ndarray 转换为pytorch的 Tensor。 
# 返回的张量tensor和numpy的ndarray共享同一内存空间。
# 修改一个会导致另外一个也被修改。返回的张量不能改变大小。
# torch.from_numpy(ndarray) → Tensor
a = np.array([1,1,1,1])
a
array([1, 1, 1, 1])
b = torch.from_numpy(a)
b
tensor([1, 1, 1, 1])

# 3. 返回一个1维张量,包含在区间start 和 end 上均匀间隔的steps个点。 输出1维张量的长度为steps。
# torch.linspace(start, end, steps=100, out=None) → Tensor

torch.linspace(0,100,11)
tensor([  0.,  10.,  20.,  30.,  40.,  50.,  60.,  70.,  80.,  90., 100.])

# 4. 其他常见的api
torch.ones(2,2)
tensor([[1., 1.],
        [1., 1.]])
# rand和randn分别是服从均匀分布、标准正态分布。
torch.randn(2,2)
tensor([[ 2.0120, -0.8677],
        [-2.7664, -0.0545]])
torch.rand(2,2)
tensor([[0.1918, 0.3749],
        [0.0534, 0.0704]])

torch 索引,切片,连接,换位

# 矩阵拼接
# torch.cat(inputs, dimension=0) → Tensor

x=torch.rand(2,2)
x
tensor([[0.7937, 0.9239],
        [0.5410, 0.9292]])
torch.cat((x,x),0)
tensor([[0.7937, 0.9239],
        [0.5410, 0.9292],
        [0.7937, 0.9239],
        [0.5410, 0.9292]])
a = torch.cat((x,x),1)
tensor([[0.7937, 0.9239, 0.7937, 0.9239],
        [0.5410, 0.9292, 0.5410, 0.9292]])
        
# 接上一个例子
# squeeze 将输入张量形状中的1 去除并返回。 如果输入是形如(A×1×B×1×C×1×D),那么输出形状就为: (A×B×C×D)
# unsqueeze 和squeeze相反,dim不传的话,
# torch.squeeze(input, dim=None, out=None)
# torch.unsqueeze(input, dim=None, out=None)
torch.unsqueeze(a, 0)
tensor([[[0.7937, 0.9239, 0.7937, 0.9239],
         [0.5410, 0.9292, 0.5410, 0.9292]]])
torch.squeeze(a, 0)
tensor([[0.7937, 0.9239, 0.7937, 0.9239],
        [0.5410, 0.9292, 0.5410, 0.9292]])

# 转置
# torch.transpose(input, dim0, dim1, out=None) → Tensor
x
tensor([[0.7937, 0.9239],
        [0.5410, 0.9292]])
x.t()
tensor([[0.7937, 0.5410],
        [0.9239, 0.9292]])

torch序列化

# torch 保存到文件
torch.save(obj, f)
# torch 从文件读取
>>> torch.load('tensors.pt')
# Load all tensors onto the CPU
>>> torch.load('tensors.pt', map_location=lambda storage, loc: storage)
# Map tensors from GPU 1 to GPU 0
>>> torch.load('tensors.pt', map_location={'cuda:1':'cuda:0'})

torch 数学操作

# masked_fill 覆盖指定位置的值
a = torch.tensor([3,10,10])
a.masked_fill(mask=torch.ByteTensor([1,1,1]),value=torch.tensor(-1e9))
tensor([-1000000000, -1000000000, -1000000000])


# matmul 矩阵乘法  
# [2,3]*[3*4]=[2,4]  [2,3,4]*[4,5]=[2,3,5]
# [1,2,3,4]*[2,4,5] = [1,2,3,5]
# 维度不相等,第一维广播;维度太长,从最后两维开始计算,前面对齐
# 实在不行就自己执行下看看效果
c = torch.matmul(a,b)

# bmm 3维矩阵乘法 [2,3,4]*[2,4,3] = [2,3,3]
b = torch.bmm(a,a)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值