Pytorch快速教程

张量

Tensor是pytorch中最基本的数据类型, 相当于numpy中的ndarray, 是具有追踪运算, 自动求导功能的多维数组.

1. 创建

x = torch.rand(5, 3) # 随机二维数组
x = torch.empty(5, 3) # 创建二维数组但不进行初始化
x = torch.zeros(5, 3) # 创建全零的二维数组
x = torch.tensor([1, 2, 3]) # 从list创建tensor
x = torch.from_numpy(np.array([1, 2, 3])) # 使用ndarray创建张量
# 从已有张量创建新张量, 新张量复用原有张量的未指定参数
x = x.new_ones(5, 3, dtype=torch.long) 
x = torch.randn_like(x, dtype = torch.double) # reuse the size and override the type

2. 计算

张量加法:

x + y
torch.add(x, y)
y.add_(x) # 所有带_后缀的方法都是在原地修改张量

切片: 语法和numpy一致
修改shape: 使用x.view(dim1, dim2, ..) 使用-1表示按照其他维度自适应
矩阵乘: 使用torch.mm(tensor1, tensor2)计算矩阵乘
矩阵转置: 二维矩阵的转置torch.Tensor.t()
高维矩阵的转置: torch.Tensor.transpose(dim1, dim2, dim3, ...), dim是原矩阵的维度index
元素点乘: 使用troch.mul(tensor1, tensor2)计算元素范围的乘法
numpy桥梁: 对张量使用x.numpy()获得张量对应的np.ndarray, 二者共享底层的数据, 即修改该array能够直接修改tensor的数据
获取值: 对于只含有一个元素的tensor, 可以使用x.item()获得数值, 对于含有多个元素的tensor, 使用x. tolist().

3. 使用gpu计算

在使用GPU计算前, 需要将训练集, 标签, 模型都转入到GPU中, 对于tensor, 使用x.to(device)转移到对应的设备中.

4. 其他常用方法

torch.Tensor.expand(*size):

expand函数对tensor按照size进行扩展, 这种扩展不会增加内存, 也就是说, 他们是指向的同一对象, 修改其中任意一个会修改全部. size与原tensor.size()的关系, size能够在原tensor的size为1的维扩展, 其他维保持不变, 也可以使用-1代替其他维的shape, 但是不能够不一致. 可以直接扩展为更高的维, 更高的维一定在现有维之前.

*size是解序列, 这里例如传入一个list, *list将list解析为它的所有元素

In [42]: a = torch.tensor([1, 2, 3, 4])
In [43]: a.unsqueeze(1).expand(4, 2) # (4,1)->(4,2)
Out[43]: 
tensor([[1, 1],
        [2, 2],
        [3, 3],
        [4, 4]])
In [45]: a.unsqueeze(1).expand(-1, 2) #(4,1) - (-1, 2) -> (4, 2)
Out[45]: 
tensor([[1, 1],
        [2, 2],
        [3, 3],
        [4, 4]])
a.unsqueeze(1).expand(5, -1, 2) #(4,1) -> (5, 4, 2) 
a.unsqueeze(1).expand(-1, 2, 5) # 报错, 高维在前
a.unsqueeze(1).expand(3, 2) # 报错, size不为1的dim的size, 4和3不能够对应
torch.Tensor.repeat(*size)

和expand的功能类似, 但是是对原tensor的复制, 而不是引用. 参数是每个维度的重复次数.

In [5]: a = torch.tensor([1, 2, 3, 4])
In [6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值