Pytorch是一个基于Python的科学计算库,类似于Numpy,但它可以使用GPU运算,也可以用它定义深度学习模型,并训练。本文介绍Pytorch基本数据类型Tensor,Tensor类似于Numpy的ndarray,可以在GPU上进行加速运算。
代码示例
1、创建tensor
import torch import numpy as np # 创建一个5行3列的未初始化矩阵 torch.empty(5, 3) # 初始化一个5x3的矩阵 torch.rand(5, 3) # 随机均匀分布,范围0-1 torch.randn(5, 3) # 随机正态分布,均值为0,方差为1 torch.zeros(5, 3) # 全0 torch.ones(5, 3) # 全1 # 根据列表创建 data = [[1, 2], [3, 4]] torch.tensor(data) # tensor([[1, 2],[3, 4]]) # 从numpy转化 np_data = np.array([1, 2, 3]) x = torch.tensor(np_data) # tensor([1, 2, 3]) # 创建相同形状的tensor torch.rand_like(x, dtype=torch.float) torch.ones_like(x) torch.zeros_like(x)
2、查看tensor属性
t = torch.randn(4, 3) t.shape # torch.Size([4, 3]) t.size() # torch.Size([4, 3]) t.dtype # torch.float32
3、tensor操作
t = torch.ones(3, 4) # 切片 print(t[:, 0]) # 第一列 print(t[..., -1]) # 最后一列 # 修改数值 t[1, 1] = 0 # reshape print(t.view(2, 6)) print(t.view(2, -1))
4、tensor运算
# 加法 t1 = torch.rand(3, 2) t2 = torch.ones(3, 2) print(t1 + t2) print(t1 + 1) t3 = torch.empty(3, 2) torch.add(t1, t2, out=t3) print(t3) # inplace=True t1.add_(t2) print(t1) t5 = torch.rand(2, 3) t6 = torch.rand(2, 3) # 矩阵乘法,一行乘一列 print(t5 @ t6.T) # 2x3 @ 3x2 print(torch.matmul(t5, t6.T)) # 对应元素相乘 print(t5 * t6) print(torch.mul(t5, t6).sum()) # 内积
5、其他
# 转numpy t7 = torch.tensor([[1, 2], [3, 4]]) print(t7.numpy()) # 线性等距数列,且需要计算梯度 t8 = torch.linspace(1, 10, 20, requires_grad=True) print(t8.data) # 不希望被autograd记录 # 取数值(脱壳) t9 = torch.rand(1) print(t9.item()) # 拼接 t10 = torch.ones(2, 3) print(torch.cat([t10, t10], dim=1)) # GPU加速 device = 'cuda' if torch.cuda.is_available() else 'cpu' t11 = torch.ones(3, device=device) # 转numpy print(t11.to('cpu').numpy()) print(t11.cpu().numpy())
参考文档:https://pytorch.org/tutorials/beginner/basics/tensorqs_tutorial.html
本文为 陈华 原创,欢迎转载,但请注明出处:http://edu.ichenhua.cn/read/306