【PyTorch】Tensor数据类型

基本数据类型

  • torch.Tensor是一种包含单一数据类型元素的多维矩阵
  • https://www.youtube.com/watch?v=fCVuiW9AFzY
  • tensor.float() 张量类型转换
  • 一般使用LongTensor比较多

Torch定义了七种CPU tensor类型和八种GPU tensor类型:

在这里插入图片描述
在这里插入图片描述

torch数据生成

  • 如numpy/pandas/pytorch这几个库,直接生成数据并不是刚需,因为数据的生成更多来自于read(),所以更多地是数据维度上的操作和变换
  • 接收
    • torch.tensor()参数
      • 接收的是具体的数据
      • torch.tensor会从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应的torch.LongTensor、torch.FloatTensor和torch.DoubleTensor
      • torch.tensor([1,2])
    • torch.Tensor()参数 是默认张量类型torch.FloatTensor()的别名
      • 既可以接收数据也可以接收维度分量也就是shape
        • torch.Tensor([1,2])
        • torch.Tensor(1)
      • torch.FloatTensor()
      • torch.LongTensor()
  • 生成
    • torch.rand(100, 16, 784)
    • torch.randn()
    • torch.ones|zeros
  • 查看数据维度
    • f.dim()
    • f.size()
    • f.shape

矩阵转置

* torch.Transpose(Tensor, a,b)  转置
    * transpose只能操作2D矩阵的转置。有两种调用方式。
    * 连续使用transpose也可实现permute的效果。
* permute(0, 2, 1)  置换
    * 将tensor的维度换位

tensor乘法

* torch.mul, torch.mm, torch.matmul
    * https://blog.csdn.net/da_kao_la/article/details/87484403
* bmm
    * batch1 = torch.randn(10, 3, 4)
    * batch2 = torch.randn(10, 4, 5)
    * res = torch.bmm(batch1, batch2)
    * res.size()
    * torch.Size([10, 3, 5])
* 

view张量重塑

pytorch_reshape = t.view([6, 5, 4])
numpy_reshape = a.reshape([6, 5, 4])

import torch
a=torch.Tensor(2,3)
a
# 3.8686e+25  9.1836e-39  1.2771e-40
# 9.0079e+15  1.6751e-37  2.9775e-41
# [torch.FloatTensor of size 2x3]

# view()函数作用是将一个多行的Tensor,拼接成一行。
a.view(1,-1) 
# 3.8686e+25  9.1836e-39  1.2771e-40  9.0079e+15  1.6751e-37  2.9775e-41
# [torch.FloatTensor of size 1x6]

expand

  • torch.Tensor.expand(*sizes) → Tensor
    • 返回张量的一个新视图,可以将张量的单个维度扩大为更大的尺寸。

squeeze()和unsqueeze()

  • torch.squeeze()
    • 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成(3)行。squeeze(a)就是将a中所有为1的维度删掉。不为1的维度没有影响。a.squeeze(N) 就是去掉a中指定的维数为一的维度。还有一种形式就是b=torch.squeeze(a,N) a中去掉指定的定的维数为一的维度。
  • torch.unsqueeze()
    • 这个函数主要是对数据维度进行扩充。给指定位置加上维数为一的维度,比如原本有个三行的数据(3),在0的位置加了一维就变成一行三列(1,3)。a.squeeze(N) 就是在a中指定位置N加上一个维数为1的维度。还有一种形式就是b=torch.squeeze(a,N) a就是在a中指定位置N加上一个维数为1的维度
b=torch.Tensor(1,3)
b
3.3447e+30  6.1237e-43  5.9179e+32
[torch.FloatTensor of size 1x3]

b.squeeze(0)  
3.3447e+30
6.1237e-43
5.9179e+32
[torch.FloatTensor of size 3]


b.squeeze(1)
3.3447e+30  6.1237e-43  5.9179e+32
[torch.FloatTensor of size 1x3]
c=torch.Tensor(3)


7.5589e+28
5.2839e-11
1.8888e+31
[torch.FloatTensor of size 3]


c.unsqueeze(0)
7.5589e+28  5.2839e-11  1.8888e+31
[torch.FloatTensor of size 1x3]

c.unsqueeze(1)
7.5589e+28
5.2839e-11
1.8888e+31
[torch.FloatTensor of size 3x1]


unsqueeze()与squeeze()作用相反。参数代表的意思相同。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值